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


583

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

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

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




4
@ JuanStrauss, 그것은 과소 평가하고 있습니다. 그리고 당신은 때 마지막으로 오류를보고, 그것을 말한다 T_PAAMAYIM_NEKUDOTAYIM. 또는 "정수, 주어진 정수의 인스턴스 여야합니다" .
Pacerier

1
이에 대한 자습서 : code2real.blogspot.com/2015/06/…
Pupil

답변:


498

구문 오류의 경우 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/


25
2039는의 값입니다 E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE. 참조 docs.php.net/manual/en/errorfunc.constants.php
검보

.htaccess 파일의 옵션이 마음에 듭니다. 공용 웹 사이트에 속하지 않은 영역에서 디버깅하는 데 도움이됩니다. 이 팁에 감사드립니다!
jacekn 2016 년

1
로깅 오류를 파일에 추가하고 (찾아 보는 것이) 가장 좋은 해결책이라고 생각합니다. 페이지에 오류를 표시하는 것에 의존하지 마십시오. 오류를 일으킬 수 있습니다. 프로덕션 사이트에 대한 오류보고를 설정하는 것을 잊어 버릴 수 있습니다. 이는 나중에 문제를 일으킬 것입니다.
Ivan Yarych

455

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

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

다음 링크도 참조하십시오


28
.ini 파일 수준에서 이러한 변경을 수행하는 것이 가장 좋습니다. 스크립트 내에서 오류보고를 설정하는 것은 구문 오류나 컴파일 단계를 종료시키는 다른 치명적인 오류에 도움이되지 않으므로 쓸모가 없습니다. 스크립트는 실행을 시작하고보고 재정의에 도달하기 오래 전에 종료됩니다.
Marc B

당신은 실제로 맞습니다. 나는 당신의 자신의 서버로 이동하는 것을 보지 못했습니다.
Eljakim

6
phpinfo ()를 실행하여 올바른 php.ini 파일을 찾으십시오. 로드 된 구성 파일 행을 찾으십시오 .
borrible

1
컴파일 단계에서 발생하는 오류를 찾으려면 /var/log/apache2/error.log
csi

1
이 답변은 php7에서 두 번째 매개 변수 ini_set가 문자열 이기 때문에 엄격한 타이핑이 활성화되면 실패 합니다.
PeeHaa

175

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

<?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에서 이것을 복사하여 붙여 넣었지만 작동한다고 확신합니다.


4
해당 코드에서 빈 페이지가 나타납니다. "종료 처리기에 오류가 있습니다"란 무엇을 의미하며 문제를 해결하려면 어떻게해야합니까?
Paolo M

@PaoloM, 그는 ShutdownHandler위 의 함수에서 오류를 말하고 있습니다. 기본적으로 이것은 적절한 오류 처리 대신 스톱 갭 해킹입니다.
Pacerier

감사합니다. 유용했지만 E_NOTICE이 기능에서 오류를 어떻게 비활성화 할 수 있습니까?
MajAfy

이 적합한 솔루션이지만, 에러가 발생하면 (로그인 대신 사용자에게 반향 선호) ... 정보 discosure 조심
샘 제이슨 브 래덕

1
Symfony가 치명적인 오류를 올바르게 잡을 수 없을 때 이것을 사용하고 있습니다.
코일

61

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

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

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


13
안타깝게도 페이지 소스보기에는 아무것도 표시되지 않습니다.
Matthew Scharley

2
구문 분석 오류는 다른 설정에 관계없이 Apache 오류 로그에 표시되어야합니다. 서버를 제어 할 수 없다면 아파치 오류 로그를 얻는 것이 어려울 수 있지만 공급자와 대화하고 오류 로그를 표시하는 방법이 있습니다. 그 외에는 프로덕션 환경에 배포하기 전에 로컬 개발 서버의 구문 분석 오류에 대한 코드를 확인하는 것만 제안 할 수 있습니다. 또한 Eclipse의 PDT와 같은 유효성 검사 IDE가 큰 도움이 될 수 있습니다.
거스

5
이 문제로 돌아와서 최근에 로그에 오류가 발생하지 않고 서버에 xdebug를 설치할 때까지 자체적으로 나타나지 않는 스택 오버플로 문제가 발생했습니다. 가
Matthew Scharley

php.ini를 수정할 수 없다면 .htaccess 파일을 만드 php_flag display_errors 1십시오.
Tom

