> 백엔드 개발 > PHP 튜토리얼 > PHP_php 스킬의 error_reporting() 사용법에 대한 자세한 설명

PHP_php 스킬의 error_reporting() 사용법에 대한 자세한 설명

WBOY
풀어 주다: 2016-05-16 20:08:13
원래의
923명이 탐색했습니다.

error_reporting() 함수는 보고할 오류를 지정합니다. 이 함수는 현재 스크립트에 대한 오류 보고 수준을 설정합니다. 이 함수는 이전 오류 보고 수준을 반환합니다.

우선 error_reporting() 함수를 사용하여 오류 수준을 설정하고 현재 수준을 반환한다는 점을 알아야 합니다. 다음과 같이 14가지 오류 수준이 있습니다.

1    E_ERROR     致命的运行时错误。 错误无法恢复过来。脚本的执行被暂停
2    E_WARNING    非致命的运行时错误。 脚本的执行不会停止
4    E_PARSE     编译时解析错误。解析错误应该只由分析器生成
8    E_NOTICE     运行时间的通知。
16    E_CORE_ERROR   在PHP启动时的致命错误。这就好比一个在PHP核心的E_ERROR
32    E_CORE_WARNING  在PHP启动时的非致命的错误。这就好比一个在PHP核心E_WARNING警告
64    E_COMPILE_ERROR 致命的编译时错误。 这就像由Zend脚本引擎生成了一个E_ERROR
128   E_COMPILE_WARNING 非致命的编译时错误,由Zend脚本引擎生成了一个E_WARNING警告
256   E_USER_ERROR   致命的用户生成的错误。
512   E_USER_WARNING  非致命的用户生成的警告。 
1024   E_USER_NOTICE  用户生成的通知。
2048   E_STRICT     运行时间的通知。

4096   E_RECOVERABLE_ERROR 捕捉致命的错误。

8191   E_ALL来     所有的错误和警告。

로그인 후 복사

php가 기본적으로 활성화되어 있지 않은 것 같으니 php.ini 파일을 구성해야 합니다.

display_errors = Off를 display_errors = On으로 변경

오류 수준도 구성하세요: 변경

error_reporting = E_ALL 다음으로 변경:

error_reporting = E_ALL & ~E_NOTICE

PHP는 기본적으로 모든 오류를 표시하기 때문이지만 일부 무해한 프롬프트를 표시할 필요는 없으므로 설정은 위와 같습니다!

은 다음과 같이 PHP 코드에서도 사용할 수 있습니다.

<&#63;php
//禁用错误报告,也就是不显示错误
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
&#63;>

로그인 후 복사

사용 예:

오늘 CI 프레임워크를 배우다가 문제가 발생했습니다.

A PHP Error was encountered 
Severity: Notice 

Message: Undefined variable: user 

로그인 후 복사

일반적으로 기본 일반 PHP 파일에서 정의되지 않은 선언된 변수를 출력할 때 오류가 보고되지 않지만, 코드이그나이터 프레임워크에서는 페이지 추가 및 수정을 통합하려는 "게으른 사람들"을 위한 것입니다. 너무 불편하네요. 아직 초보라서 이 오류 메시지를 코드에서 차단하고 싶은데 @를 사용하면 성능이 크게 저하된다는 분들이 많더군요...

드디어, codeigniter가 의도적으로 이런 오류 메시지를 표시한 걸까? 이런 오류를 어떻게 차단할 수 있을까?라는 생각이 들었습니다. 우연히 "codeigniter가 알림 정보를 표시하지 못하게 하는 방법은 무엇입니까?"라고 검색했는데 문득 떠올랐습니다. 이러한 유형의 오류로 판명되었습니다. index.php 항목의 error_reporting(E_ALL);이 문제를 일으키고 있습니다.
​error_reporting(E_ALL ^ ​​​​E_NOTICE)
이 오류는 다른 오류에 영향을 주지 않고 차단될 수 있습니다.

프로그램에서 이런 기능을 자주 볼 수 있습니다

function setErrorReporting()
{
  //从配置文件读取当前是否为开发环境
  if (DEV_ENV == true) {
    ini_set("error_reprorting", "E_ALL & ~E_NOTICE");
    ini_set("display_errors", "on");
  } else {
    error_reporting(E_ALL);
    ini_set('display_errors', 'Off');
    ini_set("log_errors" , "On");
    ini_set('error_log', '/var/log/phperror.log');
  }
}
로그인 후 복사

예:
Windows 환경에서: 원래 php4.3.0에서 정상적으로 실행되던 프로그램이 4.3.1에서 보고되는 오류가 많은 이유는 무엇입니까? 일반적인 프롬프트는 다음과 같습니다: 주의: 정의되지 않은 변수명: 변수 이름.

예를 들어 다음 코드는 다음과 같습니다.
코드는 다음과 같습니다. 코드를 복사하세요
if (!$tmp_i) {
$tmp_i=10;
}
4.3.0에서는 정상적으로 실행되지만 4.3.1에서 실행하면 주의: 정의되지 않은 varialbe:tmp_i
메시지가 나타납니다. 질문은 다음과 같습니다. 1. 문제는 어디에 있습니까?
2. 이 코드는 어떻게 수정해야 합니까?
3. 코드를 변경하지 않고 4.3.0의 원본 프로그램이 4.3.1 환경에서 이런 오류 메시지 없이 정상적으로 실행될 수 있도록 php.ini에서 설정을 수정하는 방법.
해결책:

