haohetao / php-console
PHP 库,用于 Google Chrome 扩展 "PHP Console"。
Requires
- php: >=5.3.0
Requires (Dev)
- ext-mbstring: *
- phpunit/phpunit: ^4.8
- psr/log: ^1.0
README
PHP Console 允许您使用 Google Chrome 扩展 PHP Console 和 PhpConsole 服务器库 来处理 PHP 错误和异常、转储变量、远程执行 PHP 代码等。
概览
- 查看 演示视频。
- 安装 Google Chrome 扩展 PHP Console。
- 在 实时演示 页面上查看其工作方式。
- PHP Console 扩展的 功能列表和截图。
- PHP Console 服务器库的 功能列表。
- Chrome 扩展源代码 https://github.com/barbushin/php-console-extension
要求
- PHP Console 扩展 必须安装在 Google Chrome 上(扩展源代码也位于 GitHub 上)
- 服务器上 PHP 5.3(或更高版本)。
对于 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 Console 使用头部与客户端进行通信,因此必须在任何输出之前调用 PhpConsole\Connector::getInstance()
或 PhpConsole\Handler::getInstance()
。如果脚本关闭前发送了头部或 PHP Console 响应包大小超出了 Web 服务器头部大小限制,那么 PHP Console 将将响应数据存储在 PhpConsole\Storage 实现中,并通过附加的 HTTP 请求发送到客户端的 STDOUT。因此,PHP Console 响应包大小没有限制。
处理某些框架中覆盖的 $_SESSION 处理器的问题
默认情况下,PHP Console 使用 PhpConsole\Storage\Session 来处理延迟响应,因此所有临时数据都会存储在 $_SESSION
中。但是,对于像 Symfony 和 Laravel 这样的框架,它们覆盖了 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 Console 的客户端进行懒加载优化。这里有在生产服务器上正确初始化 PhpConsole 的 示例。
保护连接
通过密码保护
$connector->setPassword('yohoho123', true);
客户端需要输入密码才能访问 PHP Console 服务器数据。所有密码都作为 SHA-256 哈希存储在客户端。第二个参数表示 PHP Console 授权令牌将取决于客户端 IP。
仅 SSL 连接模式
$connector->enableSslOnlyMode();
因此,所有 PHP Console 客户端都将自动重定向到 HTTPS。
通过允许的 IP 掩码列表保护连接
$connector->setAllowedIpMasks(array('192.168.*.*', '2001:0:5ef5:79fb:*:*:*:*'));
处理错误
存在一个 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
调试变量
PHP Console 具有多功能和智能变量转储器,允许您
- 转储任何类型的变量。
- 转储受保护的私有对象属性。
- 通过级别、项目数量、项目大小和总大小限制转储(请参阅
$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代码执行
PHP控制台提供了一种方法,可以从Google Chrome扩展终端在您的服务器上远程执行PHP代码。
- 仅在受密码保护的模式下允许远程PHP代码执行
- 每个eval请求都使用唯一的SHA-256令牌签名
- 结果包含:
output
、return
和time
数据 - 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控制台。