neunerlei / dbg
PHP 调试套件,适用于日常工作
Requires
- php: >=7.4 <8.4
- 0.0.0/composer-include-files: ^1.5
- kint-php/kint: ^5.0.7
- php-console/php-console: ^3.1
Requires (Dev)
- phpunit/phpunit: ^9.6
README
这个库基本上只是 Kint 和 PHP-Console 的包装器,将它们结合起来成为一个强大的调试工具。
安装
使用 composer 安装此包
composer require neunerlei/dbg
环境检测
不建议在生产环境中使用此库。然而,如果您已经考虑了风险并知道如何操作,此库会尽力帮助您尽可能安全地在生产环境中运行。
为此,您可以使用不同的机制来确定何时启用调试器。首先,要启用环境检测,将 "environmentDetection" 设置为 true
- 您可以通过将 "enabled" 配置选项(请参阅“配置”部分以获取更多信息)设置为 false 来完全禁用此库的功能。
- 您可以定义一个环境变量来决定是否启用调试。默认情况下,脚本会寻找名为 "APP_ENV" 的环境变量,其值必须为 "dev" 才能启用调试。您可以配置变量的名称以及期望的值。(为向后兼容,PROJECT_ENV 也有效)
- 默认情况下,CLI 命令被认为是 "安全的",将允许执行调试方法。(请参阅 "cliIsDev" 选项)
- 您可以在浏览器通过特定的引用者传输时只启用调试。要启用此功能,请查看 "debugReferrer" 选项。(请参阅 chrome 的 引用者控制 扩展)
IP 我明确排除了 IP 的使用,以确定是否运行调试器,因为这被认为是一种相当容易出错的方法(尤其是在使用动态 IP 地址时)。如果您想使用此功能,您必须自己编写该功能。
配置
可以为调试器定义多个选项。配置是通过 Neunerlei\Dbg\Dbg::config()
函数执行的。可能的配置选项有
- enabled: (bool) 默认: TRUE | 主开关,用于启用/禁用调试功能。如果您将其设置为 false,则所有函数都不会执行或输出任何内容。
- environmentDetection: (bool) 默认: TRUE | 如果设置为 false,则禁用环境检测机制。
- envVarKey: (string) 默认: APP_ENV | 确定启用调试功能时查找的环境变量的名称。
- envVarValue: (string) 默认: dev | 与 "envVarKey" 结合使用,以确定期望从配置的环境变量中获得的值来启用调试器。
- cliIsDev: (bool) 默认: TRUE | 确定调试器是否始终在 CLI 环境中输出内容。
- debugReferrer: (string|NULL) 默认: NULL | 如果设置,这将作为期望的引用者来启用调试功能。
- preHooks: (callable|array) | 一个或多个在调试器函数(dbg、dbge、trace、tracee 等)之前运行的回调。对于扩展功能很有用。每个回调将接收 $hookType、$callingFunction 和 $givenArguments 作为参数。
- postHooks: (callable|array) | 与 "preHooks" 相同,但在调试输出之后运行。
- consolePassword: (string|NULL) 默认: NULL | 如果设置,phpConsole 将在将控制台输出打印到浏览器之前要求此值作为密码。
- logDir: (字符串|NULL) 默认: NULL | 如果设置,logFile() 函数会将日志文件输出到指定的目录。请确保它存在并且可以被 web 服务器写入!
- editorFileFormat (字符串|NULL) 默认: null | 可以用来创建可点击的链接,在您选择的 IDE 中打开。可以是如 "phpstorm://open?file=%f&line=%l" 这样的格式化模式,或者以下预定义值之一:sublime, textmate, emacs, macvim, phpstorm, phpstorm-remotecall, idea, vscode, vscode-insiders, vscode-remote, vscode-insiders-remote, vscodium, atom, nova, netbeans 或 xdebug
函数
dbg()
接受任意数量的参数,并按照当前上下文(html 或 cli)将它们打印到屏幕上。
dbg("foo");
在浏览器中会渲染如下内容
在 CLI 应用中会渲染如下内容
dbge()
与 dbg() 完全相同,但在将参数输出到屏幕后,会终止脚本的执行 exit(0)。
trace()
将当前的调试回溯打印到屏幕上,按照当前上下文(html 或 cli)格式化。
trace();
在浏览器中会渲染如下内容
tracee()
同样,与 trace 完全相同,但在打印后终止脚本的执行。
logConsole()
此函数专门用于浏览器开发。它依赖于 PHP-Console 和 chrome php console 扩展,将给定的值渲染到 JavaScript 控制台,而不使用 html 脚本标签或类似的东西。当执行重定向或抛出异常时,它也会工作,因为数据将通过 HTTP 头部传输。
logConsole("foo");
这将输出如下内容
logFile()
接收任意数量的参数,并将它们写入一个普通的日志文件。日志文件将位于(按优先级顺序)
- $_ENV["_DBG_LOG_DIR"]/dbg_debug_logfile.log 如果此环境变量包含可写入的目录路径
- Dbg::config("logDir")/dbg_debug_logfile.log 如果环境变量为空且目录可写
- /var/www/logs/dbg_debug_logfile.log 如果日志目录可写
- /$SYS_TEMP_DIR/labor_debug_logfile.log
logFile("foo");
logStream()
接收任意数量的参数,并将它们输出到配置的流中。默认情况下使用 'php://stdout' 作为输出流,这是与 docker 一起工作的最佳解决方案。输出将始终是一行,所有换行符都被移除,以保持云日志 API 的良好状态。
您可以根据需要更改流路径
- $_ENV['_DBG_LOG_STREAM'] 通过环境变量设置路径
- Dbg::config("logStream") 通过配置 API 设置路径
Dbg::isEnabled()
此函数返回 TRUE,如果调试函数当前正在运行(包括环境检测检查),否则返回 FALSE。
Dbg::config(string $key = "", $value = NULL)
此函数用于使用 "配置" 部分中显示的选项配置调试器。如果没有提供任何参数,该函数将返回当前的配置选项列表。如果只提供了键而没有值,它将返回给定键的当前值。
如果提供了键和值,您将设置给定的配置选项。
// Disable environment detection Neunerlei\Dbg\Dbg::config("environmentDetection", FALSE);
贺卡软件
您可以自由使用此软件包,但如果它进入了您的生产环境,我将非常感激您从您家乡寄给我一张明信片,说明您正在使用我们哪些软件包。
您可以在 这里 找到我的地址。
谢谢 :D