PHP中默认的错误处理很简单,一条消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的信息。错误处理是代码编写中非常重要的部分。
报告的错误和被忽略的错误都是由php.ini指令error_reporting控制的,或者在运行时调用error_reporting()。但是强烈建议设置配置指令,因为一些错误在脚本开始执行时产生。在开发环境中通常将error_reporting设置为E_ALL,以便了解并修复PHP所提出的问题。在生产中可能会将其设置为较少输出的级别。PHP对这些错误的处理依赖于另外两个PHP.ini指令。display_errors控制错误是否做为脚本输出的一部分被显示。在生产环境中,应该始终禁用这一功能,因为它可以包含诸如数据库密码之类的机密信息,但在开发中通常是有用的,因为它可以确保即时报告问题。除了显示错误之外,还可以通过启动log_errors指令来记录错误。会将错误记录到由error_log定义的文件或syslog。这在生产环境中非常有用,因为您可以记录发生的错误,然后根据这些错误生成报告。
报告的错误和被忽略的错误都是由php.ini指令error_reporting控制的,或者在运行时调用error_reporting()。但是强烈建议设置配置指令,因为一些错误在脚本开始执行时产生。在开发环境中通常将error_reporting设置为E_ALL,以便了解并修复PHP所提出的问题。在生产中可能会将其设置为较少输出的级别。PHP对这些错误的处理依赖于另外两个PHP.ini指令。display_errors控制错误是否做为脚本输出的一部分被显示。在生产环境中,应该始终禁用这一功能,因为它可以包含诸如数据库密码之类的机密信息,但在开发中通常是有用的,因为它可以确保即时报告问题。除了显示错误之外,还可以通过启动log_errors指令来记录错误。会将错误记录到由error_log定义的文件或syslog。这在生产环境中非常有用,因为您可以记录发生的错误,然后根据这些错误生成报告。
die函数
对于一些可预见并可检测的错误,如要打开的文件不存在等可以通过die函数来输出错误信息并中止脚本的执行。<?php
if(!file_exists("welcome.txt")){
die("File not found");
}else{
$file=fopen("welcome.txt","r");
}
?>
自定义错误处理函数
创建一个自定义错误处理函数,在PHP中发生错误时调用该函数。错误处理函数至少要接受两个参数错误级别error_level和错误信息error_message,最多可接受五个参数,另外三个可选参数是发生错误的文件名file、错误发生的行号line-number以及一个包含错误发生时在用的每个变量以及它们的值的数组err_context。错误的触发除了代码错误以外还可以通过调用trigger_error()函数触发。<?php
function myErrorHandler($errno, $errstr){
echo("Error:[$errno] $errstr\n");
echo("end!");
die();
}
set_error_handler("myErrorHandler");
//echo($test);
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
ERROR异常
PHP7改变了大多数错误的报告方式,与PHP5不同的是,大多数异常做为Error异常被抛出。这些Error异常可以像Exception异常一样被第一个匹配的try/catch块所捕获,如果没有匹配的catch块则调用异常处理函数进行处理,如果未注册异常处理函数,则按传统的方式处理:被报告为一个致命错误。Error不是继承自Exception类所以不能用catch(Exception $e)来捕获,可以通过catch(Error $e)来捕获。通过trigger_error生成的错误不能通过try/catch捕获。PHP7还定义了一些内置错误。<?php
try{
doSomething();
}catch(Error $e){
echo "hello error\n";
echo $e->getMessage();
}
?>