调试Drupal的白色死亡屏幕?

时间:2011-05-17 03:08:19

标签: php apache debugging drupal-6 wsod

我有一个以前在我的localhost上完美运行的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。

任何人都知道为什么这只是为了死?这真的是一个记忆问题吗?我还能做些什么来向我展示错误?启用错误记录后,我仍然看不到任何内容。

更新

如果删除文件夹,网站将在我的本地计算机上运行。因此,出于某种原因,当它必须访问files文件夹中的文件时,它会耗尽内存。为什么?或者更好的是,什么可能导致过度使用内存?

9 个答案:

答案 0 :(得分:13)

Drupal手册中有一整页专门用于调试“White Screen of Death”。简而言之,通过在index.php文件的顶部添加以下内容来启用错误报告:

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

...并检查您已经开始做的日志。这两个步骤往往会在大多数情况下查明问题。如果这不能指向您的解决方案,请继续阅读手册页面,获取更多提示。

如果我不得不采取疯狂的猜测,我会说你的情况可能是一个内存不足的错误。

答案 1 :(得分:4)

我知道这可能会迟到,但它对我很有帮助。大多数时候模块会导致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;
}

我在上面的代码中添加了那两个打印语句,然后刷新页面,没有到达“Finish loading $ module”语句的模块是有问题的那个...它在我的案例中开发了

找到模块后,您可以进入系统表并查找该模块,设置它的status = 0和bootstrap = 0或运行查询:

UPDATE system SET status = 0, bootstrap = 0 WHERE name = 'module_name' LIMIT 1

参考:Debugging Drupal White Screen of Death (WSOD)

答案 2 :(得分:1)

检查PHP的错误报告设置。您可能需要启用错误报告。

这可能有所帮助:http://drupal.org/node/158043

答案 3 :(得分:1)

主题('page')渲染的内容为空,这肯定会给你一个WOD。

使用this来帮助您,它会发现一些与WOD相关的常见问题。

还尝试重建权限,最好的方法是使用drush并输入:

drush php-eval 'node_access_rebuild();'

还可以使用drush来查看当前安装的模块,

drush sm

禁用所有自定义模块,然后搜索。

drush disable <modulename>

当你匆忙时,清除缓存:

drush cc

如果你认为cron是问题,我之前遇到过编写错误的cron钩子的问题,以防万一是你的问题,supercron将成为你的朋友。

你应该有足够的内存,除非你的某些模块的行为非常严重。

*更新疑难解答

如果在运行update.php时出现问题,请在文本编辑器中打开update.php并取消注释以下行:

ini_set('display_errors', FALSE);

有关其他一些wsod修复程序,请参阅this page。值得注意的是,如果您使用path-auto,那么该页面上提到的修复程序值得一看。

答案 4 :(得分:1)

我的建议是获取模块和主题文件夹的全部内容并将其下载到桌面。这些主题和模块仍然只是暂时禁用安装。如果您的网站回来,则很可能是模块或主题错误。也许有人错过了一个结尾括号'}'。如果您确定模块或主题不是问题,那么将它们放回文件夹中,不会有任何损失。尝试这个没有坏处,因为你不会失去任何东西。如果您发现它是一个模块问题,请将它们逐个放回到沿途刷新的文件夹中。站点白屏后,您发现了问题,对模块的更新可能有所帮助。

我总是首先尝试这个,因为drupal安装非常坚固,这是你必须担心的模块和主题。

与其他答案不同,这并不能确切地指出问题,但如果你像我一样懒,并且不想修改配置文件并打开错误那么这就是要走的路,或者至少从这里开始然后去当其他所有方法都失败时修改配置。

答案 5 :(得分:1)

假设它是Linux主机,如果您的主机运行suPHP或其他形式的suexec,则可能是权限问题。确保文件的所有权正确且访问模式正确。

您可能还有一个无效的.htaccess文件,尝试删除它只是为了测试它。

答案 6 :(得分:1)

在我的php.ini我修改了这些变量:

error_reporting = E_ALL & ~E_DEPRECATED
display_errors = On 
display_startup_errors = On

执行时:

sudo apachectl restart

在我的所有Drupal网站中摆脱这些错误。

答案 7 :(得分:0)

有一个WSOD,它不会告诉我出了什么问题。启用display_errors / display_startup_errors / error_reporting后,未显示任何错误消息。 PHP错误日志中没有任何内容。服务器错误日志中没有任何内容。只是一个WSOD并且去了数字。

我最终设法哄骗Drupal显示错误消息的方法是启用$update_free_access = FALSE;并导航到/update.php。这表明没有挂起的更新,但在数据库中列出了一大堆错误,这是导致混乱的数据导入的结果。

enter image description here

答案 8 :(得分:0)

检查主题目录(目录或文件)的内容。

marinelli主题中,缺少文件夹逻辑会导致这种问题。