백엔드 개발 PHP 튜토리얼 PHP5.5.32 버전의 오류 메커니즘 요약

PHP5.5.32 버전의 오류 메커니즘 요약

Dec 10, 2016 am 09:33 AM
php 버전 오류 메커니즘

PHP의 오류 수준

먼저 PHP에 어떤 오류가 있는지 이해해야 합니다. php5.5에는 총 16개의 오류 수준이 있습니다.

참고: 다음 코드를 시도할 때 error_log를 켜십시오:

error_reporting(E_ALL);  
ini_set('display_errors', 'On');
로그인 후 복사

E_ERROR

이 오류는 치명적인 오류이며 페이지에 Fatal Error가 표시됩니다. 이 오류가 발생하면 프로그램을 계속 실행할 수 없습니다.

오류 예:

// Fatal error: Call to undefined function hpinfo() in /tmp/php/index.php on line 5 
hpinfo();  //E_ERROR
로그인 후 복사

잡히지 않은 예외가 있으면 이 레벨도 트리거됩니다.

// Fatal error: Uncaught exception 'Exception' with message 'test exception' in /tmp/php/index.php:5 Stack trace: #0 {main} thrown in /tmp/php/index.php on line 5 
throw new \Exception("test exception");
로그인 후 복사

이 오류는 단지 경고일 뿐이며 스크립트가 종료되지 않고 프로그램이 계속 진행되며 표시되는 오류 메시지는 경고입니다. 예를 들어 존재하지 않는 파일을 포함합니다.

//Warning: include(a.php): failed to open stream: No such file or directory in /tmp/php/index.php on line 7 
//Warning: include(): Failed opening 'a.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /tmp/php/index.php on line 7 
include("a.php"); //E_WARNING
로그인 후 복사

E_NOTICE

이 오류는 더 사소한 오류이므로 이 곳에 기록하면 안 된다는 점을 상기시켜 드립니다. 이는 런타임 오류이기도 합니다. 잘못된 코드는 다른 곳에서는 문제가 없을 수 있지만 현재 컨텍스트에서만 문제가 있을 수 있습니다.

예를 들어 $b 변수가 존재하지 않으면 이를 다른 변수에 할당합니다.

//Notice: Undefined variable: b in /tmp/php/index.php on line 9 
$a = $b; //E_NOTICE
로그인 후 복사

E_PARSE

이 오류는 컴파일 중에 발생합니다. , 컴파일 중에 구문 오류가 발견되어 구문 분석을 수행할 수 없습니다.

예를 들어 아래 z는 변수로 설정되지 않았습니다.

// Parse error: syntax error, unexpected '=' in /tmp/php/index.php on line 20 
z=1; // E_PARSE
로그인 후 복사

E_STRICT

이 오류는 PHP5 이후에 발생했지만, 이는 PHP에서 권장하는 방식이 아닙니다.

예를 들어 함수 매개변수에 ++ 기호를 전달하는 경우

// Strict Standards: Only variables should be passed by reference in /tmp/php/index.php on line 17  
function change (&$var) { 
  $var += 10; 
} 
$var = 1; 
change(++$var); 
// E_STRICT
로그인 후 복사

E_RECOVERABLE_ERROR

이 수준은 실제로는 ERROR 수준이지만 캡처될 것으로 예상되지만 오류 처리로 캡처되지 않은 경우 동작은 E_ERROR와 동일합니다.

은 형식 매개변수가 유형을 정의했지만 호출 시 잘못된 유형이 전달되는 경우가 자주 발생합니다. 오류 알림에는 E_ERROR의 치명적인 오류 앞에 Catachable이라는 단어도 있습니다.

//Catchable fatal error: Argument 1 passed to testCall() must be an instance of A, instance of B given, called in /tmp/php/index.php on line 37 and defined in /tmp/php/index.php on line 33 
class A { 
} 
 
class B { 
} 
 
function testCall(A $a) { 
} 
 
$b = new B(); 
testCall($b);
로그인 후 복사

E_DEPRECATED