59

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

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

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


2
사실입니다. 이 경우 값은 ini에 직접 설정해야합니다. 순수한 개발 환경의 경우이 방법이 선호 될 수 있습니다.
Tomalak

53

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항목 아래에서 찾을 수 있습니다 .


30

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


2
실제로 이것은 매우 유용한 디버깅 도구입니다. 전체 스택 추적과 변수 덤프 및 모든 것이 포함 된 오류 메시지를 훨씬 더 장황하게 만듭니다.
hbw

2
예. 그런 다음 VimDebugger 플러그인과 같은 코드를 사용하여 코드를 단계별로 살펴보고 오류가 발생한 위치를 찾으십시오.
Sander Marechal

1
xdebug가있는 NetBeans. 너무 굉장합니다. 나는 PHP (보통 ASP.NET)를 처음 사용했고 이전에 echo 문을 발행했습니다.
일부 Canuck

30

나는 항상 PHP 스크립트의 맨 위에이 구문을 사용하고 있습니다.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off

3
죄송합니다. 이미 게시 된 다른 답변을 읽지 않은 경우 -1입니다. 이것은 이미 여러 번 언급했듯이 .htaccess에서 처리됩니다.
Matthew Scharley

12
일반적인 "무료 호스팅"은 .htaccess
FDisk를

27

빠른 실습 문제 해결을 위해 일반적으로 여기에 제안합니다.

error_reporting(~0); ini_set('display_errors', 1);

문제가 발생한 스크립트의 시작 부분에 배치해야합니다. 이것은 완벽하지는 않습니다. 완벽한 변형은 php.iniPHP에서 오류를 기록하여 구문 및 시작 오류를 포착한다는 것입니다.

여기에 설명 된 설정은 어떤 PHP 버전에 관계없이 엄격한 오류를 포함한 모든 오류,주의 사항 및 경고를 표시합니다.

고려해야 할 다음 사항 :

  • Xdebug를 설치 하고 IDE에서 원격 디버깅을 활성화하십시오.

또한보십시오 :


27

마지막 오류 또는 경고가 보이도록 후크를 등록 할 수 있습니다.

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

index.php의 시작 부분에이 코드를 추가하면 문제를 디버깅하는 데 도움이됩니다.


1
이 프로그램이 에러없이 그 웹 호스트에 붙어있어 사람들을 위해 순금하지만 제로 로그 액세스 할 수 있습니다
라파엘 메나 바레토

18

이것은로드 된 구성과 런타임 구성의 문제입니다.

컴파일 또는 구문 분석 단계에서 구문 오류 또는 구문 분석 오류가 발생한다는 것을 인식하는 것이 중요합니다. 즉, PHP가 코드를 실행할 기회를 갖기 전에 PHP가 종료됩니다. 따라서 display_errors런타임 동안 PHP의 구성을 수정하는 경우 ( ini_set코드에 사용에서 런타임 구성 파일 인 .htaccess 사용 에 이르기까지 ) 기본 로드 된 구성 설정 만 포함됩니다. 만 사용됩니다.

개발시 항상 WSOD를 피하는 방법

WSOD를 피하기 위해 로드 된 구성 파일display_errors켜져 있고 error_reporting설정되어 있는지 확인하려고합니다 -1( 실행중인 PHP 버전에 관계없이 모든 비트가 설정되므로 E_ALL과 동일 함) ). E_ALL의 상수 값을 하드 코딩하지 마십시오.이 값은 다른 버전의 PHP간에 변경 될 수 있습니다.

로드 구성은로드 중입니다 php.ini파일 또는 apache.conf또는 httpd.conf또는 가상 호스트 파일. 이러한 파일은 시작 단계 (예 : 아파치 httpd 또는 php-fpm을 처음 시작할 때) 동안 한 번만 읽고 런타임 구성 변경으로 재정의합니다. 확인display_errors = 1error_reporting = -1당신이 볼 수 없을 것입니다 귀하의로드 된 구성 파일 보장하지만에 WSOD을 에 관계없이 같은 런타임이 변경되기 전에 발생 문법이나 구문 분석 오류 ini_set('display_errors', 1);또는 error_reporting(E_ALL);일어날 수 있습니다.

(php.ini)로드 구성 파일을 찾는 방법

로드 된 구성 파일을 찾으려면 다음 코드만으로 새 PHP 파일을 만드십시오.

<?php
phpinfo();

