PHP에서 유용한 오류 메시지를 얻는 방법?
PHPPHP에서 유용한 오류 메시지를 얻는 방법?
나는 PHP에서 프로그래밍이 매우 실망 스럽다. 꽤 자주 스크립트를 실행하고 빈 화면을 다시 얻으려고 시도합니다. 오류 메시지가 없으며 빈 화면 만 있습니다. 원인은 간단한 구문 오류 (잘못된 대} 호, 누락 된 세 L 콜론) 또는 실패한 함수 호출이거나 완전히 다른 것일 수 있습니다.
무엇이 잘못되었는지 알아내는 것은 매우 어렵습니다. 결국 코드를 주석 처리하고, "에코"문을 사방에 입력하는 등의 문제를 좁히기 위해 노력합니다. 그러나 확실하게 더 나은 방법이어야합니다.
그렇다면 PHP가 Java와 같은 유용한 오류 메시지를 생성 할 수있는 방법이 있습니까? 누구든지 좋은 PHP 디버깅 팁, 도구 및 기법을 추천 할 수 있습니까?
해결법
-
==============================
1.
구문 오류의 경우 php.ini에서 오류 표시를 활성화해야합니다. 기본적으로이 옵션은 "고객"에게 오류 메시지가 표시되기를 원치 않으므로 해제됩니다. error_reporting 및 display_errors와 같은 두 가지 지시어에 대한 정보는 PHP 문서에서이 페이지를 확인하십시오. display_errors는 아마도 변경하려는 것일 것입니다. php.ini 파일을 수정할 수 없다면 다음 행을 .htaccess 파일에 추가 할 수도 있습니다 :
php_flag display_errors on php_value error_reporting 2039
모든 에러를 얻으려면 error_reporting을 위해 PHP 버전에 대해 E_ALL (Gumbo에서 언급 한) 값을 사용하는 것이 좋습니다. 더 많은 정보
3 가지 다른 항목 : (1) 오류 로그 파일을 검사 할 수 있습니다 (로깅이 비활성화되어 있지 않은 경우). (2) 다음 두 줄을 추가하면 구문 오류가 아닌 오류를 디버그하는 데 도움이됩니다.
error_reporting(-1); ini_set('display_errors', 'On');
(3) 또 다른 옵션은 입력시 PhpEd와 같은 오류를 검사하는 편집기를 사용하는 것입니다. PhpEd에는 더 자세한 정보를 제공 할 수있는 디버거도 함께 제공됩니다. (PhpEd 디버거는 xdebug와 매우 유사하며 편집기에 직접 통합되어 모든 것을 수행하는 데 하나의 프로그램을 사용합니다.)
Cartman의 링크도 매우 좋습니다 : http://www.ibm.com/developerworks/library/os-debug/
-
==============================
2.
다음은 모든 오류를 활성화합니다.
ini_set('display_startup_errors', 1); ini_set('display_errors', 1); error_reporting(-1);
또한 다음 링크를 참조하십시오.
-
==============================
3.
디버깅 할 파일에 다음 행을 포함시킬 수 있습니다.
error_reporting(E_ALL); ini_set('display_errors', '1');
이것은 php.ini의 기본 설정을 덮어 씁니다. php.ini는 PHP가 로그에 오류를보고하게합니다.
-
==============================
4.
php.ini의 2 개의 엔트리는 에러의 출력을 지시합니다 :
프로덕션 환경에서 display_errors는 일반적으로 Off로 설정됩니다 (이는 프로덕션 사이트의 오류 표시가 일반적으로 바람직하지 않기 때문에 좋은 방법입니다).
그러나 개발 중에는 오류가 표시되도록 On으로 설정해야합니다. 검사!
error_reporting (PHP 5.3 현재)은 기본적으로 E_ALL & ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED로 설정됩니다 (즉,주의 사항, 엄격한 표준 및 비추천 통지를 제외한 모든 내용이 표시됨). 의심 스럽다면 E_ALL로 설정하여 모든 오류를 표시하십시오. 검사!
그것은 수치 스럽습니다. 보통 공유 호스트는 php.ini 파일의 변경을 허용하지 않으므로, 그 옵션은 슬프게도 사용할 수 없습니다. 그러나 두려워하지 마라! 다른 옵션이 있습니다!
원하는 스크립트에서 우리는 런타임에 php.ini 항목을 변경할 수 있습니다! 의미, 그것은 스크립트가 실행될 때 실행됩니다! 단!
error_reporting(E_ALL); ini_set("display_errors", "On");
이 두 줄은 위와 같이 php.ini 항목을 변경하는 것과 같은 효과를냅니다! 굉장해!
즉 스크립트가 실행되지 않았 음을 의미합니다! 이것은 보통 구문 오류가있을 때 발생합니다!
구문 오류로 인해 스크립트는 런타임에 도달하지 않습니다. 컴파일시에 실패합니다. 즉, php.ini의 값을 사용하게됩니다. 변경하지 않으면 오류 표시가 허용되지 않을 수 있습니다.
또한 PHP는 기본적으로 오류를 기록합니다. 공유 호스팅에서 전용 폴더 또는 문제가되는 스크립트와 동일한 폴더에있을 수 있습니다.
php.ini에 접근 할 수 있다면 error_log 항목 아래에서 찾을 수 있습니다.
-
==============================
5.
"xdebug"라는 정말 유용한 확장이있어 보고서를 훨씬 더 멋지게 만들 수 있습니다.
-
==============================
6.
신속하고 실용적인 문제 해결을 위해 일반적으로 여기에 제안했습니다.
error_reporting(~0); ini_set('display_errors', 1);
문제 해결중인 스크립트의 시작 부분에 놓습니다. 이것은 완벽하지는 않습니다. 완벽한 변종은 php.ini에서이 기능을 활성화하고 구문 오류 및 시작 오류를 잡기 위해 PHP에서 오류를 기록한다는 것입니다.
여기에 설명 된 설정은 PHP 버전과 상관없이 모든 오류,주의 사항 및 경고 (엄격한 경고 포함)를 표시합니다.
고려해야 할 다음 사항 :
다음을 참조하십시오.
-
==============================
7.
슈퍼 시원한 경우 시도해보십시오.
$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192"; ini_set('display_errors',$test_server); error_reporting(E_ALL|E_STRICT);
로컬에서 실행 중일 때만 오류가 표시됩니다. 또한 적절한 경우 다른 위치에서 사용할 test_server 변수를 제공합니다.
스크립트가 실행되기 전에 발생하는 모든 오류는 발견되지 않지만 99 %의 오류에 대해서는 문제가되지 않습니다.
-
==============================
8.
페이지 상단에서 매개 변수를 선택하십시오.
error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
==============================
9.
이것을 유지하고 confortale로 만들려면 php.ini 파일을 편집하면됩니다. 일반적으로 /etc/php.ini 또는 /etc/php/php.ini에 저장되지만, 호스팅 제공 업체의 설정 지침에 따라 더 많은 로컬 php.ini 파일이 덮어 쓸 수 있습니다. 맨 위에로드 된 구성 파일에 대한 phpinfo () 파일을 확인하여 마지막으로로드 할 파일이 있는지 확인하십시오.
해당 파일에서 display_errors를 검색하십시오. 단지 3 개의 인스턴스가 있어야하며 그 중 2 개의 인스턴스가 주석 처리됩니다.
주석 처리되지 않은 행을 다음으로 변경하십시오.
display_errors = stdout
-
==============================
10.
error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 1); ini_set('html_errors', 1);
또한 xdebug를 사용하여보다 자세한 정보를 얻을 수 있습니다.
-
==============================
11.
Nette Tracy가 PHP의 오류 및 예외를 더 잘 시각화 할 수 있도록 권장합니다.
-
==============================
12.
error_reporting(E_ALL | E_STRICT);
그리고 php.ini에서 디스플레이 오류를 켭니다.
-
==============================
13.
PHP에서 자체 오류 처리기를 등록 할 수 있습니다. 모든 오류를 파일로 덤핑하면 이러한 모호한 경우에 도움이 될 수 있습니다. 현재 error_reporting이 무엇으로 설정되었는지에 관계없이 함수가 호출됩니다. 아주 기본적인 예 :
function dump_error_to_file($errno, $errstr) { file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND); } set_error_handler('dump_error_to_file');
-
==============================
14.
이 PHP 오류보고 참조 도구를 사용해보십시오. 시각적 인 참고 자료로서 복잡한 오류보고 메커니즘을 이해하는 데 도움이되었습니다.
-
==============================
15.
PHPStorm을 코드 편집기로 사용해 볼 수도 있습니다. 편집기에서 타이핑 할 때 많은 PHP 및 기타 구문 오류를 발견하게됩니다.
-
==============================
16.
PHP에서 유용한 오류를 얻는 데 필요한 두 가지 주요 줄은 다음과 같습니다.
ini_set('display_errors',1); error_reporting(E_ALL);
다른 참여자가 지적한대로 보안상의 이유로 기본적으로 해제됩니다. 유용한 팁 - 사이트를 구축 할 때 여러 환경에서 스위치를 사용하면 로컬 및 개발 환경에서 기본적으로 이러한 오류가 켜지 게되므로 편리합니다. 이것은 다음 코드 (이상적으로 index.php 또는 config 파일에 있기 때문에 가능합니다. 처음부터 활성화되어 있습니다) :
switch($_SERVER['SERVER_NAME']) { // local case 'yourdomain.dev': // dev case 'dev.yourdomain.com': ini_set('display_errors',1); error_reporting(E_ALL); break; //live case 'yourdomain.com': //... break; }
-
==============================
17.
FirePHP도 유용 할 수 있습니다.
-
==============================
18.
우분투 사용자 인 경우 터미널을 이동하여이 명령을 실행하십시오.
sudo tail -50f /var/log/apache2/error.log
최근 50 개의 오류가 표시됩니다. 모든 오류를 기록하는 apache2의 오류 파일 error.log가 있습니다.
-
==============================
19.
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
-
==============================
20.
전체 오류보고 (통지 및 엄격한 메시지 포함)를 사용 가능하게 할 수 있습니다. 어떤 사람들은 이것을 너무 장황한 것으로 생각하지만 시도해 볼 가치가 있습니다. error_reporting을 E_ALL로 설정 | php.ini의 E_STRICT.
error_reporting = E_ALL | E_STRICT
E_STRICT는 비추천 함수에 대해 알려주고 특정 작업을 수행하는 가장 좋은 방법에 대한 권장 사항을 제공합니다.
주의를 원하지 않지만 다른 메시지 유형이 도움이된다면주의 사항을 제외하십시오.
error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE
또한 php.ini에서 display_errors가 활성화되어 있는지 확인하십시오. PHP 버전이 5.2.4보다 오래된 경우 On으로 설정하십시오.
display_errors = "On"
버전이 5.2.4 이상인 경우 다음을 사용하십시오.
display_errors = "stderr"
-
==============================
21.
전체 오류보고를 사용하려면 스크립트에 다음을 추가하십시오.
error_reporting(E_ALL);
이로 인해 최소한의 경고까지 표시됩니다. 그리고,
ini_set('display_errors', '1');
오류를 강제로 표시합니다. 프로덕션 서버에서는이 기능을 해제해야하지만 개발 중에는 해제해야합니다.
-
==============================
22.
error_reporting 및 display_errors ini 설정 이외에도 웹 서버의 로그 파일에서 SYNTAX 오류를 얻을 수 있습니다. PHP를 개발할 때 개발 시스템의 웹 서버 로그를 내 편집기에로드합니다. 페이지를 테스트하고 빈 화면이 나타날 때마다 로그 파일이 오래되고 편집기에서 다시로드할지 묻습니다. 내가 할 때, 나는 아래쪽으로 뛰어 오르고 문법 오류가있다. 예 :
[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9
-
==============================
23.
"오류"는 개발자가 실수를 알고 가장 완벽하게 작동하도록 해결 한 가장 유용한 기능입니다.
PHP는 개발자에게 왜 코드가 오류를 가져 오는지 알 수있는 더 나은 방법을 제공합니다. 따라서 개발자는 여러 가지 방법으로 코드를 개선 할 수 있습니다.
모든 오류 메시지를 얻기 위해 스크립트 상단에 다음 두 줄을 쓰는 가장 좋은 방법.
error_reporting(E_ALL); ini_set("display_errors", 1);
IDE에서 xdebug와 같은 디버거 도구를 사용하는 또 다른 방법입니다.
-
==============================
24.
오류보고 기능을 켜는 것이 올바른 해결책이지만 프로그램을 실행하는 프로그램에서는 효과가없는 것처럼 보이지만 이후에 포함 된 프로그램에서만 적용됩니다.
따라서 필자는 항상 내가 일반적으로 "genwrap.php"라고 부르는 파일 / 프로그램을 만듭니다.이 파일은 본질적으로 인기있는 솔루션 (예 : 오류보고 기능 켜기)과 동일한 코드를 가지고 있으며 실제로 원하는 페이지를 포함합니다 요구.
이 디버깅을 구현하는 2 단계가 있습니다.
하나 - genwrap.php를 만들고이 코드를 입력하십시오 :
<?php error_reporting(-1); ini_set('display_errors', 'On'); include($_REQUEST['page']); ?>
두 가지 - genwrap.php를 통해 디버깅하려는 프로그램 / 페이지에 대한 링크를 변경하십시오.
예 : 변경 :
$.ajax('dir/pgm.php?param=val').done(function(data) { /* ... */
에
$.ajax('dir/genwrap.php?page=pgm.php¶m=val').done(function(data) { /* ... */
-
==============================
25.
http://todell.com/debug도 유용 할 수 있습니다. 프로덕션 모드에서도 장면 뒤에서 객체 값이나 디버그 오류를 볼 수 있습니다.
-
==============================
26.
위의 매우 우수한 답변 외에도 프로젝트에 다음 두 가지 기능을 구현할 수 있습니다. 그들은 응용 프로그램 / 스크립트 종료 전에 모든 비 구문 오류를 포착합니다. 함수 내에서 백 트레이스를 수행하고 대중에게 유쾌한 '사이트가 유지 보수 중입니다'메시지를 기록하거나 렌더링 할 수 있습니다.
치명적인 오류 :
register_shutdown_function
http://php.net/manual/en/function.register-shutdown-function.php
오류 :
set_error_handler
http://php.net/manual/en/function.set-error-handler.php
역 추적 :
debug_backtrace
http://php.net/manual/en/function.debug-backtrace.php
-
==============================
27.
Kint를 사용하십시오. 그것은 스테로이드에 디버깅 명령의 조합입니다. https://kint-php.github.io/kint/ Nette Tracy와 매우 비슷합니다.
-
==============================
28.
내 평소 문제는 불행히도 나타나지 않는 "작은, 어리석은"파서 오류입니다.
그러나 .PHP 파일에 파서 오류가있는 파일이 포함되어 있으면이 파일이 표시됩니다! 그래서 버그가있는 파일의 이름으로 시작되는 작은 "executor-script"를 작성하는 아이디어가있었습니다 (예 : example.com/sx.php?sc=buggy.php).
그것은 이미 많은 두통에서 나를 구했고 어쩌면 다른 사람에게 도움이 될 것입니다. :)
sx.php $ sc = $ _GET [ "sc"]; if ((! isset ($ _GET [ "sc"]) && empty ($ _ GET [ "sc"]))) { echo "실행 파일을 선택 하시겠습니까? sc = (.PHP 확장자는 생략 할 수 있습니다)"; } else { $ sc = $ _GET [ "sc"]; if (false == stripos ( '. php', $ sc)) $ sc. = '. php'; 원하는 확장자가 php5 인 경우 // 이것을 조정하십시오! require ($ sc); } ?>
from https://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PHP에서 배열과 데이터를 어떻게 정렬합니까? (0) | 2018.09.01 |
---|---|
PHP에서 작은 따옴표와 큰 따옴표로 묶인 문자열의 차이점은 무엇입니까? (0) | 2018.09.01 |
PHP 코드가 실행되지 않고 코드가 페이지에 표시됩니다. (0) | 2018.09.01 |
다른 환경에서 MySQLi 오류 정보를 얻는 방법 (0) | 2018.09.01 |
PHP를 사용하여 "주의 : 정의되지 않은 변수", "주의 : 정의되지 않은 색인"및 "통지 : 정의되지 않은 오프셋" (0) | 2018.09.01 |