오류는 프로그래밍시 개발자가 직면 한 가장 일반적인 이벤트입니다. 오류는 구문, 런타임 또는 논리적으로 분류 할 수 있습니다. 문이 끝날 때 세미콜론을 누락하는 것은 구문 오류의 예입니다. 서버가 다운되었을 때 데이터베이스에 연결하려고하는 것은 런타임 오류의 예입니다. 변수에 잘못된 데이터를 제공하는 것은 로직 오류의 예입니다. 코드의 오류 수를 줄이고 효과를 완화하려면 웹 응용 프로그램에서 적절한 오류 처리가 필수적입니다.
이 기사는 PHP 오류 처리의 충돌 과정입니다. PHP의 내장 오류보고 레벨과 사용자 지정 오류 처리기 및 예외 처리로 오류를 처리하는 방법에 대해 배웁니다.
키 테이크 아웃
PHP 오류 처리는 웹 애플리케이션의 무결성과 기능을 유지하는 데 중요합니다. 스크립트 실행 중에 발생할 수있는 문제를 식별하고 수정하는 데 도움이되어 오류가 발생할 때 보는 것을 제어하여 사용자 경험을 향상시킵니다.
PHP는 로깅 및 표시를 포함하여 오류 처리를위한 몇 가지 내장 기능을 제공합니다. 또한 오류 처리기를 등록하고 예외를 사용하여 오류 처리 전략을 사용자 정의 할 수있는 유연성을 제공합니다.
php에서의 사용자 정의 오류 처리는 set_error_handler () 및 set_exception_handler () 함수를 사용하여 달성 할 수 있습니다. 이를 통해 개발자는 사용자 정의 오류 처리 규칙 및 예외를 정의 할 수 있으며 오류 로그 또는 오류 알림을 보내는 데 유용 할 수 있습니다.
PHP의 예외는 스크립트 실행 중에 발생하는 이벤트이며, 지침의 정상적인 흐름을 방해합니다. 시도, 잡기 및 마지막으로 블록을 사용하여 처리 할 수 있습니다. 예외가 발생하면 캐치 블록이 발견되지 않으면 PHP는 치명적인 오류를 표시하고 스크립트 실행을 중단합니다.
PHP 오류보고 레벨 >
모든 오류 및 경고를 기록해야합니다. 오류의 심각성에 따라 다른 시스템/팀으로 알림을 보내야합니다. PHP는 심각도를 더 잘 측정 할 수 있도록 오류의 특성을 설명하기 위해 몇 가지 내장 오류 수준을 제공합니다. 각 레벨은 정수 값으로 표시되며 프로그래머가 사용할 수있는 상수 이름이 지정됩니다. 아래 표는 공식 PHP 문서에서 가져 왔으며 다른 수준 중 일부를 보여줍니다.
-
PHP 구성에서이를 포함 시키거나 빼기 위해 비트 운영자와 함께 레벨을 마스킹 할 수 있습니다. 예를 들어, e_all | e_strict는 e_strict (5.4 이전의 PHP 버전에서 필요한)를 추가하여 모든 오류와 경고를 가능하게합니다.
PHP는 로깅 및 표시 오류와 관련된 몇 가지 구성 지침을 제공합니다. 그들의 값은 일반적으로 시스템이 개발에 있는지 또는 생산 환경에 따라 다릅니다. 이 표는 오류 관련 지시문 중 일부를 보여줍니다.
- 구성 지시문은 php.ini, 웹 서버 구성 파일 (httpd.conf 또는 .htaccess 파일) 또는 ini_set () 함수를 사용하여 스크립트에서 런타임에 설정할 수 있습니다. 지침에 대한 자세한 내용과이를 설정하는 방법/위치에 대한 자세한 내용은 문서를 읽으십시오.
사용자 지정 오류 처리기 생성
또한 최종 사용자에게 원시 오류를 표시하지 않는 것이 좋습니다. 표시되는 오류는 친절하고 사용자 정의 오류 메시지로 추상화되어야합니다. PHP는 로깅 및 표시 오류를 표시하는 내장 기능을 제공 할뿐만 아니라이를 높이기위한 기능을 제공합니다. trigger_error ()를 사용하여 특정 레벨의 오류를 실용적으로 트리거 할 수 있습니다. 예를 들어,이 코드는 $ test 값이 1보다 큰 경우 e_user_notice 경고를 트리거합니다.
Trigger_Error ()의 트리거 오류는 오류 처리 인프라가있을 때 유용하여 사용자 지정 오류 및 PHP가 제기 한 오류 및 경고의 처리를 통합 할 수 있습니다.
심각도를 기반으로 이메일 전송 또는 데이터베이스에 로깅 오류와 같은 사용자 정의 오류 처리 전략을 구현하려면 set_error_handler ()를 사용하여 사용자 정의 오류 핸들러를 정의해야합니다. 이 함수는 오류가 제기 될 때 호출 될 콜백 함수 또는 정적 메소드, 그리고 선택적으로 오류 수준의 함수/메소드 처리를 허용합니다. 콜백의 서명은 다음과 같습니다.
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
로그인 후 복사
로그인 후 복사
로그인 후 복사
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
로그인 후 복사
로그인 후 복사
로그인 후 복사
사용자 정의 오류 핸들러 기능을 살펴 보겠습니다. 아래의 예는 데이터베이스가 발생할 때마다 데이터베이스 테이블 데이터베이스에 오류를 기록합니다.
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
로그인 후 복사
로그인 후 복사
로그인 후 복사
위의 스 니펫은 다음을 수행하는 오류 핸들러를 등록합니다. 치명적이지 않은 오류가 발생하면 레코드가 오류를 표시하고 파일에 로그인하는 대신 데이터베이스에 삽입됩니다. 치명적인 오류가 발생하면 데이터베이스에 로그인하여 스크립트를 종료합니다.
그러나 알아야 할 맞춤형 오류 처리기에는 몇 가지 제한 사항이 있습니다. 오류 핸들러는 PHP의 표준 오류 처리 동작을 우회하므로 핸들러 자체 내에서 발생할 수있는 오류를 처리 할 수 없습니다. 예를 들어 데이터베이스 서버가 다운 된 경우 위의 기능이 로그를 기록하지 못합니다. 또한 오류 핸들러는 e_core_error 및 e_compile_error와 같은 특정 내부 오류를 포착 할 수 없습니다. 또는 동일한 파일의 E_Strict 오류와 같은 핸들러가 등록하기 전에 오류가 발생하기 때문에 핸들러가 정의됩니다.
예외를 사용하여 오류를 처리합니다
그러나 당신이 가지고있는 오류 처리 프레임 워크가 좋지만 항상 런타임에 문제가 있습니다. 물론 사용자의 브라우저에 이러한 오류가 나타나기를 원하지 않습니다. 예외 처리가 그림에 들어가는 곳입니다. 예외를 통해 오류와 예외적 인 상황을 우아하게 처리 할 수 있습니다.
예외는 PHP에 클래스 excpetion (또는 그 서브 클래스)으로 표시됩니다. 그들은 던지기를 사용하여 올릴 수 있으며 시도/캐치 블록을 사용하여 잡을 수 있습니다. 예외를 확장하여 특정 오류를 포획하기위한 사용자 정의 예외 유형을 만들 수 있습니다.
예외를 트리거 할 수있는 코드는 시도 블록 내에 배치되며 예외를 처리하는 코드는 캐치 블록 내에 배치됩니다. 다음 스 니펫을 고려하십시오.
가상의 getDatafromservice () 메소드에 의해 예외가 발생하면 캐치 블록에 잡히고 메시지가 표시됩니다. getDataFromserVice ()가 성공적으로 실행되면 흐름이 캐치 블록을 통과하고 나머지 스크립트를 계속 진행합니다. 던져 지거나 잡히지 않은 예외는 "uncaught 예외"메시지로 E_FATAL 오류가 발생합니다.
예외 클래스는 아래 표에 표시된 것처럼 문제의 원인에 대한 정보에 액세스 할 수있는 6 가지 방법을 제공합니다.
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
로그인 후 복사
로그인 후 복사
로그인 후 복사
사용자 정의 예외 핸들러 만들기
PHP를 사용하면 예외 인 것처럼 객체를 던질 수는 있지만 경험상 예외는 PHP의 내장 예외 클래스를 확장해야합니다. 객체의 유형에 따라 예외를 다르게 처리 할 수 있습니다. 사용자 정의 예외 처리는 파일의 로깅 오류 메시지와 같은 적절한 작업을 수행 할 수 있으며, 호출 스택 등을 검사하여 오류가 발생한 줄에 대한 정확한 세부 정보를 제공 할 수 있습니다.이 예를 살펴 봅니다.
위의 코드는 두 가지 새로운 사용자 정의 예외 유형 인 Namexception을 정의합니다.
그리고 다른 오류를 나타내는 데 사용할 수있는 emailException. 그런 다음 시도 블록 내에서 코드는 변수 $ 이름 및 $ 이메일에 대한 값이 제공되었는지 확인합니다. 어느 쪽이든 비어 있으면 적절한 예외는 던지기를 사용하여 던져집니다. 오류를 처리하는 해당 캐치 블록이 실행됩니다.
예외를 다시 던지는
시도/캐치 블록은 중첩 될 수 있습니다. 때로는 예외를 포착하고 일부 속성을보고 다시 던지기 위해 부모 캐치 블록이 처리 할 수 있도록 다시 던지기를 원할 수도 있습니다. 이것은 종종 오류 조건을 확인하고 치명적인지 아닌지를 결정하는 데 유용 할 수 있습니다. 이 예제 코드는 예외를 다시 던지는 것을 보여줍니다.
<span><span><?php
</span></span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE);
</span></span><span><span>}</span></span>
로그인 후 복사
로그인 후 복사
로그인 후 복사
uncught Exception handler
Set_error_handler ()가 런타임 오류를 처리 할 함수를 지정하는 방법과 유사하게 Set_Exception_handler () 함수를 사용하면 어획 블록에 잡히지 않고 통화 스택을 완전히 처리 할 수 있습니다. 예를 들어, 예외로 인해 스택을 끝까지 만들면 로그 파일에 로그인하는 것이 좋습니다. 아래 예제와 같이 콜백 함수를 생성하고 set_exception_handler ()에 등록 할 수 있습니다.
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
로그인 후 복사
로그인 후 복사
로그인 후 복사
요약
PHP는 로깅 및 표시를 포함하여 오류 조건을 처리하기위한 다양한 내장 기능을 제공합니다. 또한 오류 처리기를 등록하고 예외를 사용하여 오류 처리 전략을 사용자 정의 할 수있는 유연성을 제공합니다. 오류는 삶의 사실이지만,이 기사에서 제시 한 정보가 더 우아하게 처리하는 데 도움이되기를 바랍니다.
Ilya Andriyanov / Shutterstock을 통한 이미지
php 의 오류 처리에 대한 자주 묻는 질문 (FAQ)
PHP에서 오류 처리의 중요성은 무엇입니까? <span><span><?php
</span></span><span><span>function errorHandler($errno, $errstr, $errfile, $errline) {
</span></span><span> <span>static $db;
</span></span><span> <span>if (empty($db)) {
</span></span><span> <span>$db = new PDO(DSN, DBUSER, DBPASS);
</span></span><span> <span>}
</span></span><span>
</span><span> <span>$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())";
</span></span><span> <span>$stmt = $db->prepare($query);
</span></span><span>
</span><span> <span>switch ($errno) {
</span></span><span> <span>case E_NOTICE:
</span></span><span> <span>case E_USER_NOTICE:
</span></span><span> <span>case E_DEPRECATED:
</span></span><span> <span>case E_USER_DEPRECATED:
</span></span><span> <span>case E_STRICT:
</span></span><span> <span>$stmt->execute(array("NOTICE", $errstr, $errfile, $errline));
</span></span><span> <span>break;
</span></span><span>
</span><span> <span>case E_WARNING:
</span></span><span> <span>case E_USER_WARNING:
</span></span><span> <span>$stmt->execute(array("WARNING", $errstr, $errfile, $errline));
</span></span><span> <span>break;
</span></span><span>
</span><span> <span>case E_ERROR:
</span></span><span> <span>case E_USER_ERROR:
</span></span><span> <span>$stmt->execute(array("FATAL", $errstr, $errfile, $errline));
</span></span><span> <span>exit("FATAL error <span><span>$errstr</span> at <span>$errfile</span>:<span>$errline</span>"</span>);
</span></span><span>
</span><span> <span>default:
</span></span><span> <span>exit("Unknown error at <span><span>$errfile</span>:<span>$errline</span>"</span>);
</span></span><span> <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>set_error_handler("errorHandler");
</span></span><span>
</span><span><span>$test = 5;
</span></span><span><span>if ($test > 1) {
</span></span><span> <span>trigger_error("Value of <span><span>$test</span> must be 1 or less"</span>, E_USER_NOTICE);
</span></span><span><span>}</span></span>
로그인 후 복사
PHP의 오류 처리는 웹 애플리케이션의 무결성과 기능을 유지하는 데 중요합니다. 개발자가 스크립트 실행 중에 발생할 수있는 문제를 식별하고 수정하는 데 도움이됩니다. 적절한 오류 처리가 없으면 사소한 문제는 응용 프로그램 충돌 또는 민감한 정보를 사용자에게 노출시키는 것과 같은 중대한 문제를 일으킬 수 있습니다. 또한 개발자가 혼란스러운 오류 메시지를 표시하지 않고 오류가 발생할 때 사용자가 보는 내용을 제어 할 수 있으므로 사용자 경험을 향상시킵니다. PHP가 기본적으로 오류를 처리하는 방법은 무엇입니까?
기본적으로 PHP는 서버의 오류 로그에 오류 보고서를 보내고 화면에 오류 메시지가 표시됩니다. 이 동작은 사용자에게 민감한 정보를 공개 할 수 있기 때문에 라이브 웹 사이트에 이상적이지 않습니다. 따라서 라이브 웹 사이트의 기본 오류 처리 설정을 변경하는 것이 좋습니다. PHP의 다른 유형의 오류는 무엇입니까? PHP는 치명적인 오류, 경고, 구문 분석 오류 및 통지를 포함한 여러 유형으로 오류를 분류합니다. 치명적인 오류는 존재하지 않는 함수를 호출하거나 쓸 수없는 파일에 쓰는 것과 같은 중요한 오류입니다. 경고는 스크립트가 계속 실행될 수있는 치명적이지 않은 오류입니다. 스크립트에 구문 실수가있을 때 구문 분석 오류가 발생합니다. 통지는 스크립트를 실행하는 동안 PHP가 발생하는 사소한 오류 또는 가능한 오류입니다.
PHP에서 오류 처리를 사용자 정의 할 수 있습니까? PHP는 set_error_handler () 및 set_exception_handler ()와 같은 오류 처리를 사용자 정의하기 위해 여러 기능을 제공합니다. 이러한 기능을 사용하면 사용자 정의 오류 처리 규칙 및 예외를 정의 할 수 있습니다. 오류를 기록하거나 오류 알림을 보내는 데 유용 할 수있는 오류를 처리 할 수있는 사용자 정의 함수를 지정할 수 있습니다.
PHP의 예외는 무엇입니까? 예외는 스크립트 지침의 정상적인 흐름을 방해하는 스크립트를 실행하는 동안 발생하는 이벤트입니다. 예외가 발생하면 PHP는 스크립트 실행을 중단하고 예외를 처리 할 캐치 블록을 찾기 시작합니다. 캐치 블록이 발견되지 않으면 PHP는 치명적인 오류를 표시하고 스크립트 실행을 중단합니다.
PHP의 예외를 어떻게 처리 할 수 있습니까? PHP는 예외를 처리하기 위해 시도, 캐치 및 블록을 제공합니다. 시도 블록에는 예외를 던질 수있는 코드가 포함되어 있습니다. 캐치 블록에는 예외를 처리하는 코드가 포함되어 있습니다. 마지막으로 블록에는 예외가 발생했는지 여부에 관계없이 실행될 코드가 포함되어 있습니다.
PHP의 오류와 예외의 차이점은 무엇입니까?
PHP의 오류와 예외의 주요 차이점은 처리 방식입니다. 오류는 PHP 엔진에서 처리되며 오류보고 설정 및 사용자 정의 오류 처리기를 사용하여 제어 할 수 있습니다. 반면에 예외는 스크립트에 의해 처리되고 시도, 캐치 및 마지막으로 블록을 사용하여 제어 할 수 있습니다. PHP에서 오류보고를 끄는 방법?
오류가 0을 사용하여 () 함수를 인수로 사용하여 PHP에서 오류보고를 끄질 수 있습니다. 그러나 라이브 웹 사이트에는 문제를 식별하고 수정하기가 어려울 수 있기 때문에 실시간 웹 사이트에 오류보고를 권장하지 않습니다. PHP 오류 처리에서 @ 연산자의 역할은 무엇입니까? PHP의 @ 연산자는 오류 메시지를 억제하는 데 사용됩니다. PHP의 표현식으로 배정되면 해당 표현식에 의해 생성 될 수있는 오류 메시지가 무시됩니다.
php에서 오류를 로그인하려면 어떻게해야합니까? php는 Error_Log () 함수를 제공하여 서버의 오류 로그 또는 지정된 파일에 오류 메시지를 보냅니다. 이 기능은 오류를 추적하고 디버깅에 유용 할 수 있습니다. php.ini 파일에서 log_errors 지시문을 변경하여 모든 오류를 로그화하도록 PHP를 구성 할 수도 있습니다.
위 내용은 Phpmaster | PHP의 오류 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!