그런 다음 브라우저를 가리키고 로드 된 구성 파일을 보고 추가 .ini 파일을 일반적으로 맨 위에 있으며 phpinfo()로드 된 모든 구성 파일의 절대 경로가 포함됩니다.

당신이 볼 경우 (none)대신 파일로, 그 의미는 당신의 php.ini 파일이없는 구성 파일 (php.ini 파일) 경로를 . 따라서 여기에 PHP와 함께 번들로 제공되는 php.ini 파일을 다운로드하여 php.ini와 같이 구성 파일 경로에 복사 한 다음 PHP 사용자가 해당 파일에서 읽을 수있는 충분한 권한이 있는지 확인하십시오. httpd 또는 php-fpm을 다시 시작하여로드해야합니다.이 파일은 PHP 소스와 함께 제공되는 개발 php.ini 파일입니다. 생산에 사용하지 마십시오!


프로덕션에서이 작업을 수행하지 마십시오

이것이 실제로 개발에서 WSOD를 피하는 가장 좋은 방법입니다. PHP 스크립트의 상단 ini_set('display_errors', 1);또는 error_reporting(E_ALL);상단에 또는 여기에서와 같이 .htaccess를 사용 한다고 제안하는 사람 은로드 된 구성 파일이있는 경우 구문 또는 구문 분석 오류가 발생할 때 WSOD를 피하는 데 도움이되지 않습니다 한 display_errors꺼져.

많은 사람들 (및 PHP의 주식 설치)은 display_errors기본적으로 꺼져 있는 production-ini 파일을 사용하므로 일반적으로 여기에서 경험 한 것과 같은 좌절감을 초래합니다. PHP는 시작할 때 이미 꺼져 있기 때문에 구문 또는 구문 분석 오류가 발생하여 출력 할 내용이 없습니다. 당신은 당신의 기대 ini_set('display_errors',1);당신의 PHP 스크립트의 상단에이 것을 방지해야하지만, 런타임에 도달하지 않았을 것이기 때문에 PHP가 코드를 구문 분석 할 수 없습니다 경우는 문제가되지 않습니다.


17

당신이 매우 시원하다면, 당신은 시도 할 수 있습니다 :

$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 %의 오류에 대해서는 문제가되지 않습니다.


2
로컬 환경과 프로덕션 환경을 구별하는 경우 프로덕션 코드 일 수있는 코드가 아닌 php.ini에서 오류를 전체적으로 활성화하거나 비활성화해야합니다. 프로덕션 환경에서 프로덕션 웹 사이트를 디버깅해야하고 오류 만 볼 수있게 $_SERVER['REMOTE_HOST']하려면 클라이언트가 사용자인지 확인하십시오.
Jaap Haagmans

17

페이지 상단에서 매개 변수를 선택하십시오.

error_reporting(E_ERROR | E_WARNING | E_PARSE);

16

이것을 유지하고 간결하게 만들기 위해 php.ini 파일을 편집 할 수 있습니다. 일반적으로 /etc/php.ini또는에 저장 /etc/php/php.ini되지만 php.ini호스팅 제공 업체의 설정 지침에 따라 더 많은 로컬이 이를 덮어 쓸 수 있습니다. phpinfo()파일 확인Loaded Configuration File 하나가 마지막으로로드되는 어떤 확인하기 위해, 상단에.

해당 파일에서 display_errors를 검색하십시오. 3 개의 인스턴스 만 있어야하며 그 중 2 개는 주석 처리됩니다.

주석 처리되지 않은 행을 다음과 같이 변경하십시오.

display_errors = stdout

16

도움이된다면 Dunno, 그러나 여기 PHP 프로젝트를위한 표준 구성 파일이 있습니다. 내 서버에서도 아파치 구성에 너무 의존하지 않는 경향이 있습니다.

나는 사라지는 오류 문제가 없으므로 여기에 뭔가가 당신에게 아이디어를 줄 것입니다.

APPLICATON_LIVE를 표시하도록 수정되었습니다.

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}

@Eli, 이것은 페이지 요청마다 런타임 오버 헤드가 있습니다.
Pacerier

디버그 설정을 간과하지만 개념은 서버가 구성되어 있다는 것입니다. 개발 중일 때 배포 또는 유지 관리하는 동안 좋습니다
justnajm

15
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

또한 xdebug를 사용 하여 자세한 정보를 얻을 수 있습니다 .


