【问题标题】:PHP script does nothing. How to debug?PHP 脚本什么都不做。如何调试?
【发布时间】:2014-08-28 18:18:59
【问题描述】:

我有一个什么都不做的脚本。它甚至没有在脚本的第一行返回回显??

我所有的其他脚本都可以工作,它们相似,具有相同的权限并且位于同一个文件夹中。

它在远程网络空间中运行。我该如何调试?

【问题讨论】:

    标签: php remote-debugging


    【解决方案1】:

    将下面的行放在脚本的顶部。

    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
    

    如果脚本中有任何错误,它会告诉你。

    【讨论】:

      【解决方案2】:

      检查您的 php.ini 设置。

      在你的 php.ini 中:

      display_errors = On
      error_reporting = E_ALL
      

      然后重新启动您的网络服务器并重试。

      【讨论】:

        【解决方案3】:

        作为一名程序员,知道使用调试工具会很方便。 我建议你使用xdebug

        【讨论】:

          【解决方案4】:

          作为最后的手段,(正如其他人提到的首选方式)

          您可以注释掉所有代码,并回溯代码告诉它停止,只需注意 if{ } 块和其他控制结构。 例如..说你有这个代码。

          <?php
          
          function do_nothing(){
          
          }
          
          $somthing = 1;
          if($something){
            do_nothing();
          }
          
          $badCode = 'hello'
          
          $array = array(1,2,3,4,5);
          
          foreach($array as $item ){
             echo 'item: '.$item;
          }
          

          什么都不输出,因为它坏了。

          你可以

          <?php
          /*
          function do_nothing(){
          
          }
          
          $somthing = 1;
          if($something){
            do_nothing();
          }
          
          $badCode = 'hello'
          
          $array = array(1,2,3,4,5);
          
          foreach($array as $item ){
             echo 'item: '.$item;
          }
          */
          echo 'works';
          

          输出

          'works'
          

          然后继续

          <?php
          /*
          function do_nothing(){
          
          }
          
          $somthing = 1;
          if($something){
            do_nothing();
          }
          
          $badCode = 'hello'
          */
          $array = array(1,2,3,4,5); //need this for the loop
          foreach($array as $item ){
           //don't comment half this block
             echo 'item: '.$item;
          }
          
          echo 'works';
          

          输出

          'item: 1'
          
          'item: 2'
          
          'item: 3'
          
          'item: 4'
          
          'item: 5'
          
          'works'
          

          最后

          <?php
          /*
          function do_nothing(){
          
          }
          
          $somthing = 1;
          if($something){
            do_nothing();
          }
          */
          $badCode = 'hello'
          
          $array = array(1,2,3,4,5); //need this for the loop
          foreach($array as $item ){
           //don't comment half this block
             echo 'item: '.$item;
          }
          
          echo 'works';
          

          损坏,(缺少分号 $badCode = 'hello';)

          可以肯定的是,这是一种基本的调试方式。但是如果您尊重控制块,它将在 100% 的时间内工作..

          还要确保熟悉不同的打印功能。

          • echo — 输出一个或多个字符串
          • print_r — 打印关于变量的人类可读信息
          • var_export — 输出或返回变量的可解析字符串表示
          • var_dump — 转储有关变量的信息
          • debug_backtrace — 生成回溯

          我敢肯定还有更多,但这些是最常见的。使用&lt;pre&gt; 也很有用 在打印对象和数组之前标记以保留空白并使其易于阅读。

          我也喜欢用这个小功能(它可以告诉你你是从哪一行打印出来的)

          /**
           * export a variable with line number from backtrace using offset
           * @param mixed $var
           * @param int $offset
           */
          function print_debug($var=null, $offset=0){
              $stacktrace = debug_backtrace(false);
              $trace = $stacktrace[$offset];
              extract($trace);
              echo "<span style='color: #CCC;'> Output from FILE[ $file ] LINE[ $line ]</span>";
              echo "<pre>";
              var_export($var);
              echo "</pre>";
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-01-30
            • 2018-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-08
            相关资源
            最近更新 更多