PHP中错误级别说明及错误控制配置方式总结

php错误级别

php共有16个错误级别,分别如下:

  • E_ERROR
    这种错误是Fatal Error, 程序无法继续执行, 例如调用一个未定义的方法

    Fatal error: Call to undefined function test() in /data/wwwroot/test/index.php on line 5
    test();
    
  • E_WARNING
    这种错误是运行时警告,不会终止脚本继续进行,例如require一个不存在的文件

    PHP Warning:  require(a.php): failed to open stream: No such file or directory in /home/ning/sandisk/projects/php/t.php on line 3
    
  • E_NOTICE
    这种错误更为轻微一些,是运行时错误,一般是代码的bug引起的,例如使用一个未定义的变量

    PHP Notice:  Undefined variable: a in /home/ning/sandisk/projects/php/t.php on line 3
    
  • E_PARSE
    这种是编译时解析错误 ,例如结尾忘记了分号

    PHP Parse error:  syntax error, unexpected end of file, expecting ',' or ';' in /home/ning/sandisk/projects/php/t.php on line 5
    
  • E_STRICT
    这种错误是PHP5之后引入的,代码可以运行,但不是PHP建议的写法,以确保代码具有最佳的互操作性和向前兼容性,例如函数形参传递++符号

    function change ( & $var ) {
     $var += 10 ;
    }
    $var = 1 ;
    change ( ++ $var );
    
  • E_RECOVERABLE_ERROR
    PHP 5.2.0之后引入,可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获,将成为一个 E_ERROR从而导致脚本终止运行。

  • E_DEPRECATED
    PHP 5.3.0之后引入,运行时通知,启用后将会对在未来版本中可能无法正常工作的代码给出警告。

  • E_CORE_ERROR
    在PHP初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由PHP引擎核心产生的。

  • E_CORE_WARNING
    PHP初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由PHP引擎核心产生的。

  • E_COMPILE_ERROR
    致命编译时错误。类似E_ERROR, 但是是由Zend脚本引擎产生的。

  • E_COMPILE_WARNING
    编译时警告 (非致命错误)。类似 E_WARNING,但是是由Zend脚本引擎产生的。

  • E_USER_ERROR
    用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数trigger_error()来产生的。

  • E_USER_WARNING
    用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用PHP函数trigger_error()来产生的。

  • E_USER_NOTICE
    用户产生的通知信息。类似 E_NOTICE, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。

  • E_USER_DEPRECATED
    用户产少的警告信息。 类似 E_DEPRECATED, 但是是由用户自己在代码中使用PHP函数trigger_error()来产生的。

  • E_ALL
    E_STRICT除外的所有错误和警告信息。

php.ini中错误控制的配置

 #报告错误级别,什么级别的
error_reporting = E_ALL
#php中的错误显示的日志位置
error_log = /tmp/php_errors.log
#是否把错误展示在输出上,这个输出可能是页面,也可能是stdout
display_errors = On
#是否把启动过程的错误信息显示在页面上,记得上面说的有几个Core类型的错误是启动时候发生的,这个就是控制这些错误是否显示页面的。
display_startup_errors = On 
#是否要记录错误日志
log_errors = On 
#错误日志的最大长度
log_errors_max_len = 1024 
#是否忽略重复的错误,On表示如果有重复的日志,那么就只会记录一条
ignore_repeated_errors = Off 
#是否使用全局变量$php_errormsg来记录最后一个错误
track_errors = Off 
#是否使用XML-RPC的错误信息格式记录错误
xmlrpc_errors = 0 
#用作 XML-RPC faultCode 元素的值。
xmlrpc_error_number = 0 
#是否把输出中的函数等信息变为HTML链接
html_errors = On   
# 如果html_errors开启了,这个链接的根路径是什么
docref_root = http://manual/en/
#是否把php错误抛出到fastcgi中
fastcgi . logging = 0

php-fpm中错误控制的配置

#php-fpm自身的日志
error_log = /var/log/php-fpm/error.log 
# php-fpm自身的日志记录级别
log_level = notice
#覆盖php.ini中的某个配置变量,可被程序中的ini_set覆盖
php_flag[display_errors] = off 
#同php_flag
php_value[display_errors] = off 
#覆盖php.ini中的某个配置变量,不可被程序中的ini_set覆盖
php_admin_value[error_log] = /tmp/www-error.log,不能在代码中使用ini_set把这个变量重新赋值了
#同php_admin_value
php_admin_flag[log_errors] = on,不能在代码中使用ini_set把这个变量重新赋值了
#是否抓取fpmworker的输出
catch_workers_output = yes 
#慢日志时长
request_slowlog_timeout = 0 
#慢日志记录
slowlog = /var/log/php-fpm/www-slow.log

php-fpm的error_log只记录php-fpm本身的日志,比如fpm启动关闭等,而php.ini中的error_log是记录php程序本身的错误日志。

36nu 分享编程知识及经验

已有账号?立即登录