프로그램 시작 부분에 문장 추가:
코드는 다음과 같습니다. 코드를 복사하세요
error_reporting(E_ALL & ~E_NOTICE); 또는 error_reporting(E_ALL ^ ​​​​E_NOTICE);
또는 php.ini를 수정하세요:
코드는 다음과 같습니다. 코드를 복사하세요
error_reporting = E_ALL & ~E_NOTICE
error_reporting() 함수 정보: error_reporting()은 PHP의 오류 수준을 설정하고 현재 수준을 반환합니다.
; 오류 보고는 비트 단위입니다. 또는 원하는 오류 보고 수준을 얻으려면 숫자를 더하세요.
; E_ALL - 모든 오류 및 경고
; E_ERROR - 치명적인 런타임 오류
; E_WARNING - 런타임 경고(치명적이지 않은 오류)
; E_PARSE - 컴파일 시간 구문 분석 오류
; E_NOTICE - 런타임 경고(종종 코드의 버그로 인해 발생하거나 의도적인 동작으로 인해 발생할 수 있습니다. (예: 빈 문자열 변수로 자동 초기화된다는 사실을 기반으로 초기화되지 않은 변수 사용)
; E_CORE_ERROR - PHP 시작 시 초기화 과정에서 발생한 치명적인 오류
; E_CORE_WARNING - PHP 시작 초기화 프로세스 중에 발생하는 경고(치명적이지 않은 오류)
; E_COMPILE_ERROR - 치명적인 컴파일 시간 오류
; E_COMPILE_WARNING - 컴파일 시간 경고(치명적이지 않은 오류)
; E_USER_ERROR - 사용자가 생성한 오류 메시지
; E_USER_WARNING - 사용자가 생성한 경고 메시지
; E_USER_NOTICE - 사용자가 생성한 알림 메시지
E_NOTICE는 정상적인 상황은 기록되지 않는다는 뜻으로, 존재하지 않는 변수에 접근을 시도하거나, 존재하지 않는 파일을 보기 위해 stat() 함수를 호출하는 등 프로그램에 오류가 발생한 경우에만 사용된다.
E_WARNING은 일반적으로 표시되지만 프로그램 실행을 중단하지는 않습니다. 이는 디버깅에 유용합니다. 예: 문제가 있는 정규 표기법으로 ereg()를 호출합니다.
E_ERROR는 일반적으로 표시되며 프로그램 실행을 중단합니다. 이는 이 마스크를 사용하여 메모리 구성이나 기타 오류를 추적할 수 없음을 의미합니다.
E_PARSE 구문에서 오류를 구문 분석합니다.
E_CORE_ERROR E_ERROR와 비슷하지만 PHP 코어로 인해 발생한 오류는 제외됩니다.
E_CORE_WARNING E_WARNING과 비슷하지만 PHP 핵심 오류 경고를 포함하지 않습니다

사용방법:
error_reporting(0);//오류 보고 비활성화
error_reporting(E_ALL ^ ​​​​E_NOTICE);//E_NOTICE를 제외한 모든 오류 메시지 표시
error_reporting(E_ALL^E_WARNING^E_NOTICE);//E_WARNING E_NOTICE를 제외한 모든 오류 메시지 표시
error_reporting(E_ERROR | E_WARNING | E_PARSE);//error_reporting(E_ALL ^ ​​​​E_NOTICE);과 동일한 효과가 있는 런타임 오류를 표시합니다. error_reporting(E_ALL);//모든 오류 표시
error_reporting(0)
error_reporting(255);
예, 모든 팁을 나열하세요
error_reporting(0);
모든 프롬프트를 표시하지 않음

사용을 권장합니다. error_reporting(7);
심각한 오류만 표시
1 E_ERROR 치명적인 런타임 오류
2 E_WARNING 런타임 경고(치명적이지 않은 오류)
4 E_PARSE 컴파일 타임 구문 분석 오류
8 E_NOTICE 런타임 알림(종종 버그, 의도적일 수 있음)
16 E_CORE_ERROR PHP 시작 중 초기화 중 치명적인 오류
32 E_CORE_WARNING PHP 시작 시 초기화 프로세스 중 경고(치명적이지 않은 오류)
64 E_COMPILE_ERROR 컴파일 중 치명적인 오류
128 E_COMPILE_WARNING 컴파일 시간 경고(치명적이지 않은 오류)
256 E_USER_ERROR 사용자 정의 치명적 오류
512 E_USER_WARNING 사용자 정의 경고(치명적이지 않은 오류)
1024 E_USER_NOTICE 사용자 정의 알림(종종 버그, 의도적일 수 있음)
2048 E_STRICT 인코딩 표준화 경고(향후 호환성을 위해 수정 방법 권장)
4096 E_RECOVERABLE_ERROR 치명적인 런타임 오류입니다. 발견되지 않으면 E_ERROR로 처리됩니다.
6143 E_ALL E_STRICT를 제외한 모든 오류(PHP6의 8191, 모두 포함)

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