PHP 调试套件,适用于日常工作

2.2.0 2023-12-26 19:06 UTC

This package is auto-updated.

Last update: 2024-09-26 20:43:49 UTC


README

这个库基本上只是 Kint 和 PHP-Console 的包装器,将它们结合起来成为一个强大的调试工具。

安装

使用 composer 安装此包

composer require neunerlei/dbg

环境检测

不建议在生产环境中使用此库。然而,如果您已经考虑了风险并知道如何操作,此库会尽力帮助您尽可能安全地在生产环境中运行。

为此,您可以使用不同的机制来确定何时启用调试器。首先,要启用环境检测,将 "environmentDetection" 设置为 true

  1. 您可以通过将 "enabled" 配置选项(请参阅“配置”部分以获取更多信息)设置为 false 来完全禁用此库的功能。
  2. 您可以定义一个环境变量来决定是否启用调试。默认情况下,脚本会寻找名为 "APP_ENV" 的环境变量,其值必须为 "dev" 才能启用调试。您可以配置变量的名称以及期望的值。(为向后兼容,PROJECT_ENV 也有效)
  3. 默认情况下,CLI 命令被认为是 "安全的",将允许执行调试方法。(请参阅 "cliIsDev" 选项)
  4. 您可以在浏览器通过特定的引用者传输时只启用调试。要启用此功能,请查看 "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");

在浏览器中会渲染如下内容

Preview

在 CLI 应用中会渲染如下内容

Preview

dbge()

与 dbg() 完全相同,但在将参数输出到屏幕后,会终止脚本的执行 exit(0)。

trace()

将当前的调试回溯打印到屏幕上,按照当前上下文(html 或 cli)格式化。

trace();

在浏览器中会渲染如下内容

Preview

tracee()

同样,与 trace 完全相同,但在打印后终止脚本的执行。

logConsole()

此函数专门用于浏览器开发。它依赖于 PHP-Consolechrome php console 扩展,将给定的值渲染到 JavaScript 控制台,而不使用 html 脚本标签或类似的东西。当执行重定向或抛出异常时,它也会工作,因为数据将通过 HTTP 头部传输。

logConsole("foo");

这将输出如下内容

Preview

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