php 缺点处理
在 PHP 中,默认的缺点处理很大略。一条缺点会被发送到浏览器,这条带有文件名、行号以及描述缺点的
创建脚本和 Web 运用程序时,缺点处理是一个主要的部分。如果您的代码短缺缺点检测编码,那么程序看上去很不专业,也为安全风险洞开了大门。

本教程先容了 PHP 中一些最为主要的缺点检测方法。
我们将为您讲解不同的缺点处理方法:
大略的 "die()" 语句自定义缺点和缺点触发器缺点报告基本的缺点处理:利用 die() 函数<?php$file=fopen("welcome.txt","r");?>
如果文件不存在,您会得到类似这样的缺点:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:No such file or directory in /www/runoob/test/test.php on line 2
为了避免用户得到类似上面的缺点,我们在访问文件之前检测该文件是否存在:
<?phpif(!file_exists("welcome.txt")){die("文件不存在");}else{$file=fopen("welcome.txt","r");}?>
现在,如果文件不存在,您会得到类似这样的缺点:
文件不存在
创建一个自定义的缺点处理器非常大略。我们很大略地创建了一个专用函数,可以在 PHP 中发生缺点时调用该函数。
该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接管最多五个参数(可选的:file, line-number 和 error context):
语法:
error_function(error_level,error_message,error_file,error_line,error_context)
error_level必需。为用户定义的缺点规定缺点报告级别。必须是一个数字。拜会下面的表格:缺点报告级别。error_message必需。为用户定义的缺点规定缺点。error_file可选。规定缺点发生的文件名。error_line可选。规定缺点发生的行号。error_context可选。规定一个数组,包含了当缺点发生时在用的每个变量以及它们的值。
现在,让我们创建一个处理缺点的函数:
function customError($errno, $errstr){ echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die();}
PHP 的默认缺点处理程序是内建的缺点处理程序。我们打算把上面的函数改造为脚本运行期间的默认缺点处理程序。
可以修正缺点处理程序,使其仅运用到某些缺点,这样脚本就能以不同的办法来处理不同的缺点。然而,在本例中,我们打算针对所有缺点来利用我们自定义的缺点处理程序:
set_error_handler("customError");
由于我们希望我们的自定义函数能处理所有缺点,set_error_handler() 仅须要一个参数,可以添加第二个参数来规定缺点级别。
实例通过考试测验输出不存在的变量,来测试这个缺点处理程序:
<?php// 缺点处理函数function customError($errno, $errstr){echo "<b>Error:</b> [$errno] $errstr";}// 设置缺点处理函数set_error_handler("customError");// 触发缺点echo($test);?>
以上代码的输出如下所示:
Error: [8] Undefined variable: test
在脚本中用户输入数据的位置,当用户的输入无效时触发缺点是很有用的。在 PHP 中,这个任务由 trigger_error() 函数完成。
实例在本例中,如果 "test" 变量大于 "1",就会发生缺点:
<?php$test=2;if ($test>1){trigger_error("变量值必须小于即是 1");}?>
以上代码的输出如下所示:
Notice: 变量值必须小于即是 1in /www/test/runoob.php on line 5
您可以在脚本中任何位置触发缺点,通过添加的第二个参数,您能够规定所触发的缺点类型。
可能的缺点类型:
E_USER_ERROR - 致命的用户天生的 run-time 缺点。缺点无法规复。脚本实行被中断。E_USER_WARNING - 非致命的用户天生的 run-time 警告。脚本实行不被中断。E_USER_NOTICE - 默认。用户天生的 run-time 关照。在脚本创造可能有缺点时发生,但也可能在脚本正常运行时发生。实例在本例中,如果 "test" 变量大于 "1",则发生 E_USER_WARNING 缺点。如果发生了 E_USER_WARNING,我们将利用我们自定义的缺点处理程序并结束脚本:
<?php// 缺点处理函数function customError($errno, $errstr){echo "<b>Error:</b> [$errno] $errstr<br>";echo "脚本结束";die();}// 设置缺点处理函数set_error_handler("customError",E_USER_WARNING);// 触发缺点$test=2;if ($test>1){trigger_error("变量值必须小于即是 1",E_USER_WARNING);}?>
以上代码的输出如下所示:
Error: [512] 变量值必须小于即是 1脚本结束
现在,我们已经学习了如何创建自己的 error,以及如何触发它们,接下来我们研究一下缺点记录。
缺点记录在默认的情形下,根据在 php.ini 中的 error_log 配置,PHP 向做事器的记录系统或文件发送缺点记录。通过利用 error_log() 函数,您可以向指定的文件或远程目的地发送缺点记录。
通过电子邮件向您自己发送缺点,是一种得到指定缺点的关照的好办法。
通过 E-Mail 发送缺点不才面的例子中,如果特定的缺点发生,我们将发送带有缺点的电子邮件,并结束脚本:
<?php// 缺点处理函数function customError($errno, $errstr){echo "<b>Error:</b> [$errno] $errstr<br>";echo "已关照网站管理员";error_log("Error: [$errno] $errstr",1,"someone@example.com","From: webmaster@example.com");}// 设置缺点处理函数set_error_handler("customError",E_USER_WARNING);// 触发缺点$test=2;if ($test>1){trigger_error("变量值必须小于即是 1",E_USER_WARNING);}?>
以上代码的输出如下所示:
Error: [512] 变量值必须小于即是 1已关照网站管理员
吸收自以上代码的邮件如下所示:
Error: [512] 变量值必须小于即是 1
这个方法不适宜所有的缺点。常规缺点应该通过利用默认的 PHP 记录系统在做事器上进行记录。