【问题标题】:How to debug php scripts at server side? In a situation client page doesn't show response如何在服务器端调试 php 脚本?在某种情况下,客户端页面不显示响应
【发布时间】:2011-03-27 19:02:28
【问题描述】:

我目前正在我的主机上测试一个脚本。该脚本用于接受 PayPal IPN 数据、做一些事情(即数据验证)、将必要的数据发送到特定的电子邮件地址等等。

我正在使用 PayPal 网站上的测试工具将测试数据发布到我的脚本中。我的脚本不起作用:应该有一个代码,但我看不到错误。 PayPal 中的测试工具只是发帖,似乎不接受任何回复。我想看看我的脚本中发生了什么,以便我可以修复它。如何获取脚本输出的错误消息?

有什么想法吗?

【问题讨论】:

  • 呃...print_r($_POST);?不过,我不确定我是否真的理解你的问题。

标签: php


【解决方案1】:

您可以使用(可能是本地的)Web 服务器,其中包括 PHP 和 xdebug。如果在 Windows 中调试,一些预安装,如 UwAmp 或 USBWebServer 就可以了。

【讨论】:

    【解决方案2】:

    不确定您是否已经对此进行了测试(放在 PHP 脚本的开头):

    error_reporting(-1);
    ini_set('display_errors', 'On');
    

    如果没有显示,请使用 .htaccess 尝试(如果在 Apache 上):

    php_flag display_errors on
    php_value error_reporting -1
    

    有了这个你应该得到你的错误。如果没有,请尝试您的服务器日志,或者如果仍然没有帮助,请尝试 echo 一些控制值以查找崩溃的位置...

    当然,这仅用于调试目的,您应该在生产时将其关闭。

    【讨论】:

    • display_errors 开启,错误必须返回,但测试页面简单忽略任何响应,可能只是丢弃响应包。
    • 如果没有,请尝试使用 .htaccess 将它们设置为 ON。有时当出现语法错误时,PHP 会发出 HTTP 500 错误并在错误为 ON 时显示空白页。在这些情况下,使用 .htaccess 将它们设置为 ON 会有所帮助。如果没有尝试检查您的服务器日志。
    • 我收到 HTTP 错误 500(内部服务器错误),因为服务器按照 PHP 开发人员的建议以“CGI 模式”运行 PHP。解决方案是将提到的两行(稍作修改)放在同一目录中的php.ini 文件中:display_errors = On error_reporting = -1
    【解决方案3】:

    更好的方法是将错误记录到文件中,而不是“屏幕”中。如果您进行服务器范围的更改,则服务器上的其他站点可能会受到影响。

    • log_errors = 开启
    • display_errors = 关闭
    • error_log = /tmp/php.log(或您选择的更好路径;文件可能需要可由 Apache/webserver 写入)。

    如果以上所有方法都失败,请安装 xdebug 并尝试调试代码 - 您可以逐行逐行检查并随意检查变量 - 也许这会给您一个更好的主意。

    如果做不到这一点,请求助于 var_dump() 和朋友。

    【讨论】:

      【解决方案4】:

      使用日志文件,然后阅读它们。

      基本上在脚本开始时打开一个文件,然后在代码中的各个点将一些变量转储到该文件中,然后您可以浏览该文件并检查输出,这样您就可以看到您的脚本出了什么问题

      【讨论】:

      • 这就是我现在正在使用的,但这样我就无法知道错误是什么。我可以确定哪条线出错了,但不知道这条线出了什么问题。只能靠经验来分析……在这种情况下可能没有办法得到错误信息,我害怕所以虽然我是提出这个问题的人
      • 查看 GingerDog 的帖子 - 这样您可以将 php 错误记录到文件中并阅读。
      【解决方案5】:

      在这种情况下,您应该看到$_POST 数组在控制台中打印的内容。在使用所有必需的配置进行初始化后,尝试在页面的最开头使用以下代码:-

      <?php
      // include all required configurations
      // if needed, include the header file also
      
      echo '<pre>';
      print_r($_POST); // for viewing it as an array
      var_dump($_POST); // for viewing all info of the array
      echo '</pre>';
      die();
      
      // other HTML or PHP Logic follows
      ?>
      

      如果这不起作用,那么您将需要放置一些断点,通过在一些代码之后放置一些“exit”语句,然后逐步执行尽可能多的代码方式。

      希望对你有帮助。

      【讨论】:

      • 恕我直言,最好使用var_dump($_POST)
      • $_POST 都是对的,是paypal制作的,我发到我的邮箱看看,都对。我的脚本中有一些问题,但我看不到错误。
      猜你喜欢
      • 2021-02-11
      • 1970-01-01
      • 2023-02-12
      • 1970-01-01
      • 2010-11-23
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多