복붙노트

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

PHP

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

PHP ini 파일을 검사하고 표시 오류가 설정되어 있으며 오류보고는 E_ALL입니다. Apache 웹 서버를 다시 시작했습니다.

심지어 스크립트의 맨 위에이 줄을 넣었고 간단한 구문 분석 오류도 잡히지 않았습니다. 예를 들어 변수를 "$"로 선언하고 문장을 닫지 않습니다 ";". 그러나 모든 스크립트는이 오류에 대해 빈 페이지를 표시하지만 실제로 브라우저 출력에서 ​​오류를보고 싶습니다.

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

남은 일은 무엇입니까?

해결법

  1. ==============================

    1.

    이것은 항상 나를 위해 작동합니다 :

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

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

    display_errors = on
    
  2. ==============================

    2.

    실제로 아무것도 실행하기 전에 파일을 구문 분석하기 때문에 런타임에 오류 출력을 사용할 때 구문 분석 오류를 포착 할 수 없습니다.이 과정에서 오류가 발생하기 때문에 아무 것도 실행하지 않습니다. display_errors가 켜져 있고 적절한 error_reporting 수준이 사용되도록 실제 서버 구성을 변경해야합니다. php.ini에 접근 할 수 없다면, 서버에 따라 .htaccess 또는 유사한 것을 사용할 수 있습니다.

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

  3. ==============================

    3.

    php.ini 파일 내부 :

    display_errors = on
    

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

  4. ==============================

    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. ==============================

    5.

    일부 웹 호스팅 공급자는 .htaccess 파일에서 PHP 매개 변수를 변경할 수 있도록합니다.

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

    php_value display_errors 1
    

    나는 당신과 같은 문제를 가지고 있었고이 해결책은 그것을 고쳤습니다.

  6. ==============================

    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. ==============================

    7.

    이것은 작동 할 것이다 :

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

    8.

    용도:

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

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

    php -l phpfilename.php
    
  9. ==============================

    9.

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

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    
  10. ==============================

    10.

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

    php.ini 파일에 다음 코드를 추가하십시오 (코드를 보여주는 간단한 오류를 나타냅니다).

    display_errors = on
    
    display_startup_errors = on
    
  11. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    19.

    빠른 디버깅이라면 사용할 수있는 최상 / 쉽고 빠른 솔루션은 예외를 포착하여 코드를 둘러싸는 것입니다. 그것이 내가 생산에서 빠른 것을 체크하고 싶을 때 내가하고있는 일이다.

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

    이게 도움이 되길 바란다.

  20. ==============================

    20.

    맨 위에있는이 코드는 error_reporting (E_ALL);

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

    error_reporting = on

  21. ==============================

    21.

    그냥 써:

    error_reporting(-1);
    
  22. ==============================

    22.

    그것이 내가 배운 것입니다. PHP.INI 파일에서

    error_reporting = E_ALL
    display_errors = On
    
  23. ==============================

    23.

    xdebug가 설치되어있는 경우 다음을 설정하여 모든 설정을 무시할 수 있습니다.

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

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

  25. from https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display by cc-by-sa and MIT lisence