如果文件不存在,您会获得类似这样的错误:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:
[U]复制代码[/U] 代码如下:
以上代码的输出应该类似这样:
Error: [8] Undefined variable: test触发错误
在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的。在 PHP 中,这个任务由 trigger_error() 完成。
例子
在本例中,如果 "test" 变量大于 "1",就会发生错误:
[U]复制代码[/U] 代码如下:
1)
{
trigger_error("Value must be 1 or below");
}
?>
以上代码的输出应该类似这样:
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6您可以在脚本中任何位置触发错误,通过添加的第二个参数,您能够规定所触发的错误级别。
可能的错误类型:
E_USER_ERROR - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。
E_USER_WARNING - 非致命的用户生成的 run-time 警告。脚本执行不被中断。
E_USER_NOTICE - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。
例子
在本例中,如果 "test" 变量大于 "1",则发生 E_USER_WARNING 错误。如果发生了 E_USER_WARNING,我们将使用我们的自定义错误处理程序并结束脚本:
[U]复制代码[/U] 代码如下:
1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
以上代码的输出应该类似这样:
Error: [512] Value must be 1 or below
Ending Script现在,我们已经学习了如何创建自己的 error,以及如何处罚它们,现在我们研究一下错误记录。
错误记录
默认地,根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。
通过电子邮件向您自己发送错误消息,是一种获得指定错误的通知的好办法。
通过 E-Mail 发送错误消息
在下面的例子中,如果特定的错误发生,我们将发送带有错误消息的电子邮件,并结束脚本:
[U]复制代码[/U] 代码如下:
1)
{
trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>
以上代码的输出应该类似这样:
Error: [512] Value must be 1 or below
Webmaster has been notified接收自以上代码的邮件类似这样:
Error: [512] Value must be 1 or below这个方法不适合所有的错误。常规错误应当通过使用默认的 PHP 记录系统在服务器上进行记录。
错误回溯
定义和用法
PHP debug_backtrace() 函数生成一个 backtrace。
该函数返回一个关联数组。下面是可能返回的元素:
[TR]
名称
类型
描述[/TR]
[TR]
[TD]function[/TD]
[TD]字符串[/TD]
[TD]当前的函数名。[/TD][/TR]
[TR]
[TD]line[/TD]
[TD]整数[/TD]
[TD]当前的行号。[/TD][/TR]
[TR]
[TD]file[/TD]
[TD]字符串[/TD]
[TD]当前的文件名。[/TD][/TR]
[TR]
[TD]class[/TD]
[TD]字符串[/TD]
[TD]当前的类名[/TD][/TR]
[TR]
[TD]object[/TD]
[TD]对象[/TD]
[TD]当前对象。[/TD][/TR]
[TR]
[TD]type[/TD]
[TD]字符串[/TD]
[TD]当前的调用类型,可能的调用:
[U]
返回: "->" - 方法调用
返回: "::" - 静态方法调用
返回 nothing - 函数调用 [/U][/TD][/TR]
[TR]
[TD]args[/TD]
[TD]数组[/TD]
[TD]如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。[/TD][/TR]语法
debug_backtrace()例子
[U]复制代码[/U] 代码如下: