您现在的地位: 365体育备用网址 > bet365体育在线, > PHP 教程 > PHP 失误处置

PHP 失误处置_365体育备用网址官网资讯

您现在的地位: 365体育备用网址 > bet365体育在线, > PHP 教程 > PHP 失误处置

PHP 失误处置

此节有 180 人学习过     参与评论

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 C:webfoldertest.php on line 2

为了幸免用户获得类似上面的失误消息,我们在访问文件之前检测该文件是否存在:

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
else
 {
 $file=fopen("welcome.txt","r");
 }
?>

现在,假如文件不存在,您会得到类似这样的失误消息:

File not found

比起之前的代码,上面的代码更有效,这是由于它采纳了一个简单的失误处置机制在失误之后终止了脚本。

不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处置失误的备选的 PHP 函数。

创建自定义失误处置器

创建一个自定义的失误处置器非常简单。我们很简单地创建了一个专用函数,能够在 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 可选。规定一个数组,包含了当失误发生时在用的每个变量以及它们的值。

失误报告级别

这些失误报告级别是失误处置程序旨在处置的失误的不同的类型:

常量 描述
2 E_WARNING 非致命的 run-time 失误。不暂停脚本执行。
8 E_NOTICE

Run-time 通知。

脚本发现可能有失误发生,但也可能在脚本正常运行时发生。

256 E_USER_ERROR 致命的用户生成的失误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命失误。类似 E_ERROR,但可被用户定义的处置程序捕获。(参见 set_error_handler())
8191 E_ALL

一切失误和警告,除级别 E_STRICT 以外。

(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)

现在,让我们创建一个处置失误的函数:

function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }

上面的代码是一个简单的失误处置函数。当它被触发时,它会取得失误级别和失误消息。然后它会输出失误级别和消息,并终止脚本。

现在,我们已经创建了一个失误处置函数,我们需要确定在何时触发该函数。

Set Error Handler

PHP 的默认失误处置程序是内建的失误处置程序。我们打算把上面的函数改造为脚本运行期间的默认失误处置程序。

能够修改失误处置程序,使其仅应用到某些失误,这样脚本就能够不同的方式来处置不同的失误。不过,在本例中,我们打算针对一切失误来使用我们的自定义失误处置程序:

set_error_handler("customError");

由于我们希望我们的自定义函数来处置一切失误,set_error_handler() 仅需要一个参数,能够添加第二个参数来规定失误级别。

实例

通过尝试输出不存在的变量,来测验这个失误处置程序:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr";
 }

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

以上代码的输出应该类似这样:

Error: [8] Undefined variable: test

触发失误

在脚本中用户输入数据的地位,当用户的输入无效时触发失误的很有用的。在 PHP 中,这个任务由 trigger_error() 完成。

例子

在本例中,如果 "test" 变量大于 "1",就会发生失误:

<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>

以上代码的输出应该类似这样:

Notice: Value must be 1 or below
in C:webfoldertest.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,我们将使用我们的自定义失误处置程序并结束脚本:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>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 发送失误消息

在下面的例子中,如果特定的失误发生,我们将发送带有失误消息的电子邮件,并结束脚本:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Webmaster has been notified";
 error_log("Error: [$errno] $errstr",1,
 "someone@example.com","From: webmaster@example.com");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>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 记载系统在服务器上进行记载。

如对本文有疑问,请提交到交流公海赌船真人娱乐城,广大热心网友会为你解答!! 点击进入公海赌船真人娱乐城


公布评论 (180人察看0条评论)
请自觉遵守互联网相关的政策法规,严禁公布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换A6娱乐场
最新评论
------分隔线----------------------------
PHP 教程目录
条评论
Sitemap