답변:
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);
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);
다음을 통해 전체 사이트를 실행하여 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
로 변경하십시오 .php
drush rs
또는 XDebug
PHP 확장을 설치 하고 추적 파일 ( xdebug.auto_trace=1
)을 생성하십시오 .
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>';
}
오류 메시지는 오류를 일으킨 파일과 코드 줄을 보여줍니다.