PHP 오류 처리
PHP에서 기본 오류 처리는 매우 간단합니다. 에러 메시지가 브라우저, 파일 이름, 라인 번호 및 오류 메시지의 설명을 메시지로 전송된다.
PHP 오류 처리
스크립트와 웹 응용 프로그램을 만들 때, 오류 처리는 중요한 부분입니다. 코드 오류 검사 코드가 부족하면 프로그램이 아주 전문가가 아닌뿐만 아니라, 보안 위험에 문을 열고있다.
이 튜토리얼은 가장 중요한 PHP의 에러 검출 방법의 일부를 소개합니다.
우리는 당신의 다른 오류 처리 방법을 설명합니다 :
- 간단한 "다이 ()"문
- 사용자 지정 오류 및 오류 트리거
- 오류보고
기본 오류 처리 : 다이를 사용하여 () 함수
첫 번째 예는 텍스트 파일을 여는 간단한 스크립트를 보여줍니다
<?php $file=fopen("welcome.txt","r"); ?>
파일이 존재하지 않는 경우이 같은 오류가 발생합니다 :
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
파일에 액세스하는 존재하기 전에 위의 유사한 오류 메시지를 받고에서 사용자를 방지하기 위해 파일을 검사 :
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
파일이 존재하지 않는 경우에 지금, 당신은 유사한이 오류 메시지를 얻을 것이다 :
文件不存在
이 오류 후 스크립트 종료 간단한 에러 처리 메커니즘을 사용하기 때문에 기존의 코드에 비해 위의 코드,보다 효율적이다.
그러나 단순히 스크립트가 항상 옳은 방법이 아니다 종료합니다. 우리가 오류를 처리하기위한 대안 PHP 함수를 살펴 보자.
사용자 지정 오류 처리기 만들기
사용자 지정 오류 처리기를 작성하는 것은 매우 간단합니다. 우리는 단순히 오류가 발생했을 때 호출 할 수있는 특수 기능을 만들 수 있습니다.
이 기능은 적어도 두 개의 매개 변수 (에러 레벨과 에러 메시지)를 처리 할 수 있어야하지만, 다섯 개의 매개 변수를 받아 들일 수 있습니다 (옵션 : 파일, 줄 번호, 오류 컨텍스트) :
문법
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 | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
이제, 오류를 처리하는 기능을 만들 수 있습니다 :
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 () 함수를 통해 실행된다.
예
"테스트"변수가 "1"보다 큰 경우,이 예에서, 오류가 발생
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
다음 위 코드의 출력은 :
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
당신은 어디 스크립트에서 오류를 트리거 할 수 있습니다 두 번째 매개 변수를 추가하여, 당신은 오류 레벨 트리거를 지정할 수 있습니다.
오류의 가능한 유형 :
- E_USER_ERROR - 치명적인 사용자가 생성 한 런타임 오류가 발생했습니다. 복구 할 수없는 오류가 발생했습니다. 스크립트 실행이 중단됩니다.
- E_USER_WARNING - 사용자가 생성 한 치명적이지 런타임 경고. 스크립트 실행이 중단되지 않습니다.
- E_USER_NOTICE - 기본. 사용자가 생성 한 런타임 통지. 스크립트가 발견했을 때 오류가 발생할 수 있습니다뿐만 아니라 정상 작동 스크립트에서 발생할 수 있습니다.
예
"테스트"변수는보다 큰 경우,이 예에서, "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_log 구성이 php.ini 파일에서 설정에 따라, PHP는 기록 또는 파일 서버에 오류 기록 시스템을 보냅니다. error_log () 함수를 이용 함으로서, 지정된 파일 또는 원격 대상에 오류 로그를 보낼 수있는 기능.
그것은 이메일로 자신에게 오류 메시지를 전송하는 것은 특정 오류 알림을받을 수있는 좋은 방법입니다.
오류 메시지는 전자 메일로 전송
특정 오류가 발생하는 경우 다음 예제에서, 우리는 오류 메시지와 함께 전자 메일을 보내고 스크립트를 종료합니다 :
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } // 设置错误处理函数 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 로깅 시스템을 사용하여 수 있어야합니다.