Xdebug는 php.ini에서 가능합니다
jewelhuq

15

PHP에서 오류 및 예외를 더 잘 시각화하려면 Nette Tracy 를 권장합니다 .

Nette Tracy 스크린 샷


3
Tracy는 원래 게시물에 설명 된 것과 같은 상황에서 출력을 제공하기 위해 모든 디스플레이 오류 및 오류보고 옵션의 올바른 설정을 처리합니다. 따라서이 도구는 "어떻게 나 좋은 PHP 디버깅 팁, 도구 및 기술을 추천 할 수 있습니까? ".
Jan Drábek



9

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

7

PHP에서 유용한 오류를 얻는 데 필요한 두 가지 주요 라인은 다음과 같습니다.

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

다른 기고자가 지적한 바와 같이 보안상의 이유로 기본적으로 꺼져 있습니다. 유용한 팁-사이트를 설정할 때 로컬 및 개발 환경에서 이러한 오류가 기본적으로 설정되도록 다른 환경에 맞게 전환하는 것이 편리합니다. 이것은 다음 코드 (이상적으로 index.php 또는 구성 파일에 있으므로 처음부터 활성화 됨)를 사용하여 얻을 수 있습니다.

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


6

php.ini를 열고 다음과 같이 설정되어 있는지 확인하십시오.

display_errors = On

서버를 다시 시작하십시오.


6

PHPStorm을 코드 편집기로 사용해 볼 수도 있습니다. 편집기에 입력하는 즉시 많은 PHP 및 기타 구문 오류가 발생합니다.


6

우분투 사용자 인 경우 터미널로 이동 하여이 명령을 실행하십시오.

sudo tail -50f /var/log/apache2/error.log

최근 50 개의 오류가 표시됩니다. error.log모든 오류를 기록하는 apache2에 대한 오류 파일 이 있습니다.


5

전체 오류보고를 켜려면이를 스크립트에 추가하십시오.

error_reporting(E_ALL);

이로 인해 최소한의 경고 만 표시됩니다. 그리고 경우에 따라 :

ini_set('display_errors', '1');

오류를 강제로 표시합니다. 프로덕션 서버에서는이 기능을 해제해야하지만 개발 중에는 안됩니다.


Tomalak의 답변과 마찬가지로 구문 오류에는 작동하지 않습니다.
Darryl Hein

5

“오류”는 개발자가 실수를 알고 시스템이 완벽하게 작동하도록 오류를 해결하는 데 가장 유용한 것입니다.

PHP는 개발자가 코드 부분에서 오류가 발생하는 이유와 위치를 알 수있는 더 나은 방법을 제공하므로 이러한 오류를 알면 개발자가 여러 가지 방법으로 코드를 개선 할 수 있습니다.

모든 오류 메시지를 얻기 위해 스크립트 상단에 다음 두 줄을 쓰는 가장 좋은 방법 :

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

IDE에서 xdebug 와 같은 디버거 도구를 사용하는 또 다른 방법 입니다.


4

전체 오류보고 (알림 및 엄격한 메시지 포함)를 활성화 할 수 있습니다. 어떤 사람들은 이것이 너무 장황하다고 생각하지만 시도해 볼 가치가 있습니다. 설정 error_reportingE_ALL | E_STRICTphp.ini 파일에.

error_reporting = E_ALL | E_STRICT

E_STRICT 더 이상 사용되지 않는 기능에 대해 알리고 특정 작업을 수행하는 가장 좋은 방법에 대한 권장 사항을 제공합니다.

통지를 원하지 않지만 다른 메시지 유형이 도움이되는 경우 통지를 제외하십시오.

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

또한 display_errorsphp.ini에서 활성화되어 있는지 확인하십시오 . PHP 버전이 5.2.4보다 오래된 경우 다음과 같이 설정하십시오 On.

display_errors = "On"

버전이 5.2.4 이상인 경우 다음을 사용하십시오.

display_errors = "stderr"

4

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

3

심지어와 파일 nginx를 사용하고 흰색 화면을 가지고 사람들을 위해 <?php echo 123;. 내 경우에는 nginx 구성 파일에 PHP에 필요한 옵션이 없습니다.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

이 옵션은 fastcgi_params 파일에 없었으므로 PHP가 작동하지 않고 로그에 오류가 없었습니다.


나는 같은 문제가 있었고 Nginx 기본 구성 파일로 인해 해당 줄이 누락되었습니다.
Salem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.