최신 웹 개발 튜토리얼
 

PHP오류 처리


PHP의 기본 오류 처리는 매우 간단합니다. 파일명, 행 번호와 오류를 나타내는 메시지와 함께 에러 메시지가 브라우저에 전송된다.


PHP 오류 처리

스크립트와 웹 애플리케이션을 만들 때, 오류 처리는 중요한 부분입니다. 코드 오류 검사 코드가 부족하면 프로그램이 아주 전문가가 아닌 수 있으며 보안 위험에 노출 될 수 있습니다.

이 튜토리얼은 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:\webfolder\test.php on line 2

위와 같은 오류 메시지를 받고에서 사용자를 방지하기 위해, 우리는 우리가 그것을 파일에 접근하기 전에 존재 여부를 테스트 :

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

이제 파일은이 같은 오류가 존재하지 않는 경우 :

File not found

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

그러나 단순히 스크립트를 멈추는 것이 항상 옳은 방법이 아니다. 의는 오류를 처리하는 PHP의 다른 기능을 살펴 보자.


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

사용자 지정 오류 처리기를 만드는 것은 매우 간단합니다. 우리는 단순히 오류가 발생했을 때 호출 할 수있는 특수 기능을 만들 수 있습니다.

이 기능은 두 개의 매개 변수 (에러 레벨과 에러 메시지)의 최소를 처리 할 수 있어야하지만 다섯개까지 매개 변수를 지정할 수 있습니다 (optionally: file, line-number, and the error context) :

통사론

error_function(error_level,error_message,
error_file,error_line,error_context)
매개 변수 기술
error_level 필요합니다. 사용자 정의 오류에 대한 오류 보고서 수준을 지정합니다. 값 번호이어야합니다. 가능한 오류 보고서 수준은 아래 표를 참조하십시오
error_message 필요합니다. 사용자 정의 오류에 대한 오류 메시지를 지정합니다
error_file 선택 과목. 오류가 발생한 파일 이름을 지정합니다
error_line 선택 과목. 오류가 발생한 줄 번호를 지정합니다
error_context 선택 과목. 오류가 발생했을 때 사용에서, 모든 변수를 포함하는 배열 및 그 값을 지정

보고서 수준을 오류

이러한 오류 보고서 수준은 사용자 정의 오류 처리기가 사용할 수있는 오류의 다른 유형이 있습니다 :

일정한 기술
E_WARNING 치명적이지 않은 런타임 오류. 스크립트의 실행은 중단되지 않는다
8 E_NOTICE 런타임 통지. 스크립트가 오류 일 수있는 것을 발견했지만, 정상적으로 스크립트를 실행할 때도 발생할 수
256 E_USER_ERROR 사용자가 생성 한 치명적 오류가 발생했습니다. 이것은 PHP 함수를 사용하여 프로그래머에 의해 설정된 E_ERROR 같다 trigger_error()
512 E_USER_WARNING 치명적이지 않은 사용자가 생성 한 경고. 이것은 PHP 함수를 사용하여 프로그래머에 의해 설정된 E_WARNING 같다 trigger_error()
1,024 E_USER_NOTICE 통지를 사용자가 생성. 이것은 PHP 함수를 사용하여 프로그래머에 의해 설정된 E_NOTICE 같다 trigger_error()
4096 E_RECOVERABLE_ERROR 잡아낼 오류가 발생합니다. 이는 E_ERROR처럼하지만, 사용자 정의 핸들을 통해 잡아낼 수있다 (see also set_error_handler() )
8191 E_ALL 모든 오류 및 경고 (E_STRICT became a part of E_ALL in PHP 5.4)

이제 오류를 처리 할 수있는 함수를 만들 수 있습니다 :

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

위의 코드는 간단한 에러 처리 함수. 이 트리거되면 오류 수준 및 오류 메시지를 가져옵니다. 그러므로 에러 레벨과 메시지를 출력하고 스크립트를 종료한다.

이제 우리는 에러 처리 기능을 만들었으므로 우리는 언제 실행되어야할지 결정해야합니다.


설정 오류 처리기

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:\webfolder\test.php on line 6

오류가 스크립트에서 원하는, 그리고 두 번째 매개 변수를 추가하여, 당신은 오류 레벨 트리거 지정할 수 있습니다 어디서든 트리거 될 수 있습니다.

가능한 오류 유형 :

  • E_USER_ERROR - 사용자가 생성 한 치명적 런타임 오류가 발생했습니다. 에서 복구 할 수없는 오류가 발생했습니다. 스크립트의 실행은 정지
  • E_USER_WARNING - 사용자가 생성 한 치명적이지 런타임 경고. 스크립트의 실행은 중단되지 않는다
  • E_USER_NOTICE - 기본. 사용자가 생성 한 런타임 통지. 스크립트가 오류 일 수있는 것을 발견했지만, 정상적으로 스크립트를 실행할 때도 발생할 수

이 예에서 E_USER_WARNING이 발생하는 경우 "test" 변수는보다 큰 "1" . 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

이제 우리는 우리 자신의 오류를 만들기 위해 배운 것을하고이를 트리거하는 방법, 오류 기록을 살펴 수 있습니다.


오류 로깅

기본적으로, PHP는 서버의 로깅 시스템이나 php.ini 파일의 error_log 설정 설정 방식에 따라 파일에 오류 로그를 보냅니다. 사용하여 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,
  "[email protected]","From: [email protected]");
}

//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 로깅 시스템을 사용하여 서버에 로그온해야합니다.