이 오류는 이전 버전의 함수를 사용하고 있으며 이 함수의 이후 버전이 비활성화되거나 비활성화될 수 있음을 의미합니다. 유지.

예를 들어, 컬의 CURLOPT_POSTFIELDS는 @FILENAME을 사용하여 파일을 업로드합니다.

// Deprecated: curl_setopt(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in /tmp/php/index.php on line 42 
 
$ch = curl_init("http://www.php.cn/upload.php"); curl_setopt($ch, CURLOPT_POSTFIELDS, array('fileupload' => '@'. "test"));
로그인 후 복사

E_CORE_ERROR, E_CORE_WARNING

이 두 오류는 다음에 의해 생성된 PHP로 인해 발생합니다. PHP 초기화 중에 발생합니다.

E_COMPILE_ERROR, E_COMPILE_WARNING

이 두 가지 오류는 PHP 엔진에 의해 생성되며 컴파일 프로세스 중에 발생합니다.

E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_USER_DEPRECATED,

trigger_error를 사용하는 것은 사용자 유형에 따라 다양한 오류를 발생시키는 구멍과 같습니다. 이는 try catch 예외를 피하는 좋은 방법입니다.

trigger_error("Cannot divide by zero", E_USER_ERROR); // E_USER_ERROR // E_USER_WARING // E_USER_NOTICE // E_USER_DEPRECATED
로그인 후 복사

E_ALL

E_STRICT 모든 오류 및 경고 메시지.

오류 제어

PHP에는 오류 및 오류 로그 표시를 제어할 수 있는 많은 구성과 매개변수가 있습니다. 첫 번째 단계에서 우리가 알아야 할 것은 PHP의 잘못된 구성이 무엇인지입니다.

php+php-fpm 모델에 따르면 실제로 php 오류 표시에 영향을 미치는 두 가지 구성 파일이 있습니다. 하나는 php 자체의 구성 파일 php.ini이고 다른 하나는 php-fpm입니다. . 구성 파일, php-fpm.conf.

php.ini 구성

error_reporting = E_ALL  // 报告错误级别,什么级别的 
 
error_log = /tmp/php_errors.log // php中的错误显示的日志位置 
 
display_errors = On // 是否把错误展示在输出上,这个输出可能是页面,也可能是stdout 
 
display_startup_errors = On // 是否把启动过程的错误信息显示在页面上,记得上面说的有几个Core类型的错误是启动时候发生的,这个就是控制这些错误是否显示页面的。 
 
log_errors = On // 是否要记录错误日志 
 
log_errors_max_len = 1024 // 错误日志的最大长度 
 
ignore_repeated_errors = Off // 是否忽略重复的错误 
 
track_errors = Off // 是否使用全局变量$php_errormsg来记录最后一个错误 
 
xmlrpc_errors = 0 //是否使用XML-RPC的错误信息格式记录错误 
 
xmlrpc_error_number = 0 // 用作 XML-RPC faultCode 元素的值。 
 
html_errors = On  // 是否把输出中的函数等信息变为HTML链接 
 
docref_root = http://manual/en/ // 如果html_errors开启了,这个链接的根路径是什么 
 
fastcgi.logging = 0 // 是否把php错误抛出到fastcgi中
로그인 후 복사

error_reporting과 display_errors의 차이점이 무엇인지 묻는 질문을 자주 받습니다. 이 두 기능은 완전히 다릅니다.

PHP는 기본적으로 로그 및 표준 출력을 수행합니다(fpm 모드인 경우 표준 출력은 페이지입니다).

error_reporting 매개변수는 오류 수준입니다. 오류를 트리거해야 하는 수준을 나타냅니다. 모든 오류 수준이 오류를 유발할 필요가 없다고 PHP에 알리면 로그나 페이지 모두 이 오류를 표시하지 않으며 이는 아무 일도 일어나지 않는 것과 같습니다.

display_errors는 오류 메시지를 표준 출력에 표시할지 여부를 제어합니다.

