PHP 오류 처리 함수의 사용법 및 예

墨辰丷
풀어 주다: 2023-03-29 17:10:01
원래의
1670명이 탐색했습니다.

PHP에서는 기본 오류 처리가 간단합니다. 파일 이름, 줄 번호 및 오류를 설명하는 메시지와 함께 오류 메시지가 브라우저로 전송됩니다.

PHP에서는 기본 오류 처리가 간단합니다. 파일 이름, 줄 번호 및 오류를 설명하는 메시지와 함께 오류 메시지가 브라우저로 전송됩니다.

PHP 오류 처리

오류 처리는 스크립트와 웹 애플리케이션을 만들 때 중요한 부분입니다. 코드에 오류 감지 코딩이 없으면 프로그램이 비전문적으로 보이고 보안 위험이 발생할 수 있습니다.

이 튜토리얼에서는 PHP에서 가장 중요한 오류 감지 방법 중 일부를 다룹니다.

다양한 오류 처리 방법을 설명하겠습니다:

간단한 "die()" 문

사용자 정의 오류 및 오류 트리거

오류 보고

기본 오류 처리: die() 함수 사용

첫 번째 예는 텍스트 파일을 여는 간단한 스크립트를 보여줍니다.

<?php
$file=fopen("welcome.txt","r");
?>
로그인 후 복사

파일이 없으면 다음과 같은 오류가 발생합니다.

경고: fopen(welcome.txt) [function .fopen]: 스트림을 열지 못했습니다.
2행의 C:webfoldertest.php에 해당 파일이나 디렉터리가 없습니다

사용자가 위와 같은 오류 메시지를 받지 않도록 하기 위해 파일에 액세스하기 전에 파일이 존재하는지 확인합니다.

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

이제 파일이 없으면 다음과 같은 오류 메시지가 표시됩니다.

파일을 찾을 수 없습니다.

위 코드는 이전 코드보다 더 효율적입니다. 이는 간단한 오류 처리 메커니즘을 사용하기 때문입니다. 오류 후 스크립트.

그러나 단순히 스크립트를 종료하는 것이 항상 적절한 접근 방식은 아닙니다. 오류 처리를 위한 대체 PHP 함수를 살펴보겠습니다.

사용자 정의 오류 처리기 만들기

사용자 정의 오류 처리기를 만드는 것은 매우 쉽습니다. PHP에서 오류가 발생할 때 호출할 수 있는 전용 함수를 만들었습니다.

함수는 최소 2개의 매개변수(오류 수준 및 오류 메시지)를 처리할 수 있어야 하지만 최대 5개의 매개변수(선택 사항: 파일, 줄 번호 및 오류 컨텍스트)를 허용할 수 있습니다.

Syntax

error_function( error_level,error_message,error_file,error_line,error_context)


매개변수 Description
error_level필수입니다. 사용자 정의 오류에 대한 오류 보고 수준을 지정합니다. 숫자여야 합니다. 아래 표를 참조하세요. 오류 보고 수준.
error_message필수입니다. 사용자 정의 오류에 대한 오류 메시지를 지정합니다.
error_file선택사항. 오류가 발생한 파일 이름을 지정합니다.
error_line선택사항. 오류가 발생한 줄 번호를 지정합니다.
error_context선택사항. 오류가 발생했을 때 사용된 각 변수와 해당 값을 포함하는 배열을 지정합니다.

错误报告级别

这些错误报告级别是用户自定义的错误处理程序处理的不同类型的错误:

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

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

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

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


ValueConstantDescription
2 E_WARNING 치명적이지 않은 런타임 오류입니다. 스크립트 실행을 일시 중지하지 마십시오.
8E_NOTICE런타임 알림. 스크립트가 가능한 오류를 발견할 때 발생하지만 스크립트가 정상적으로 실행될 때도 발생할 수 있습니다.
256E_USER_ERROR치명적인 사용자 생성 오류입니다. 이는 프로그래머가 PHP 함수 Trigger_error()를 사용하여 설정한 E_ERROR와 유사합니다.
512E_USER_WARNING 치명적이지 않은 사용자 생성 경고. 이는 프로그래머가 PHP 함수 Trigger_error()를 사용하여 설정한 E_WARNING과 유사합니다.
1024E_USER_NOTICE사용자 생성 알림. 이는 프로그래머가 PHP 함수 Trigger_error()를 사용하여 설정한 E_NOTICE와 유사합니다.
4096E_RECOVERABLE_ERROR캐치 가능한 치명적인 오류입니다. E_ERROR와 비슷하지만 사용자 정의 핸들러로 포착할 수 있습니다. (set_error_handler() 참조)
8191E_ALL모든 오류 및 경고. (PHP 5.4에서는 E_STRICT가 E_ALL의 일부가 됩니다)


设置错误处理程序

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

可以修改错误处理程序,使其仅应用到某些错误,这样脚本就能以不同的方式来处理不同的错误。然而,在本例中,我们打算针对所有错误来使用我们自定义的错误处理程序:

set_error_handler("customError");
로그인 후 복사

由于我们希望我们的自定义函数能处理所有错误,set_error_handler() 仅需要一个参数,可以添加第二个参数来规定错误级别。

实例

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

Error: [$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,我们将使用我们自定义的错误处理程序并结束脚本:

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 记录系统在服务器上进行记录。

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐: 

PHP操作MongoDB的方法及简单分析

PHP封装的MSSql操作类以及完整实例分析

PHP中子类重载父类的方法(parent::方法名)

위 내용은 PHP 오류 처리 함수의 사용법 및 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!