haohetao/php-console

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

3.1.8 2019-07-25 03:43 UTC

This package is auto-updated.

Last update: 2024-09-16 03:37:17 UTC


README

Author GitHub release Coverage Status Build Status Software License Packagist

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

概览

要求

  • 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 中。但是,对于像 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 Console 的客户端进行懒加载优化。这里有在生产服务器上正确初始化 PhpConsole 的 示例

保护连接

通过密码保护

ScreenShot

$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:*:*:*:*'));

处理错误

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 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代码执行

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.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控制台。