ryunosuke/php-web-debugger

v2.0.1 2024-05-08 06:53 UTC

README

描述

不依赖框架,收集请求中的各种信息。简单来说就像php-debugbar这样的东西。

主要功能如下。

  • 通过iframe嵌入,不会污染原始界面
  • 显示错误/异常
  • 显示/编辑请求(GET/POST/COOKIE/FILES/SESSION)
  • 数据库查询历史
  • Ajax 历史
  • 执行时间和峰值内存·时间线
  • 任意日志输出功能
  • PRG 模式下的重定向抑制
  • 文件路径关联执行

屏幕截图

  • ScreenShot
  • ScreenShot

安装

{
    "require": {
        "ryunosuke/php-web-debugger": "dev-master"
    }
}

用法

只需将以下内容写入“请求必经之处”。如公共include或框架的Bootstrap等。

此库专门针对Web,因此在公共include的情况下,注意在Web以外的其他情况下读取时(尽管可能不会造成太大的损害)。

省略选项也能正常运行,但如需进行详细的设置,请通过参数指定。详细信息请参考源代码。

$debugger = new \ryunosuke\WebDebugger\Debugger([
    /** ひっかけるレスポンスヘッダー */
    'rewrite'      => [
        'content-type 正規表現' => fn($contents) => "書き換えたコンテンツ",
    ],
    /** bool PRG パターンの抑止フラグ */
    'stopprg'      => true,
    /** string ひっかけるパス */
    'hookpath'     => 'webdebugger-action',
    /** string 無視するパス */
    'ignore'       => '#\.(ico|map)$#',
    /** string リクエストファイル置き場 */
    'workdir'      => sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'wd-working',
    /** string パスを開く URL */
    'opener'       => 'https://:9090',
    'opener_query' => 'project=X&remote=true',
]);
$debugger->initialize([
    \ryunosuke\WebDebugger\Module\Ajax::class        => [/* 固有のモジュールオプション */],
    \ryunosuke\WebDebugger\Module\Error::class       => [/* 固有のモジュールオプション */],
    \ryunosuke\WebDebugger\Module\Server::class      => [/* 固有のモジュールオプション */],
    \ryunosuke\WebDebugger\Module\Performance::class => [/* 固有のモジュールオプション */],
    \ryunosuke\WebDebugger\Module\Log::class         => [/* 固有のモジュールオプション */],
])->start();

数据库的Master/Slave等,在多个配置中使用相同模块时,如下所示。

$debugger->initialize([
    \ryunosuke\WebDebugger\Module\Doctrine::getInstance('Master')->initialize(['connection' => $masterConnection]),
    \ryunosuke\WebDebugger\Module\Doctrine::getInstance('Slave')->initialize(['connection' => $slaveConnection]),
])->start();

简而言之,只需传递已初始化实例的数组即可。

总结来说,初始化方法有以下两种。

  • 类名 => 选项 形式传递
  • 传递已初始化的模块实例

此外,上述内容是混合的。

module

将收集各种信息的类称为“模块”。只要继承AbstractModule,就可以任意实现和添加模块。

rewrite

关于 rewrite 的补充:前提是已在body中插入调试用的html/js/css进行显示,因此如果content-type不是text/html,则不会显示图标组。例如,如果您创建了JSON WebAPI或Ajax处理,直接敲击该URL也不会显示调试器。

指定此选项后,当匹配的Content-Type时,将强制将其视为text/html,并将内容也转换为html。为了可读性,原始内容将进行格式化显示,并作为pre嵌入。

这是一种相当激进的举动,可能会导致与预期不同的结果。因此,如果有什么奇怪的地方,请将其禁用并观察情况。

opener

关于 opener 的补充:在各个模块中,错误日志的跟踪或日志调用位置等地方,都会嵌入“文件路径:行号”这样的信息。

设置opener后,在点击屏幕时,可以带有file, line参数的URL进行请求。设置 opener_query 也可以将查询参数一起发送。

bin 目录中有参考实现。

许可证

MIT