log_errors는 오류 메시지를 로그에 기록할지 여부를 제어합니다.

error_log는 오류 로그가 표시되는 위치입니다. php-fpm에서 다시 작성하는 경우가 많기 때문에 cli와 fpm의 오류 로그가 동일한 파일에 있지 않은 경우가 종종 있습니다.

ignore_repeated_errors 이 태그는 다음 프로그램과 같이 중복된 로그가 있는 경우 하나만 기록되도록 제어합니다.

error_reporting(E_ALL); 
ini_set('ignore_repeated_errors', 1); 
ini_set('ignore_repeated_source', 1); 
$a = $c; $a = $c; //E_NOTICE 
//Notice: Undefined variable: c in /tmp/php/index.php on line 20
로그인 후 복사

NOTICE는 두 번 표시되었지만 이제는 한 번만 나타납니다...

track_errors를 활성화하면 마지막 오류 정보가 변수에 저장됩니다. 이는 로그를 기록할 때 유용할 수 있습니다. 하지만 정말 쓸모없다고 생각합니다...

html_errors 및 docref_root는 매우 사용자 친화적인 구성입니다. 이 두 매개변수를 구성한 후 우리가 반환하는 오류 메시지에 문서에 일부 정보가 있으면 링크.

error_reporting(E_ALL); 
ini_set('html_errors', 1); 
ini_set('docref_root', "https://secure.php.net/manual/zh/"); 
include("a2.php"); //E_WARNING
로그인 후 복사

을 사용하면 오류가 발생한 위치를 빠르게 찾을 수 있습니다. 참 인간적이지 않나요~

php-fpm 설정

error_log = /var/log/php-fpm/error.log // php-fpm自身的日志 
log_level = notice // php-fpm自身的日志记录级别 
php_flag[display_errors] = off // 覆盖php.ini中的某个配置变量,可被程序中的ini_set覆盖 
php_value[display_errors] = off // 同php_flag 
php_admin_value[error_log] = /tmp/www-error.log // 覆盖php.ini中的某个配置变量,不可被程序中的ini_set覆盖 
php_admin_flag[log_errors] = on // 同php_admin_value 
catch_workers_output = yes // 是否抓取fpmworker的输出 
request_slowlog_timeout = 0 // 慢日志时长 
slowlog = /var/log/php-fpm/www-slow.log // 慢日志记录
로그인 후 복사

php-fpm 설정에도 error_log 설정이 있는데, 자주 발생하는 문제입니다. php와 관련되어 있습니다. ini의 error_log 구성이 혼란스럽습니다. 그러나 기록하는 내용은 다릅니다. php-fpm의 error_log는 fpm 시작 및 종료와 같은 php-fpm 자체의 로그만 기록합니다.

php.ini의 error_log는 PHP 프로그램 자체를 기록하는 오류 로그입니다.

따라서 php-fpm에서 php.ini의 error_log 구성을 재정의하려면 다음 기능을 사용해야 합니다:

  • php_flag

  • php_value

  • php_admin_flag

  • php_admin_value

이 네 가지 기능 중 두 가지 admin 기능 설명 이후 변수가 설정되어 있으면 ini_set을 사용하여 코드에서 변수를 다시 할당할 수 없습니다. php_flag/value는 여전히 php 코드의 ini_set을 기반으로 합니다.

느린 로그는 fpm에 의해 기록됩니다. request_slowlog_timeout 설정을 사용하여 느린 로그의 지속 시간을 결정할 수 있습니다.

요약

우리가 흔히 혼동하는 것은 로그 문제와 특정 수준의 로그가 로그에 기록되지 않는 이유입니다. 가장 중요한 것은 error_log, display_errors, log_errors의 세 가지 구성을 살펴보는 것입니다. 하지만 구성을 볼 때 php.ini의 구성이 무엇인지, php-errors의 구성이 무엇인지 구별하는 것도 주의할 필요가 있습니다. fpm.ini.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 데이터베이스 작업 CakePHP 데이터베이스 작업 Sep 10, 2024 pm 05:25 PM

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles