[php] PHP에서 유용한 오류 메시지를 얻는 방법은 무엇입니까?

종종 PHP 스크립트를 실행하고 빈 화면을 다시 보게됩니다. 오류 메시지가 없습니다. 빈 화면입니다. 원인은 단순한 구문 오류 (잘못된 대괄호, 세미콜론 누락) 또는 함수 호출 실패 또는 기타 다른 원인 일 수 있습니다.

무엇이 잘못되었는지 알아내는 것은 매우 어렵습니다. 코드를 주석 처리하고, 어디서나 “echo”문장을 입력하는 등 문제를 좁히려 고합니다. 그러나 더 좋은 방법이 있어야합니다.

Java처럼 PHP가 유용한 오류 메시지를 생성하도록하는 방법이 있습니까?



답변

구문 오류의 경우 php.ini에서 오류 표시를 활성화해야합니다. “고객”이 오류 메시지를보고 싶지 않기 때문에 기본적으로이 기능은 해제되어 있습니다. 이 페이지를 확인 2 개 지침에 대한 자세한 내용은 PHP 문서에서 : error_reportingdisplay_errors. 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/


답변

다음은 모든 오류를 활성화합니다.

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

다음 링크도 참조하십시오


답변

다음 코드는 모든 오류를 표시해야합니다.

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

이 코드로 빈 페이지를 생성하는 유일한 방법은 종료 처리기에 오류가있는 경우입니다. 나는 그것을 테스트하지 않고 내 자신의 cms에서 이것을 복사하여 붙여 넣었지만 작동한다고 확신합니다.


답변

오류 및 경고는 보통의 표시 ....\logs\php_error.log또는 ....\logs\apache_error.logphp.ini 파일 설정에 따라.

또한 유용한 오류는 종종 브라우저로 전송되지만 유효한 HTML이 아니기 때문에 표시되지 않습니다.

따라서 "tail -f“로그 파일과 빈 화면이 표시되면 IE”view “->”source “메뉴 옵션을 사용하여 원시 출력을보십시오.


답변

디버깅하려는 파일에 다음 줄을 포함시킬 수 있습니다.

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

이것은 php.ini의 기본 설정보다 우선합니다. PHP는 오류를 로그에보고합니다.


답변

PHP 설정

php.ini의 두 항목 은 오류 출력을 나타냅니다.

  1. display_errors
  2. error_reporting

에서 생산 , display_errors일반적으로 설정됩니다 Off(생산 현장에서 에러 표시가 일반적으로 바람직하지 않기 때문에, 좋은 일 어느!).

그러나 개발 에서는 On오류가 표시되도록 로 설정해야합니다 . 확인하세요 !

error_reporting(PHP 5.3부터)는 기본적으로 설정되어 있습니다 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED(즉, 공지, 엄격한 표준 및 사용 중단 통지를 제외한 모든 것이 표시됨). 확실하지 않은 경우 모든 오류 E_ALL를 표시 하도록 설정하십시오 . 검사 !

우와 우와! 확인 안함! 내 php.ini를 변경할 수 없습니다!

부끄러운 일입니다. 일반적으로 공유 호스트는 php.ini 파일을 변경할 수 없으므로 해당 옵션을 사용할 수 없습니다. 그러나 두려워하지 마십시오! 우리는 다른 옵션이 있습니다 !

런타임 구성

원하는 스크립트에서 런타임에 php.ini 항목을 변경할 수 있습니다! 즉, 스크립트가 실행될 때 실행됩니다! 단!

error_reporting(E_ALL);
ini_set("display_errors", "On");

이 두 줄은 위와 같이 php.ini 항목을 변경하는 것과 동일한 효과를 나타냅니다! 대박!

여전히 빈 페이지 / 500 오류가 발생합니다!

그것은 스크립트가 실행되지 않았 음을 의미합니다! 일반적으로 구문 오류가있을 때 발생합니다!

구문 오류로 인해 스크립트가 런타임에 도달하지도 않습니다. 컴파일 타임에 실패합니다 . 즉, 변경하지 않은 경우 오류 표시를 허용하지 않을 수있는 php.ini의 값을 사용합니다.

오류 로그

또한 PHP는 기본적으로 오류를 기록합니다. 공유 호스팅에서는 전용 폴더 또는 문제가되는 스크립트와 같은 폴더에있을 수 있습니다.

php.ini에 액세스 할 수 있으면 error_log항목 아래에서 찾을 수 있습니다 .


답변

xdebug ” 라는 유용한 확장 프로그램 이있어 보고서를 훨씬 더 멋지게 만들 수 있습니다.