etc./StackOverFlow

PHP 오류를 표시하려면 어떻게 합니까?

청렴결백한 만능 재주꾼 2021. 12. 24. 06:18
반응형

질문자 :Abs


내 PHP ini 파일( php.ini )을 확인했고 display_errors 가 설정되었으며 오류 보고도 E_ALL 입니다. Apache 웹 서버를 다시 시작했습니다.

스크립트 맨 위에 이 줄을 추가했는데 간단한 구문 분석 오류도 잡아내지 못했습니다. 예를 들어, "$" ";" 문을 닫지 않습니다. . 그러나 내 모든 스크립트는 이러한 오류에 대해 빈 페이지를 표시하지만 실제로 내 브라우저 출력에서 오류를 보고 싶습니다.

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

할 일이 남아 있습니까?



이것은 항상 저에게 효과적입니다.

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

그러나 이것은 PHP가 구문 분석 오류를 표시하도록 하지 않습니다. 이러한 오류를 표시하는 유일한 방법은 다음 행으로 php.ini를 수정하는 것입니다.

 display_errors = on

(만약 당신이 php.ini 접근할 수 없다면, 이 줄을 .htaccess 넣어도 효과가 있을 것입니다):

 php_flag display_errors 1

Fancy John

런타임에 오류 출력을 활성화할 때 구문 분석 오류를 포착할 수 없습니다. 왜냐하면 실제로 실행하기 전에 파일을 구문 분석하기 때문입니다(그리고 이 동안 오류가 발생하기 때문에 아무 것도 실행하지 않음). display_errors가 켜져 있고 적절한 error_reporting 수준이 사용되도록 실제 서버 구성을 변경해야 합니다. php.ini에 액세스할 수 없는 경우 서버에 따라 .htaccess 또는 이와 유사한 것을 사용할 수 있습니다.

이 질문 은 추가 정보를 제공할 수 있습니다.


Michael Madsen

php.ini 내부 :

 display_errors = on

그런 다음 웹 서버를 다시 시작하십시오.


user1803477

모든 오류를 표시하려면 다음을 수행해야 합니다.

