Answers:
将其放在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上的“死亡白屏”(完全空白页)资源将带您逐步执行步骤,以查看错误消息以及导致它们的常见问题。
“不可见”错误
如果错误报告功能已关闭,则可能会收到致命错误,但看不到它。在生产站点上,通常会关闭错误报告。如果真是这样,并且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);
看一下Apache错误日志,它位于Ubuntu中,/var/log/apache2/error.log
因此您可以执行以下操作:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
我发现可以通过运行整个站点来找到WSOD错误的简便方法drush
,例如:
drush rs
之后,访问位于给定新地址(例如127.0.0.1:8080
)的站点,然后尝试重现该问题,您将在终端屏幕上看到所有错误。无需重新配置PHP,尤其是在display_errors
失败的情况下(例如MAMP)。
我通过使用调试器发现了其他棘手的方法,例如:
OS X:
sudo dtruss -fn httpd 2>&1 | grep -i error
Linux:
sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error
注意:如果您使用上述方法,请更改httpd
为。php
drush rs
或安装XDebug
PHP扩展并生成跟踪文件(xdebug.auto_trace=1
)。
我只是将变量$ update_free_access的值从FALSE更改为TRUE,并执行了update.php文件。它解决了我的问题。
您可以修改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>';
}
错误消息将显示导致错误的文件和代码行。