调试Drupal的死亡白屏?
我有一个以前在我的本地主机上完美工作的Drupal安装。 但是,现在,在我的电脑格式化后,它只显示一个空白屏幕(完全白色)。
所以我的问题是,如果我甚至无法登录服务器,我怎么能看到事情出错了?
我能找到的唯一错误是(来自Apache错误日志):
[Tue May 17 05:05:04 2011] [notice] Parent: child process exited with status 255 -- Restarting.
[Tue May 17 05:05:04 2011] [notice] Digest: generating secret for digest authentication ...
[Tue May 17 05:05:04 2011] [notice] Digest: done
[Tue May 17 05:05:07 2011] [notice] Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 configured -- resuming normal operations
[Tue May 17 05:05:07 2011] [notice] Server built: Dec 10 2008 00:10:06
[Tue May 17 05:05:07 2011] [notice] Parent: Created child process 6992
看门狗中没有错误...
我使用Xamp 1.7.1(PHP 5.2)和Drupal 6。
我还需要提到的是,一旦我尝试并在本地机器上加载网站,apache也会崩溃! 我加了这个:
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
它仍然只是显示死亡的屏幕? 我在哪里可以看到错误?
我也在apache access.log中发现了这个:
127.0.0.1 - - [17/May/2011:05:22:14 +0200] "GET /greekmerchant/src/ HTTP/1.1" 200 3
127.0.0.1 - - [17/May/2011:05:25:45 +0200] "GET /greekmerchant/src/update.php HTTP/1.1" 302 -
127.0.0.1 - - [17/May/2011:05:25:46 +0200] "GET /greekmerchant/src/update.php?op=info HTTP/1.1" 200 -
尝试访问update.php后... 它也只是进入白色屏幕。
我在我的sql配置文件中有这个:
[mysqld]
port= 3306
socket= "C:/xampp/mysql/mysql.sock"
basedir="C:/xampp/mysql"
tmpdir="C:/xampp/tmp"
datadir="C:/xampp/mysql/data"
skip-locking
key_buffer = 16M
max_allowed_packet = 128M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log_error="mysql_error.log"
和...
[mysqldump]
quick
max_allowed_packet = 128M
另外,我的PHP内存设置为1024MB。
任何人都知道为什么这只是死亡? 这真的是一个记忆问题吗? 我还能做些什么来获取向我显示的错误? 即使启用错误记录,我仍然看不到任何东西。
更新:
如果我删除文件夹,该网站将在我的本地机器上运行。 所以,出于某种原因,当它必须访问文件夹中的文件时,它的内存不足。 为什么? 或者更好的是,什么可能导致这种过度使用内存?
Drupal手册中有一整页专门用于调试“白色死亡屏幕”。 简而言之,通过在index.php文件的顶部添加以下内容来启用错误报告:
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
...并检查你已经开始做的日志。 大部分时间这两个步骤倾向于查明问题。 如果这并不能帮助您找到解决方案,请继续阅读手册页面,了解更多提示。
如果我必须大胆猜测,我会说你的情况可能是一个内存不足的错误。
我知道这可能会很晚,但它对我有帮助。 大多数时候一个模块会导致WSOD,我不能仅仅禁用模块来测试它是什么,因为我可能在这个过程中丢失了数据。 我所做的是在module.inc中编辑这个函数
function module_invoke_all($hook) {
$args = func_get_args();
// Remove $hook from the arguments.
unset($args[0]);
$return = array();
foreach (module_implements($hook) as $module) {
print "Starting loading $module <br />";
$function = $module . '_' . $hook;
if (function_exists($function)) {
$result = call_user_func_array($function, $args);
if (isset($result) && is_array($result)) {
$return = array_merge_recursive($return, $result);
}
elseif (isset($result)) {
$return[] = $result;
}
}
print "Finished loading $module <br />";
}
return $return;
}
我在上面的代码中添加了这两个打印语句,然后刷新页面,没有达到“完成加载$模块”语句的模块是有问题的模块......这是我的情况。
找到模块后,可以进入系统表并查找该模块,将其设置为status = 0并且bootstrap = 0或运行查询:
UPDATE system SET status = 0, bootstrap = 0 WHERE name = 'module_name' LIMIT 1
参考:调试Drupal白色死亡屏幕(WSOD)
检查您的PHP错误报告设置。 您可能需要启用错误报告。
这可能有助于:http://drupal.org/node/158043
链接地址: http://www.djcxy.com/p/69185.html