php-console / 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控制台使用头部与客户端通信,因此必须在任何输出之前调用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'));
查看所有可用的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的示例,适用于您的生产服务器。
保护连接
通过密码保护
$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接口,以便将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控制台。