php-console/php-console

PHP 库,用于 Google Chrome 扩展 "PHP Console"。

安装量: 2,314,325

依赖: 49

建议者: 14

安全: 0

星标: 1,342

关注者: 89

分支: 283

开放问题: 56

3.1.8 2019-07-25 03:43 UTC

This package is auto-updated.

Last update: 2024-09-18 20:33:08 UTC


README

Author GitHub release Coverage Status Build Status Software License Packagist

PHP Console 允许您使用 Google Chrome 扩展 PHP ConsolePhpConsole 服务器库 来处理 PHP 错误和异常、转储变量、远程执行 PHP 代码以及许多其他操作。

概览

要求

对于 PHP 版本小于 5.3 的项目,您可以尝试使用旧 已弃用版本 的 PHP Console。但请注意,实际最新版本功能更强大。

安装

Composer

{
	"require": {
		"php-console/php-console": "^3.1"
	}
}

$ composer require php-console/php-console

Monolog 处理程序

https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/PHPConsoleHandler.php

Symfony 框架包

https://github.com/Vitre/php-console-bundle

Yii 框架扩展

https://yiiframework.cn/extension/php-console

Slim 框架

https://github.com/amenadiel/SlimPHPConsole(感谢 @amenadiel

Silex 框架服务提供者

https://github.com/barbushin/php-console-silex(感谢 @Chi-teck

Laravel 4.* & 5.* 框架服务提供者

https://github.com/barbushin/php-console-laravel

Drupal CMS 模块

https://drupal.org/project/pc(感谢 @Chi-teck

WordPress 插件

https://github.com/unfulvio/wp-php-console(感谢 @nekojira

使用方法

您可以在 实时演示 服务器上尝试 PHP Console 的多数功能。

连接器

存在一个PhpConsole\Connector类,用于初始化PHP服务器和Google Chrome扩展之间的连接。当初始化PhpConsole\Connector实例时,连接会被初始化。

$connector = PhpConsole\Connector::getInstance();

此外,当调用PhpConsole\Handler::getInstance()PhpConsole\Helper::register()时,连接也会被初始化。

通信协议

PHP控制台使用头部与客户端通信,因此必须在任何输出之前调用PhpConsole\Connector::getInstance()PhpConsole\Handler::getInstance()。如果脚本关闭前发送了头部或PHP控制台的响应包大小超过了web服务器头部大小限制,那么PHP控制台将把响应数据存储在PhpConsole\Storage实现中,并在额外的HTTP请求中将其发送到客户端的STDOUT。因此,PHP控制台的响应包大小没有限制。

处理某些框架中覆盖了$_SESSION处理器的问题

默认情况下,PHP控制台使用PhpConsole\Storage\Session来存储延迟响应,因此所有临时数据都将存储在$_SESSION中。但是,对于像SymfonyLaravel这样的框架,它们覆盖了PHP会话处理器,存在一些问题。在这种情况下,您应使用任何其他的PhpConsole\Storage实现,例如

// Can be called only before PhpConsole\Connector::getInstance() and PhpConsole\Handler::getInstance()
PhpConsole\Connector::setPostponeStorage(new PhpConsole\Storage\File('/tmp/pc.data'));

查看所有可用的PhpConsole\Storage实现,请参阅/src/PhpConsole/Storage

删除源基本路径

如果您想使错误源和跟踪路径更短,请调用

$connector->setSourcesBasePath('/path/to/project');

因此,路径如/path/to/project/module/file.php将在客户端显示为/module/file.php

支持不同的服务器编码

如果您的内部服务器编码不是UTF-8,那么您需要调用

$connector->setServerEncoding('CP1251');

初始化性能

PhpConsole服务器库针对只安装了Google Chrome扩展PHP控制台的客户端进行了优化,以实现懒初始化。这里有一个正确的初始化PhpConsole的示例,适用于您的生产服务器。

保护连接

通过密码保护

ScreenShot

$connector->setPassword('yohoho123', true);

客户端将需要输入密码才能获取对PHP控制台服务器数据的访问权限。所有密码都以SHA-256散列的形式存储在客户端。第二个参数表示PHP控制台的授权令牌将取决于客户端IP。

仅SSL连接模式

$connector->enableSslOnlyMode();

因此,所有PHP控制台客户端将被自动重定向到HTTPS。

通过允许的IP掩码列表保护连接

$connector->setAllowedIpMasks(array('192.168.*.*', '2001:0:5ef5:79fb:*:*:*:*'));

处理错误

