ryunosuke / php-web-debugger
网页调试工具
Requires
- php: >=8.0
Requires (Dev)
- doctrine/dbal: 3.*
- monolog/monolog: 2.*
- phpunit/phpunit: 9.*
- ryunosuke/functions: 2.0.*
This package is auto-updated.
Last update: 2024-09-08 07:32:33 UTC
README
描述
不依赖框架,收集请求中的各种信息。简单来说就像php-debugbar这样的东西。
主要功能如下。
- 通过iframe嵌入,不会污染原始界面
- 显示错误/异常
- 显示/编辑请求(GET/POST/COOKIE/FILES/SESSION)
- 数据库查询历史
- Ajax 历史
- 执行时间和峰值内存·时间线
- 任意日志输出功能
- PRG 模式下的重定向抑制
- 文件路径关联执行
屏幕截图
安装
{ "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