调试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

上一篇: Debugging Drupal's White Screen of Death?

下一篇: No Errors with Errors turned ON