如何调试PHP脚本?
当我们在PHP中编写大量代码然后发生一些错误时,删除该错误可能是一项艰巨的任务。程序员在使用PHP编程时会犯的一些基本错误是:
- 缺少分号“;”和右括号“}”。
要调试上述错误,使用良好的PHP IDE 将非常有帮助,因为它会建议右括号“}”和语句结束“;”。 - 变量名拼错。记住 $var != $Var 众所周知, PHP是一种区分大小写的语言。
- 使用“=”而不是“==”(赋值运算符和相等运算符)
例子:if($a = $b) { // Statement }
这将始终导致 True,因为将一个变量分配给另一个变量绝不是错误。
- SQL 查询中缺少引号,例如“”和“”。这是PHP编程时发生的一个非常常见且频繁的错误。要调试这种错误,请始终使用带有 echo 的mysqli_error($con)命令来查看您在 SQL 语句中发生的错误,其中$con是您正在使用的连接变量。
例子:if (!mysqli_query($conn, $sql)) { echo "Error: " . $sql . "" . mysqli_error($con); }
- 如果您的PHP脚本在运行时没有输出,请确保在PHP.ini 文件中将“display_errors”设置为打开。
- “Parse Error” – 当您的代码无法被PHP理解时,就会发生此错误。此错误通常与语法错误一起发生。
- “误解 isset() 行为”——尽管它的名字,isset() 不仅在项目不存在时返回 false,而且对于 null 值也返回 false。这种行为比最初可能出现的问题更多,并且是问题的常见来源。
例子:$data = fetchRecordFromStorage($storage, $identifier); if (!isset($data['keyShouldBeSet']) { // do something here if 'keyShouldBeSet' is not set }
这段代码的作者大概想检查 keyShouldBeSet 是否设置在 $data 中。但是,正如所讨论的,如果 $data['keyShouldBeSet'] 已设置但设置为 null,则 isset($data['keyShouldBeSet']) 也将返回 false。所以上面的逻辑是有缺陷的。
- 一个常见错误是在使用 HTML 命令之前缺少PHP关闭。所以总是用“?>”关闭PHP ,然后编写HTML代码,在结束HTML代码后使用“ PHP”重新开始PHP编码。
- PHP调试工具:可以使用许多调试工具之一来调试PHP代码,以附加调试器客户端。 PhpStorm 可与 Xdebug 和 ZendDebugger 等调试实用程序一起使用。
作为一个多语种(知道或使用多种语言),我们需要一个支持多种语言的 IDE。过去使用 Visual Studio 的 Xdebug,所以让我们看看如何使用 VS Code 进行设置。
调试服务器设置相同,但每个客户端(IDE 或 CLI)的设置略有不同。看到调试服务器(一个 Zend 扩展)打开了一个端口,客户端通过该端口与服务器通信。这只是配置和安装正确组件的问题。
以下是进行PHP编程的步骤:
- 检查 VS Code 中的PHP扩展。
- 安装PHP调试扩展。
- 单击“重新加载”以重新加载 VS Code。
- 安装 Xdebug。 VS Code 的PHP Debug 扩展只集成到 Xdebug。如果我们安装PHP 7.0,那么它必须从下载页面获取正确版本的 Xdebug。
- 现在,当您拥有正确的版本时,将其放在PHP/ext 目录中。
- 接下来,您需要配置PHP以使用该扩展并允许远程调试。将以下配置添加到PHP Info 中列出的PHP .ini 文件中:
; set the extension path zend_extension="C:/Program Files (x86)/PHP/v7.0/ext/php_xdebug-2.6.1-7.0-vc14-nts.dll" ; allow remote debugging [XDebug] xdebug.remote_enable = 1 xdebug.remote_autostart = 1
它将设置PHP服务器以使用 XDebug。无论您使用什么 IDE,此处的步骤都是相同的。
- Xdebug 打开一个 HTTP 端口,以便您的调试器可以附加。客户端仍然需要配置为附加和使用调试协议。
最后,配置 VS Code 连接到 Xdebug。有几个简单的步骤,然后附加是自动的。
- 配置您的 IDE:安装 Xdebug 后,您需要配置 IDE 以附加到调试器。在 VS Code 中,这意味着添加调试配置。幸运的是,此时它是自动的。这只是几个简单的步骤:
- 切换到调试视图。
- 单击齿轮以调出语言菜单。
- 选择PHP。 Visual Studio Code 将生成默认配置。
- 重新加载PHP服务器。我们必须安装另一个名为“PHP Server”的扩展来简化此操作。使用上下文菜单(右键单击)来控制PHP服务器。
- 它使 IDE 处于准备附加到 Xdebug 的状态。与调试器的通信通过调试服务器上的 TCP 端口进行。 Xdebug 默认通过端口 9000 使用 DBGp 协议。
- 附加调试器: VS Code 的PHP调试扩展生成了一个 launch.json 文件。该文件进入项目根目录中的 .vscode 目录。
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000 }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9000 } ] }
它正在添加两个启动配置。这些在调试视图中可用。我们可以附加到正在运行的服务器或使用当前脚本启动新服务器。由于我已经运行了 phpinfo,我将从那里开始选择 Listen for XDebug 以附加到该服务器。连接后,您将看到调试工具栏。大多数调试器都有类似的控制机制,允许启动、停止、步进和重新启动调试器。
- 切换错误报告级别: PHP有几种配置错误报告的方法。您可以使用PHP.ini 文件并且必须访问它。否则,您可能会使用 htaccess 配置。如果您不能使用配置文件,您可以选择通过脚本更改值。设置的组合将获得正确级别的错误记录。您要考虑以下设置:
- error_reporting 设置日志记录的级别。
- E_NOTICE 在开发过程中很有用,因为它会告知诸如未分配变量之类的缺陷。
- display_errors 用于显示错误信息。
- display_startup_errors 只能在调试时使用。
- log_errors 和 error_log 一起工作以将错误发送到日志文件。在生产中执行此操作,而不是向最终用户展示它们。
- PHP手册更详细地说明了这些设置并提供了更多信息。