adeotek / php-console
PHP库,用于Google Chrome扩展“PHP Console”。
Requires
- php: >=5.6.0
- ext-json: *
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": {
"adeotek/php-console": "^3.2"
}
}
或
$ composer require adeotek/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
中。但是,对于像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'));
在/src/PhpConsole/Storage中查看所有可用的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的示例。
保护连接
通过密码保护
$connector->setPassword('yohoho123', true);
客户端需要输入密码才能获取对PHP控制台服务器数据的访问权限。所有密码都以SHA-256散列的形式存储在客户端。第二个参数表示PHP控制台授权令牌将取决于客户端IP。
仅SSL连接模式
$connector->enableSslOnlyMode();
因此,所有PHP控制台客户端都将自动重定向到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控制台具有多功能和智能变量转储器,允许:
- 转储任何类型的变量。
- 转储受保护的私有对象属性。
- 通过级别、项目数量、项目大小和总大小限制转储(见
$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接口,以便与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控制台。