ScreenShot

存在一个PhpConsole\Handler类,用于初始化PHP错误和异常处理器,并提供以下功能

  • 处理PHP错误(+致命错误和内存限制错误)和异常。
  • 忽略重复错误。
  • 调用先前定义的错误和异常处理器。
  • 使用$handler->handleException($exception)处理捕获的异常。
  • 使用$handler->debug($var, 'some.tags')调试变量。

在您的项目主脚本顶部初始化PhpConsole\Handler

$handler = PhpConsole\Handler::getInstance();
/* You can override default Handler behavior:
	$handler->setHandleErrors(false);  // disable errors handling
	$handler->setHandleExceptions(false); // disable exceptions handling
	$handler->setCallOldHandlers(false); // disable passing errors & exceptions to prviously defined handlers
*/
$handler->start(); // initialize handlers

调试变量

ScreenShot

PHP控制台具有多功能和智能变量转储器,允许您

  • 转储任何类型的变量。
  • 转储受保护和私有对象的属性。
  • 通过级别、项目数量、项目大小和总大小限制转储(见 $connector->getDumper())。
  • 转储对象的类名。
  • 智能转储回调和Closure。
  • 检测转储调用来源 & 跟踪(调用 $connector->getDebugDispatcher()->detectTraceAndSource = true)。

如何调用

最长的本地调试方法调用

PhpConsole\Connector::getInstance()->getDebugDispatcher()->dispatchDebug($var, 'some.tags');

较短的从Handler调用调试

PhpConsole\Handler::getInstance()->debug($var, 'some.tags');

最短的使用全局 PC 类调用调试

PhpConsole\Helper::register(); // it will register global PC class
// ...
PC::debug($var, 'tag');
PC::tag($var);

自定义通过用户定义的函数调用调试

function d($var, $tags = null) {
	PhpConsole\Connector::getInstance()->getDebugDispatcher()->dispatchDebug($var, $tags, 1);
}
d($var, 'some.tags');

标签

  • 调试标签参数是可选的。
  • 标签是一个由点分隔的字符串(例如 "low.db")。
  • 标签可以用来标识确切转储了哪些变量。
  • 您可以配置客户端以忽略显示某些标签。

远程PHP代码执行

ScreenShot

PHP控制台提供了一种方法,可以通过Google Chrome扩展终端在您的服务器上远程执行PHP代码。

  • 仅允许在受密码保护的模式下远程执行PHP代码
  • 每个eval请求都使用唯一的SHA-256令牌签名
  • 结果包含: outputreturntime 数据
  • 处理PHP代码执行期间发生的错误 & 异常

配置

$connector = PhpConsole\Connector::getInstance();
$connector->setPassword($password);

// Configure eval provider
$evalProvider = $connector->getEvalDispatcher()->getEvalProvider();
$evalProvider->addSharedVar('post', $_POST); // so "return $post" code will return $_POST
$evalProvider->setOpenBaseDirs(array(__DIR__)); // see https://php.ac.cn/open-basedir

$connector->startEvalRequestsListener(); // must be called in the end of all configurations

PSR-3记录器实现

PHP控制台实现了PSR-3接口,以便将PHP控制台与PSR-3兼容的记录器(例如 Monolog)集成。请参阅PhpConsole\PsrLogger

跳转到文件

阅读这篇文章,如果您想配置PHP控制台扩展,以便通过在通知弹出窗口中单击按钮,直接在您的IDE中打开错误/异常源文件:行。

从PhpConsole v1.x轻松迁移到v3.x

如果您已使用PhpConsole v1.x并希望在不进行任何代码更改的情况下迁移到v3.x,则只需使用PhpConsole\OldVersionAdapter

PhpConsole\OldVersionAdapter::register(); // register PhpConsole v1.x class emulator

// Call old PhpConsole v1 methods as is
PhpConsole::start(true, true, $_SERVER['DOCUMENT_ROOT']);
PhpConsole::debug('Debug using old method PhpConsole::debug()', 'some,tags');
debug('Debug using old function debug()', 'some,tags');
echo $undefinedVar;
PhpConsole::getInstance()->handleException(new Exception('test'));

// Call new PhpConsole methods, if you want :)
PhpConsole\Connector::getInstance()->setServerEncoding('cp1251');
PhpConsole\Helper::register();
PC::debug('Debug using new methods');

但是,无论如何,如果您无法因为服务器上使用PHP < 5.3而迁移到PHP控制台的新版本,那么您可以使用旧的已弃用版本的PHP控制台。