adeotek/php-console

PHP库,用于Google Chrome扩展“PHP Console”。

v3.2.2 2021-05-05 12:24 UTC

This package is not auto-updated.

Last update: 2024-10-03 04:32:07 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": {
		"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中。但是,对于像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'));

/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的示例

保护连接

通过密码保护

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接口,以便与PSR-3兼容的记录器(例如Monolog)集成。请参阅PhpConsole\PsrLogger

跳转到文件

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

从PhpConsole v1.xv3.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控制台。