PHP 오류 처리
PHP에서는 기본 오류 처리가 간단합니다. 파일 이름, 줄 번호 및 오류를 설명하는 메시지와 함께 오류 메시지가 브라우저로 전송됩니다.
PHP 오류 처리
스크립트 및 웹 애플리케이션 생성 시 오류 처리하는 것이 중요한 부분입니다. 코드에 오류 감지 코딩이 없으면 프로그램이 비전문적으로 보이고 보안 위험이 발생할 수 있습니다.
이 튜토리얼에서는 PHP에서 가장 중요한 오류 감지 방법 중 일부를 다룹니다.
다양한 오류 처리 방법을 설명해 드리겠습니다.
· 간단한 "die()" 문
· 사용자 정의 오류 및 오류 트리거
· 오류 보고
기본 오류 처리: die() 함수 사용
첫 번째 예는 텍스트 파일을 여는 간단한 스크립트를 보여줍니다.
<?php $open=fopen('error.txt','r'); echo $open; ?>
파일이 없으면 다음과 같은 오류가 발생합니다.
경고: fopen(error.txt) [function.fopen]: 스트림을 열지 못했습니다:
2번째 줄의 /www/php/test/test.php에 해당 파일이나 디렉터리가 없습니다
사용자가 위와 유사한 오류 메시지를 받는 것을 방지하기 위해 확인하기 전에 파일을 방문합니다. 파일이 존재하는 경우:
<?php header("Content-type:text/html;charset=utf-8"); if(!file_exists('error.txt')){ die("文件不存在"); }else{ $file=fopen('error.txt','r'); } ?>
이제 파일이 존재하지 않으면 다음과 같은 오류 메시지가 표시됩니다:
파일이 존재하지 않습니다
이전 코드에 비해 위 코드는 오류 발생 후 스크립트를 종료하기 위해 간단한 오류 처리 메커니즘을 사용하기 때문에 더 효율적입니다.
그러나 단순히 스크립트를 종료하는 것이 항상 적절한 것은 아닙니다. 오류 처리를 위한 대체 PHP 함수를 살펴보겠습니다.
사용자 정의 오류 핸들러 만들기
사용자 정의 오류 핸들러 만들기 매우 간단합니다. PHP에서 오류가 발생할 때 호출할 수 있는 전용 함수를 간단히 만들었습니다.
함수는 최소 2개의 매개변수(오류 수준 및 오류 메시지)를 처리할 수 있어야 하지만 최대 5개의 매개변수(선택 사항: 파일, 줄 번호 및 오류 컨텍스트)를 허용할 수 있습니다.
error_function (error_level,error_message,error_file,error_line,error_context)
参数 | 描述 |
error_level | 必需。为用户定义的错误规定错误报告级别。必须是一个数字。参见下面的表格:错误报告级别。 |
error_message | 必需。为用户定义的错误规定错误消息。 |
error_file | 可选。规定错误发生的文件名。 |
error_line | 可选。规定错误发生的行号。 |
error_context | 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。 |
오류 보고 수준
이 오류 보고 수준은 사용자 정의 오류 처리기에 의해 처리됩니다. 다양한 유형 오류 수:
| <🎜>상수<🎜>< 🎜> | <🎜> 설명<🎜><🎜> | |||||||||||||||
2 | E_경고 | 치명적이지 않은 실행 -시간 오류. 스크립트 실행을 일시 중지하지 마십시오. | |||||||||||||||
<🎜 > <🎜><🎜> 8<🎜><🎜> | <🎜> <🎜><🎜>E_NOTICE<🎜> | 런타임 알림. 스크립트가 가능한 오류를 발견할 때 발생하지만 스크립트가 정상적으로 실행될 때도 발생할 수 있습니다. | |||||||||||||||
<🎜 > <🎜><🎜> 256<🎜><🎜> | <🎜> <🎜><🎜>E_USER_ERROR<🎜> <🎜> | 치명적인 사용자 오류가 발생했습니다. 이는 프로그래머가 PHP 함수 Trigger_error()를 사용하여 설정한 E_ERROR와 유사합니다. | |||||||||||||||
<🎜 > <🎜><🎜> 512<🎜><🎜> | <🎜> <🎜><🎜>E_USER_WARNING<🎜> | 치명적이지 않은 사용자 생성 경고. 이는 프로그래머가 PHP 함수 Trigger_error()를 사용하여 설정한 E_WARNING과 유사합니다. |
| <🎜> <🎜> <🎜>E_USER_NOTICE<🎜> | 용户生成일반적인 정보입니다. PHP는 Trigger_error()를 사용하여 E_NOTICE를 사용합니다. | |||||||||
<🎜> <🎜><🎜> 4096<🎜><🎜> | <🎜> <🎜><🎜> <🎜><🎜>E_RECOVERABLE_ERROR<🎜> | 모든 것이 옳습니다. "상단" 스타일="테두리 너비: 1px; 테두리 스타일: 단색; word-break: break-all;"><🎜> <🎜><🎜> 8191<🎜><🎜> | <🎜> <🎜><🎜>E_ALL<🎜> | 所有错误와警告。(PHP 5.4 中,E_STRICT 成为 E_ALL 的一分) |
이제 오류를 처리하는 함수를 만들어 보겠습니다.
<?php header("Content-type:text/html;charset=utf-8"); function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } ?>
위 코드는 Simple 오류 처리 기능. 트리거되면 오류 수준과 오류 메시지가 표시됩니다. 그런 다음 오류 수준과 메시지를 인쇄하고 스크립트를 종료합니다.
이제 오류 처리 기능을 만들었으므로 언제 실행할지 결정해야 합니다.
오류 핸들러 설정
PHP의 기본 오류 핸들러가 내장되어 있습니다. 오류 처리기. 스크립트가 실행될 때 위 함수를 기본 오류 처리기로 변환하겠습니다.
오류 핸들러를 수정하여 특정 오류에만 적용하면 스크립트가 다양한 오류를 다양한 방식으로 처리할 수 있습니다. 그러나 이 경우 모든 오류에 대해 사용자 정의 오류 핸들러를 사용할 것입니다:
set_error_handler("customError");
이후 우리는 사용자 정의 함수가 모든 오류를 처리하기를 원합니다. set_error_handler()에는 하나의 매개변수만 필요하며 오류 수준을 지정하기 위해 두 번째 매개변수를 추가할 수 있습니다.
예
위에서 배운 지식을 결합하고 존재하지 않는 변수를 출력하여 이 오류 처리기를 테스트합니다.
<?php header("Content-type:text/html;charset=utf-8"); // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); //关闭了所有的错误显示 error_reporting(0); //显示所有错误 //error_reporting(E_ALL); //显示所有错误,但不显示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
프로그램 실행 결과:
오류: [8] 정의되지 않은 변수: test
실행 결과에 따르면 오류 수준은 8입니다. , 오류 메시지는 다음과 같습니다. 존재하지 않는 변수
는 사용자가 스크립트에 데이터를 입력하는 경우
오류를 유발합니다. 유용합니다. 사용자의 입력이 유효하지 않을 때 오류를 유발합니다. PHP에서 이 작업은 Trigger_error() 함수로 수행됩니다.
예
이 예에서는 "test" 변수가 "1"보다 크면 오류가 발생합니다.
<?php header("Content-type:text/html;charset=utf-8"); $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
프로그램 실행 결과:
주의: 6행의 D:WWWAdvanced tutorialerrorerror_1.php에서 변수 값은 1보다 작거나 같아야 합니다
스크립트의 어느 위치에서나 오류를 트리거할 수 있으며, 두 번째 매개변수를 추가하여 트리거되는 오류 수준을 지정할 수 있습니다.
가능한 오류 유형:
· E_USER_ERROR - 사용자가 생성한 치명적인 런타임 오류입니다. 오류를 복구할 수 없습니다. 스크립트 실행이 중단되었습니다.
· E_USER_WARNING - 치명적이지 않은 사용자 생성 런타임 경고입니다. 스크립트 실행이 중단되지 않습니다.
· E_USER_NOTICE - 기본값. 사용자가 생성한 런타임 알림. 스크립트가 가능한 오류를 발견할 때 발생하지만 스크립트가 정상적으로 실행될 때도 발생할 수 있습니다.
예제
이 예에서는 "test" 변수가 "1"보다 크면 E_USER_WARNING 오류가 발생합니다. E_USER_WARNING이 발생하면 사용자 정의 오류 처리기를 사용하고 스크립트를 종료합니다.
<?php header("Content-type:text/html;charset=utf-8"); // 错误处理函数 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); } ?>
프로그램 실행 결과:
오류: [512] 변수 값은 다음보다 작아야 합니다. 또는 1
스크립트가 종료됩니다
실행 결과는 오류 수준 값이 512임을 알려줍니다. 오류 메시지는 Trigger_error 함수로 설정한 프롬프트 메시지가 됩니다
오류 로깅
일부 회사에서는 특별한 로그 수집 시스템이 있습니다. 로그 수집 시스템은 뒤에서 오류, 경고 및 프롬프트를 수집하는 데 자동으로 도움을 줍니다.
전용 로그 수집 시스템이 없고 서버에서 실행 중인 로그를 파일을 통해 수집하는 회사도 있습니다.
이중 PHP 오류, 경고를 받아야 합니다.
그러면 질문이 생깁니다. 오류 보고 수준이 사용자가 보기 훨씬 전에 설정되어 있다면 오류를 로그 시스템에 어떻게 수집할 것인가?
php.ini에서 사용해야 하는 관련 구성 항목은 다음과 같습니다. 이 두 가지 구성 항목은 다음과 같습니다.
| <🎜><🎜> 설명<🎜><🎜> td > | ||||||||
0 | 기본 error_log 지정된 위치로 보내기 | / tr>||||||||
1 | 지정된 이메일 위치로 보내기 | 3 | 지정된 파일 위치로 보내기 | < / 테이블>