웹사이트 검색

PHP 8에서 모든 오류를 표시하는 방법


PHP 8에서 모든 오류를 표시하는 방법

기본적으로 PHP 8은 오류 표시를 비활성화하므로 PHP 스크립트를 실행하는 동안 문제가 발생하면 화면에 아무 것도 표시되지 않습니다. HTML 코드가 출력되기 전에 프로그램의 오류가 발생하면 웹 브라우저의 흰색 화면이 나타납니다.

PHP에서 구성된 오류 출력은 어디에 있습니까?

오류 출력은 다음에서 구성됩니다.

  • 스크립트 코드
  • .htaccess 파일
  • PHP 구성 파일(예: php.ini)

스크립트 코드의 설정은 설정이 이루어진 프로그램의 동작에만 영향을 미칩니다.

.htaccess 파일의 설정은 해당 디렉토리 및 하위 디렉토리의 모든 스크립트에 영향을 미칩니다.

php.ini 구성 파일의 설정은 오류 출력 설정을 재정의하지 않는 한 실행되는 모든 PHP 스크립트에 영향을 미칩니다.

오류 보고는 코드를 작성하고 디버깅하는 동안 매우 유용하지만 프로덕션 서버에서는 민감한 데이터가 유출되는 것을 방지하고 공격자가 사이트를 해킹하기 어렵게 만드는 것을 방지하기 위해 오류 보고를 꺼야 합니다.

PHP 스크립트에서 오류 출력 구성

모든 오류를 표시하려면 스크립트 시작 부분에 다음 줄을 추가합니다.

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

이러한 설정을 사용하면 모든 오류 및 경고를 사용자의 웹 브라우저에 출력할 수 있습니다.

더 이상 사용되지 않는 구문 사용에 대한 경고가 표시됩니다.

웹 서버 로그에 대한 오류 출력은 별도로 구성됩니다.

치명적인 오류가 발생하는 경우, 즉 잘못된 PHP 구문으로 인해 스크립트가 실행되지 않는 경우 php.ini 또는 .htaccess 파일에 지정된 규칙을 기억하십시오. 오류를 출력하는 데 사용됩니다. 구문이 올바르지 않으면 PHP 인터프리터가 위의 지시문을 포함하여 전체 파일을 이해하지 못하기 때문입니다. 즉, 코드에 세미콜론이나 중괄호가 없으면 php.ini 파일의 설정에 따라 오류가 표시됩니다.

.htaccess 파일에서 PHP 오류 출력 구성

.htaccess 파일에서 오류 출력을 활성화하는 것은 다음 지시문에 의해 수행됩니다.

php_flag display_startup_errors on
php_flag display_errors on

작동하려면 웹 서버에 .htaccess 파일이 활성화되어 있어야 합니다.

웹 서버 로그에 대한 오류 출력은 다음 지시문에 의해 수행됩니다.

php_value error_log logs/all_errors.log

php.ini 파일의 모든 오류 출력 설정

php.ini 파일은 PHP 구성 파일입니다.

PHP는 작동 중에 둘 이상의 구성 파일을 사용할 수 있습니다.

php.ini 파일 위치:

  • Debian 및 파생 배포판(Ubuntu, Linux Mint, Kali Linux 등)에서는 PHP 버전에 따라 다릅니다. 예를 들어 PHP 8.1의 경우 파일 경로는 /etc/php/8.1/apache2/php입니다. .ini
  • Arch Linux 및 파생 배포판(Manjaro, BlackArch 등): /etc/php/php.ini

php.ini 파일에서 다음 지시문을 찾을 수 있습니다.

display_errors = Off
display_startup_errors = Off

오류 보고를 활성화하려면 다음으로 바꿉니다.

display_errors = On
display_startup_errors = On

error_reporting의 기본값은 다음과 같이 설정됩니다.

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

이는 사용 중단 경고 및 엄격한 코드 검사로 인한 경고를 제외한 모든 오류가 인쇄됨을 의미합니다.

모든 오류 및 경고를 표시하려면 다음 값을 설정하십시오.

error_reporting = E_ALL

공통 가치:

  • E_ALL (코딩 표준을 포함하여 모든 오류, 경고 및 알림을 표시합니다.)
  • E_ALL & ~E_NOTICE(알림을 제외한 모든 오류 표시)
  • E_ALL & ~E_NOTICE & ~E_STRICT (통지 및 코딩 표준 경고를 제외한 모든 오류 표시)
  • E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (오류만 표시)

자세한 내용은 링크를 참조하십시오: https://www.php.net/manual/errorfunc.constants.php

php.ini 파일의 변경 사항을 적용하려면 웹 서버를 다시 시작해야 합니다.

  • Debian 및 파생 배포판(Ubuntu, Linux Mint, Kali Linux 등)에서는 다음 명령으로 수행됩니다.

sudo systemctl restart apache2.service

  • Arch Linux 및 파생 배포판(Manjaro, BlackArch 및 기타)에서는 다음 명령을 사용하여 수행됩니다.

sudo systemctl restart httpd.service

php.ini 파일 설정이 실제로 적용되었는지 확인하려면 예를 들어 info.php라는 파일을 만들고 복사합니다.

<?php
phpinfo();

웹 서버의 루트 폴더에 파일을 만들었다면 웹 브라우저에서 http://localhost/info.php를 엽니다.

다음 스크린샷은 php.ini 파일에서 오류 출력이 비활성화되었음을 보여줍니다.

이 스크린샷은 php.ini 파일에서 오류 출력이 활성화되었음을 보여줍니다.

웹 서버 로그에 오류 출력

웹 서버 로그에 대한 오류 출력은 php.ini 파일에서 구성됩니다.

이를 위해 다음 지시문이 사용됩니다.

log_errors = On

오류 파일의 위치는 웹 서버 구성에서 구성됩니다.

error_reporting('all');» и ошибка «Uncaught TypeError: error_reporting()”

다음 구성을 사용하려고 할 때:

error_reporting('all');

발견되지 않은 TypeError: error_reporting() 오류가 발생합니다.

전체 오류 로그:

[Wed Jul 06 07:29:19.410966 2022] [php:error] [pid 14101] [client 127.0.0.1:58402] PHP Fatal error: Uncaught TypeError: error_reporting(): Argument #1 ($error_level) must be of type ?int, string given in /srv/http/suip/index.php:3\nStack trace:\n#0 /srv/http/suip/index.php(3): error_reporting('all')\n#1 {main}\n thrown in /srv/http/suip/index.php on line 3, referer: http://localhost/suip/

'all' 대신 오류 메시지의 수준을 나타내는 상수를 제공해야 합니다. 유효한 값은 이 페이지에서 제공됩니다: https://www.php.net/manual/errorfunc.constants.php

다음 항목은 PHP 8에 적합하며 모든 오류, 참고 사항 및 권장 사항을 표시하는 것을 의미합니다.

error_reporting(E_ALL);