PHP 오류를 표시하려면 어떻게합니까?
PHPPHP 오류를 표시하려면 어떻게합니까?
PHP ini 파일을 검사하고 표시 오류가 설정되어 있으며 오류보고는 E_ALL입니다. Apache 웹 서버를 다시 시작했습니다.
심지어 스크립트의 맨 위에이 줄을 넣었고 간단한 구문 분석 오류도 잡히지 않았습니다. 예를 들어 변수를 "$"로 선언하고 문장을 닫지 않습니다 ";". 그러나 모든 스크립트는이 오류에 대해 빈 페이지를 표시하지만 실제로 브라우저 출력에서 오류를보고 싶습니다.
error_reporting(E_ALL);
ini_set('display_errors', 1);
남은 일은 무엇입니까?
해결법
-
==============================
1.
이것은 항상 나를 위해 작동합니다 :
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
그러나 이것은 PHP가 구문 분석 오류를 표시하도록하지는 않습니다. 이러한 오류를 표시하는 유일한 방법은 다음 행을 사용하여 php.ini를 수정하는 것입니다.
display_errors = on
-
==============================
2.
실제로 아무것도 실행하기 전에 파일을 구문 분석하기 때문에 런타임에 오류 출력을 사용할 때 구문 분석 오류를 포착 할 수 없습니다.이 과정에서 오류가 발생하기 때문에 아무 것도 실행하지 않습니다. display_errors가 켜져 있고 적절한 error_reporting 수준이 사용되도록 실제 서버 구성을 변경해야합니다. php.ini에 접근 할 수 없다면, 서버에 따라 .htaccess 또는 유사한 것을 사용할 수 있습니다.
이 질문은 추가 정보를 제공 할 수 있습니다.
-
==============================
3.
php.ini 파일 내부 :
display_errors = on
그런 다음 웹 서버를 다시 시작하십시오.
-
==============================
4.
모든 오류를 표시하려면 다음을 수행해야합니다.
1. 브라우저 (보통 index.php)에서 호출하는 PHP 스크립트에 다음 행을 추가하십시오.
error_reporting(E_ALL); ini_set('display_errors', 1);
2. (a)이 스크립트에는 구문 오류가 없는지 확인하십시오
-또는-
2. (b) php.ini에서 display_errors = On으로 설정하십시오.
그렇지 않으면, 그것도 그 두 줄을 실행할 수 없습니다!
명령 줄에서 다음을 실행하여 스크립트의 구문 오류를 확인할 수 있습니다.
php -l index.php
다른 PHP 스크립트의 스크립트를 포함하면 포함 된 스크립트에 구문 오류가 표시됩니다. 예 :
index.php
error_reporting(E_ALL); ini_set('display_errors', 1); // Any syntax errors here will result in a blank screen in the browser include 'my_script.php';
my_script.php
adjfkj // This syntax error will be displayed in the browser
-
==============================
5.
일부 웹 호스팅 공급자는 .htaccess 파일에서 PHP 매개 변수를 변경할 수 있도록합니다.
다음 행을 추가 할 수 있습니다.
php_value display_errors 1
나는 당신과 같은 문제를 가지고 있었고이 해결책은 그것을 고쳤습니다.
-
==============================
6.
"오류보고"또는 "표시 오류"에 대한 모든 설정이 PHP 7에서 작동하지 않는 것 같습니다. 이는 오류 처리가 변경 되었기 때문입니다. 대신 다음을 시도하십시오.
try{ // Your code } catch(Error $e) { $trace = $e->getTrace(); echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line']; }
또는 한 번에 예외 및 오류를 잡으려고합니다 (PHP 5와 호환되지 않습니다).
try{ // Your code } catch(Throwable $e) { $trace = $e->getTrace(); echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line']; }
-
==============================
7.
이것은 작동 할 것이다 :
<?php error_reporting(E_ALL); ini_set('display_errors', 1); ?>
-
==============================
8.
용도:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
이것은 글을 쓰는 가장 좋은 방법이지만 구문 오류는 빈 출력을 제공하므로 콘솔을 사용하여 구문 오류를 확인하십시오. PHP 코드를 디버깅하는 가장 좋은 방법은 콘솔을 사용하는 것입니다. 다음을 실행하십시오.
php -l phpfilename.php
-
==============================
9.
index.php에서 이것을 설정하십시오.
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
-
==============================
10.
PHP 파일이있는 폴더에 php.ini라는 파일을 만듭니다.
php.ini 파일에 다음 코드를 추가하십시오 (코드를 보여주는 간단한 오류를 나타냅니다).
display_errors = on display_startup_errors = on
-
==============================
11.
다음은 PHP 스크립트입니다.
<?php ini_set("display_startup_errors", 1); ini_set("display_errors", 1); /* Reports for either E_ERROR | E_WARNING | E_NOTICE | Any Error*/ error_reporting(E_ALL); echo(abc); /* Notice: abc is an undefined constant */ ?>
PHP 오류에 대한 자세한 설명은 PHP 오류 - error_reporting ()을 참조하십시오.
-
==============================
12.
PHP를 Apache 모듈로 사용하는 경우 Apache 구성 파일 (예 : httpd.conf) 및 .htaccess 파일의 지시문을 사용하여 구성 설정을 변경할 수 있습니다. AllowOverride Options 또는 AllowOverride All 권한이 필요합니다.
이것을 확인하십시오.
http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess
-
==============================
13.
php.ini 또는 .htaccess를 통해 설정을 수정할 수없는 상황에서 PHP 스크립트에 구문 분석 오류가 포함되어있는 경우 오류가 표시 될 수 있습니다. 그런 다음 명령 줄에서 다음과 같이 파일을 채우기 위해 해결해야합니다.
find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"
호스트가 잠겨있어 php.ini 또는 .htaccess를 통해 값을 변경할 수 없으면 ini_set을 통해 값을 변경할 수 없습니다. 다음 PHP 스크립트를 사용하여이를 확인할 수 있습니다.
<?php if( !ini_set( 'display_errors', 1 ) ) { echo "display_errors cannot be set."; } else { echo "changing display_errors via script is possible."; }
-
==============================
14.
위의 답변을 모두 따르더라도 (또는 php.ini 파일을 편집 할 수없는 경우에도) 오류 메시지가 나타나지 않으면 오류보고가 가능하도록 새 PHP 파일을 만든 다음 문제 파일을 포함 시키십시오. 예 :
error_reporting(E_ALL); ini_set('display_errors', 1); require_once('problem_file.php');
php.ini 파일에 모든 것이 올바르게 설정되어 있음에도 불구하고 이것이 네임 스페이스 오류를 잡을 수있는 유일한 방법이었습니다. 내 정확한 시나리오는 다음과 같습니다.
//file1.php namespace a\b; class x { ... } //file2.php namespace c\d; use c\d\x; //Dies because it's not sure which 'x' class to use class x { ... }
-
==============================
15.
다음과 같이 할 수 있습니다.
기본 색인 파일의 매개 변수 아래에 설정
ini_set('display_errors', 1); ini_set('display_startup_errors', 1);
그런 다음 요구 사항에 따라 표시 할 항목을 선택할 수 있습니다.
error_reporting(E_ALL); OR error_reporting(-1);
error_reporting(E_ERROR);
error_reporting(E_WARNING);
error_reporting(E_NOTICE);
자세한 정보는 여기를 확인하십시오.
-
==============================
16.
현재 PHP7을 사용하고 있기 때문에 여기에 나온 대답은 정확하지 않습니다. 여전히 괜찮은 유일한 사람은 프랭크 포르테 (Frank Forte)의 것입니다. 그는 PHP7에 관해 이야기합니다. 반대편에서 try / catch를 사용하여 오류를 잡으려고 시도하는 대신 트릭을 사용할 수 있습니다. include를 사용합니다. 여기에 3 가지 코드가 있습니다.
파일 : tst1.php
<?php error_reporting(E_ALL); ini_set('display_errors','On'); // Missing " and ; echo "Testing ?>
PHP7에서 이것을 실행하면 아무것도 표시되지 않습니다.
자, 이것을 시도해보십시오 :
파일 : tst2.php
<?php error_reporting(E_ALL); ini_set('display_errors','On'); include ("tst3.php"); ?>
파일 : tst3.php
<?php // Missing " and ; echo "Testing ?>
이제 tst2를 실행하여 오류보고를 설정 한 다음 tst3을 포함 시키십시오. 너는 볼 것이다 :
구문 분석 오류 : 구문 오류, 예기치 않은 파일 끝, 예상 변수 (T_VARIABLE) 또는 $ {(T_DOLLAR_OPEN_CURLY_BRACES) 또는 {$ (T_CURLY_OPEN) in tst3.php in line 4
-
==============================
17.
프로젝트가 크게 커지면 나는 아주 작은 보통의 PHP 프로젝트에 다음 코드를 넣을 것이다.
if(!defined('ENVIRONMENT')){ define('ENVIRONMENT','DEVELOPMENT'); } $base_url = null; if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'DEVELOPMENT': $base_url = 'http://localhost/product/'; ini_set('display_errors',1); ini_set('display_startup_errors',1); error_reporting(E_ALL|E_STRICT); break; case 'PRODUCTION': $base_url = 'Prod url'; /* https://google.com */ error_reporting(0); /* Mechanism to log errors */ break; default: exit('The application environment is not set correctly.'); } }
희망이 도움이됩니다.
-
==============================
18.
추가 디버그 정보를 제공 할 수있는 사용자 정의 오류 처리기를 추가 할 수 있습니다. 또한 이메일을 통해 보낼 수 있도록 설정할 수 있습니다.
function ERR_HANDLER($errno ,$errstr, $errfile, $errline){ $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br> <b>File:</b> $errfile <br> <b>Line:</b> $errline <br> <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>"; echo $msg; return false; } function EXC_HANDLER($exception){ ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine()); } function shutDownFunction() { $error = error_get_last(); if ($error["type"] == 1) { ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]); } } set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED); register_shutdown_function("shutdownFunction"); set_exception_handler("EXC_HANDLER");
-
==============================
19.
빠른 디버깅이라면 사용할 수있는 최상 / 쉽고 빠른 솔루션은 예외를 포착하여 코드를 둘러싸는 것입니다. 그것이 내가 생산에서 빠른 것을 체크하고 싶을 때 내가하고있는 일이다.
try { //Page code } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; }
이게 도움이 되길 바란다.
-
==============================
20.
맨 위에있는이 코드는 error_reporting (E_ALL);
그러나 파일에서 전화로 코드를 편집 해보십시오.
error_reporting = on
-
==============================
21.
그냥 써:
error_reporting(-1);
-
==============================
22.
그것이 내가 배운 것입니다. PHP.INI 파일에서
error_reporting = E_ALL display_errors = On
-
==============================
23.
xdebug가 설치되어있는 경우 다음을 설정하여 모든 설정을 무시할 수 있습니다.
xdebug.force_display_errors = 1; xdebug.force_error_reporting = -1;
-
==============================
24.
<?php // Turn off error reporting error_reporting(0); // Report runtime errors error_reporting(E_ERROR | E_WARNING | E_PARSE); // Report all errors error_reporting(E_ALL); // Same as error_reporting(E_ALL); ini_set("error_reporting", E_ALL); // Report all errors except E_NOTICE error_reporting(E_ALL & ~E_NOTICE); ?
>
사이트가 라이브 상태 일 때 보안상의 이유로 php.ini 파일의 display_errors가 비활성화되어 있어야합니다. 그러나 개발 환경의 경우 문제 해결을 위해 display_errors를 활성화 할 수 있습니다.
from https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PHP 암호를위한 안전한 해시 및 소금 (0) | 2018.09.01 |
---|---|
클렌징 사용자 암호 (0) | 2018.09.01 |
PHP에서 JavaScript로 변수와 데이터를 전달하는 방법? (0) | 2018.09.01 |
참조 : 변수 범위 란 무엇이며 어디에서 그리고 무엇이 "정의되지 않은 변수"오류에서 액세스 할 수 있습니까? (0) | 2018.09.01 |
PHP로 JSON에서 데이터를 추출하려면 어떻게해야합니까? (0) | 2018.09.01 |