PHP 错误调试

  • PHP 错误调试

    程序很少第一次就能正常工作。程序中可能出现许多错误,导致PHP解释器生成错误消息。您可以选择这些错误消息的位置。消息可以与其他程序输出一起发送到Web浏览器。它们也可以包含在Web服务器错误日志中。要在浏览器中显示错误消息,请将display_errors配置指令设置为On。要将错误发送到Web服务器错误日志,请将log_errors设置为On。如果要在两个位置都需要错误消息,可以将它们都设置为“On”。PHP定义了一些可用于设置error_reporting值的常量,以便只报告某些类型的错误:E_ALL(除严格通知外的所有错误),E_PARSE(解析错误),E_ERROR(致命错误),E_WARNING(警告), E_NOTICE(通知)和E_STRICT(严格通知)。在编写PHP程序时,最好使用支持PHP的编辑器,如sublimie或Emacs或一些IDE,如PHPStorm或ZendStudio。这些编辑器的一个特殊功能是语法高亮。它会根据这些部分的内容更改程序不同部分的颜色。例如,字符串为粉红色,if和while等关键字为蓝色,注释为灰色,变量为黑色。另一个功能是引用和括号匹配,这有助于确保您的引号和括号是平衡(成对出现)的。当您键入结束分隔符(如})时,编辑器会突出显示它匹配的开头的{。
    调试程序时需要验证以下几点。
    • 缺少分号 - 每个PHP语句都以分号(;)结尾。PHP不会停止读取语句,直到它达到分号。如果在行的末尾省略分号,PHP将继续阅读以下行中的语句,直到遇到分号。
    • 没有足够的等号 - 当你在比较语句中询问两个值是否相等时,你需要两个等号(==)。使用一个等号是一个常见的错误。
    • 拼写错误的变量名称 - 如果拼错了变量,PHP会将其理解为新变量。记住:对于PHP,$test与$Test不是同一个变量。
    • 缺少美元符号 - 变量名称中缺少美元符号很难看到,但至少它通常会导致错误消息,以便您知道在哪里查找问题。
    • 缺少括号和大括号 - 它们应该总是成对出现。
    • 数组索引 - 所有数组应从零而不是1开始。
    此外,正确处理所有错误并将所有跟踪消息定向到系统日志文件中,这样如果发生任何问题,它将被记录到系统日志文件中,您将能够调试该问题。
    下面将介绍几个例子
  • PHP E_NOTICE 错误级别

    E_NOTICE级别错误,代码不会中断,会继续往下执行。
    <html>
       
       <head>
          <title>E_NOTICE</title>
       </head>
       
       <body>
          
          <?php
             /* 输出一个未定义的变量会报notice错误,但是程序会往下执行 */
             echo $test1;
             $test2 = "这里会继续执行";
             echo $test2;
              
          ?>
          
       </body>
    </html>
    
    尝试一下
  • PHP E_WARNING 错误级别

    E_WARNING级别错误,代码会中断,不会继续往下执行。
    <html>
       
       <head>
          <title>E_WARNING</title>
       </head>
       
       <body>
          
          <?php
             /* 输出一个未定义的常量会报warning级别错误,但程序会往下执行 */
             echo MYTEST;
             $test2 = "这里会继续执行";
             echo $test2;
              
          ?>
          
       </body>
    </html>
    
    尝试一下
  • PHP E_FATAL 错误级别

    E_FATAL级别错误,代码会中断,不会继续往下执行。
    <html>
       
       <head>
          <title>E_FATAL</title>
       </head>
       
       <body>
          
          <?php
             /* 调用一个未定义的函数会报fatal级别错误,程序不会往下执行 */
             myfunc();
             $test2 = "这里不会继续执行";
             echo $test2;
              
          ?>
          
       </body>
    </html>
    
    尝试一下