📜  如何调试PHP脚本?

📅  最后修改于: 2022-05-13 01:56:43.581000             🧑  作者: Mango

如何调试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代码,以附加调试器客户端。 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手册更详细地说明了这些设置并提供了更多信息。