1. 브라우저에서 호출하는 PHP 스크립트(일반적으로 index.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

andre

.htaccess 파일에서 PHP 매개변수를 변경할 수 있습니다.

다음 줄을 추가할 수 있습니다.

 php_value display_errors 1

나는 당신과 같은 문제가 있었고이 솔루션으로 해결되었습니다.


Kalhua

"오류 보고" 또는 "오류 표시"에 대한 모든 설정이 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']; }

Frank Forte

이것은 작동합니다:

 <?php error_reporting(E_ALL); ini_set('display_errors', 1); ?>

Mahendra Jella

사용하다:

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

이것이 가장 좋은 작성 방법이지만 구문 오류는 빈 출력을 제공하므로 콘솔을 사용하여 구문 오류를 확인하십시오. PHP 코드를 디버그하는 가장 좋은 방법은 콘솔을 사용하는 것입니다. 다음을 실행하십시오.

 php -l phpfilename.php

Abhijit Jagtap

index.php 파일에서 이것을 설정하십시오:

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

Sumit Gupta

PHP 파일이 있는 폴더에 php.ini 라는 파일을 만듭니다.

php.ini 안에 다음 코드를 추가합니다(코드를 보여주는 간단한 오류가 발생합니다).

 display_errors = on display_startup_errors = on

NavyaKumar

현재 PHP 7을 실행하고 있으므로 여기에 제공된 답변은 더 이상 정확하지 않습니다. 여전히 괜찮은 것은 Frank Forte 가 PHP 7에 대해 이야기하는 것뿐입니다.

다른 한편으로는 try/catch로 오류를 잡으려고 하는 것보다 트릭을 사용할 수 있습니다. include를 사용하세요.

다음은 세 가지 코드입니다.

파일: tst1.php

 <?php error_reporting(E_ALL); ini_set('display_errors', 'On'); // Missing " and ; echo "Testing ?>

PHP 7에서 이것을 실행하면 아무 것도 표시되지 않습니다.

이제 다음을 시도하십시오.

파일: tst2.php

 <?php error_reporting(E_ALL); ini_set('display_errors', 'On'); include ("tst3.php"); ?>

파일: tst3.php

 <?php // Missing " and ; echo "Testing ?>

이제 오류 보고를 설정하는 tst2를 실행한 다음 tst3을 포함합니다. 당신은 볼 것입니다 :

구문 분석 오류: 구문 오류, 예기치 않은 파일 끝, 4행의 tst3.php에서 변수(T_VARIABLE) 또는 ${(T_DOLLAR_OPEN_CURLY_BRACES) 또는 {$(T_CURLY_OPEN)이 필요합니다.


Peter

위의 모든 답변을 따랐음에도 불구하고(또는 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 { ... }

jxmallett

나는 보통 일반 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 = 'Production URL'; /* https://google.com */ error_reporting(0); /* Mechanism to log errors */ break; default: exit('The application environment is not set correctly.'); } }

Channaveer Hakari

php.ini 또는 .htaccess 를 통해 설정을 수정할 수 없는 상황에 처했다면 PHP 스크립트에 구문 분석 오류가 포함되어 있을 때 오류가 표시되지 않는 것입니다. 그런 다음 다음과 같이 명령줄에서 파일을 linting하도록 해결해야 합니다.

 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."; }

chiborg

아래와 같이 할 수 있습니다.

기본 색인 파일에서 아래 매개변수를 설정하십시오.

 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);

자세한 내용은 여기를 확인하십시오.


Binit Ghetiya

추가 디버그 정보를 제공할 수 있는 사용자 지정 오류 처리기를 추가할 수 있습니다. 또한 이메일을 통해 정보를 보내도록 설정할 수 있습니다.

 function ERR_HANDLER($errno, $errstr, $errfile, $errline){ $msg = "<b>Something 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");

lintabá

맨 위에 있는 이 코드는 다음과 같이 작동해야 합니다.

 error_reporting(E_ALL);

그러나 파일에서 전화의 코드를 편집해 보십시오.

 error_reporting =on

Joel Wembo

빠른 디버깅인 경우 사용할 수 있는 최고의/쉬운/빠른 솔루션은 예외를 잡는 것으로 코드를 둘러싸는 것입니다. 그것이 내가 생산에서 무언가를 빠르게 확인하고 싶을 때 하는 일입니다.

 try { // Page code } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; }

Xakiru

 <?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를 활성화할 수 있습니다.


pardeep

그냥 써:

 error_reporting(-1);

jewelhuq

php.ini 파일을 변경하고 다음을 추가하여 이 작업을 수행할 수 있습니다.

 display_errors = on display_startup_errors = on

또는 이것이 항상 나를 위해 작동하므로 다음 코드를 사용할 수도 있습니다.

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

Muhammad Adeel Malik

Xdebug가 설치되어 있으면 다음을 설정하여 모든 설정을 무시할 수 있습니다.

 xdebug.force_display_errors = 1; xdebug.force_error_reporting = -1;

force_display_errors

유형: int, 기본값: 0, Xdebug에 도입됨 >= 2.3 이 설정이 1로 설정되면 PHP의 display_errors 설정에 관계없이 오류가 항상 표시됩니다.

force_error_reporting

유형: int, 기본값: 0, Xdebug에 도입됨 >= 2.3 이 설정은 error_reporting과 같은 비트 마스크입니다. 이 비트마스크는 어떤 오류가 표시되어야 하는지 결정하기 위해 error_reporting으로 표시되는 비트마스크와 논리적으로 OR됩니다. 이 설정은 php.ini에서만 만들 수 있으며 응용 프로그램이 ini_set()을 사용하여 수행하는 작업에 관계없이 특정 오류가 표시되지 않도록 할 수 있습니다.


Peter Haberkorn

다음 코드를 사용할 수 있습니다.

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

user8031209

E_NOTICE를 제외한 모든 오류 보고

 error_reporting(E_ALL & ~E_NOTICE);

모든 PHP 오류 표시

 error_reporting(E_ALL); or ini_set('error_reporting', E_ALL);

모든 오류 보고 끄기

 error_reporting(0);

Shaikh Nadeem

명령줄에 있는 경우 -ddisplay_errors=1 phpphp.ini 의 설정을 재정의할 수 있습니다.

 php -ddisplay_errors=1 script.php

gvlasov

간단한 방법을 통해 디스플레이에 PHP 오류를 표시할 수 있습니다. 첫째, 이것을 php.ini 파일의 코드 아래에 넣으십시오.

 display_errors = on;

(만약 당신이 php.ini에 접근할 수 없다면, 이 줄을 .htaccess에 넣어도 괜찮을 것입니다):

 php_flag display_errors 1

또는 index.php 파일에서 다음 코드를 사용할 수도 있습니다.

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

Devsaiful

Unix CLI 에서는 오류만 파일 로 리디렉션하는 것이 매우 실용적입니다.

 ./script 2> errors.log

스크립트에서 var_dump() 또는 이와 동등한 것을 평소와 같이 사용하십시오(STDOUT 및 STDERR 모두 출력을 수신함). 그러나 로그 파일에만 작성하려면 다음을 수행 하십시오.

 fwrite(STDERR, "Debug infos\n"); // Write in errors.log^

그런 다음 다른 셸에서 라이브 변경 사항에 대해 다음을 수행합니다.

 tail -f errors.log

또는 단순히

 watch cat errors.log

NVRM

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

이것을 페이지 상단에 넣으십시오.


Kwed

코드 상단에 이것을 입력하십시오.

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

그리고 php.ini 파일에 다음을 삽입하십시오.

 display_errors = on

작동해야 합니다.


ropehapi

출처 : http:www.stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display

반응형