흰색 사망 화면이 표시 될 때 오류 메시지를 보는 방법은 무엇입니까?


25

작업중인 사이트에 흰색 화면이 표시 될 때 오류 메시지를 어떻게 볼 수 있습니까?

답변:


33

settings.php의 맨 아래에 이것을 넣으십시오 :

error_reporting(-1);  // Have PHP complain about absolutely everything 
$conf['error_level'] = 2;  // Show all messages on your screen, 2 = ERROR_REPORTING_DISPLAY_ALL.
ini_set('display_errors', TRUE);  // These lines just give you content on WSOD pages.
ini_set('display_startup_errors', TRUE);

라이브 사이트에 /var/log/apache2/error.log를 선호하지만 개발 사이트에 좋습니다. 그래도 작동합니다. :)
Citricguy

17

drupal.org 의 White Screen of Death (완전히 빈 페이지) 리소스가 오류 메시지와 그 원인을 일으키는 일반적인 문제를 확인하는 단계를 안내합니다.

"보이지 않는"오류

오류보고가 꺼져 있으면 치명적인 오류가 발생하지만 보이지 않습니다. 프로덕션 사이트에서는 일반적으로 오류보고가 해제되어 있습니다. 이 경우 PHP에서 복구 할 수없는 오류가 발생하면 오류나 내용이 표시되지 않으므로 완전히 빈 페이지가 표시됩니다.

당신이 할 수있는 일은 PHP 오류보고를 켜서 페이지 자체에 메시지를 표시하거나 서버에서 로그 파일을 확인하여 오류를 찾는 것입니다. 이 두 가지를 수행하는 방법은 아래에 설명되어 있습니다.

오류보고 활성화

상업용 호스트 및 프로덕션 사이트에서 꺼져있을 수 있지만 (이유로 인해 사용자에게 오류가 표시되지 않음) 이러한 오류는 문제 해결을위한 가장 좋은 도구 중 하나입니다. 오류보고를 활성화하려면 첫 번째 열기 PHP 태그 바로 다음에 index.php 파일 (일반적으로 루트 디렉토리에 있음)을 임시로 편집하여 (실제 파일 정보를 편집하지 마십시오!)

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

이제 화면에서 직접 발생하는 모든 오류를 볼 수 있습니다. 메모리 문제는 여전히 표시되지 않지만 제거 과정의 첫 번째 단계입니다.

다중 사이트 설정을 사용 중이고 한 사이트에 대해서만 오류가 표시되도록하려면 다음과 같이 먼저 호스트 이름을 확인하십시오.

if ($_SERVER['HTTP_HOST']==='some.domain.name.here') {
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
}

update.php를 실행하는 동안 문제가 발생하면 텍스트 편집기에서 update.php를 열고 다음 줄의 주석을 해제하십시오.

ini_set('display_errors', FALSE);

10

우분투의 Apache 오류 로그를 살펴보면 다음과 /var/log/apache2/error.log같이 할 수 있습니다.

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

2
sudo tail -f /var/log/apache2/error.log
Citricguy

1
각각에 대한 사용자 정의 로그 파일이있는 많은 호스트가있는 경우 다음을 사용하십시오. sudo tail -f /var/log/apache2/*.log 다음으로 wsod로 끝나는 페이지를 새로 고칩니다
izus

2

다음을 통해 전체 사이트를 실행하여 WSOD 오류를 추적하는 쉬운 방법을 찾았습니다 drush.

drush rs

그런 다음 지정된 새 주소 (예 :)로 사이트에 액세스 한 127.0.0.1:8080다음 문제를 재현 해보십시오. 그러면 터미널 화면에 모든 오류가 표시됩니다. 특히 display_errors실패한 경우 (예 : MAMP) PHP를 재구성 할 필요가 없습니다 .


디버거를 사용하여 찾은 다른 까다로운 방법, 예 :

  • OS X :

    sudo dtruss -fn httpd 2>&1 | grep -i error
  • 리눅스 :

    sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error

    참고 : 위와 같이 사용중인 경우 httpd로 변경하십시오 .phpdrush rs

또는 XDebugPHP 확장을 설치 하고 추적 파일 ( xdebug.auto_trace=1)을 생성하십시오 .


1
당신은 생명의 은인입니다. 변하지 않는 PHP 설정 중 넌센스가 나에게 도움이되지는 않았지만 이것은 속임수였습니다!
Greg Somers 2016 년

1

drush를 사용하는 경우 drush-ws 명령을 사용하여 오류 메시지를 볼 수 있습니다.


0

방금 변수 $ update_free_access 값을 FALSE에서 TRUE로 변경하고 update.php 파일을 실행했습니다. 내 문제가 해결되었습니다.


0

index.php를 수정하고 try / catch로 코드를 마무리 할 수 ​​있습니다. 이처럼 :

try {
    define('DRUPAL_ROOT', getcwd());
    require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
    menu_execute_active_handler();
} catch (Error $t) {
    error_log('Error at Line:' . $t->getLine() . ' File: ' . $t->getFile() . ' Message:' . $t->getMessage() );
    print '<div>Message: ' . $t->getMessage() . '</div>';
    print '<div>File:' . $t->getFile() . '</div>';
    print '<div>Line:' . $t->getLine() . '</div>';
}

오류 메시지는 오류를 일으킨 파일과 코드 줄을 보여줍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.