【问题标题】:Drupal White Screen of Death - No Errors with Errors turned ONDrupal 白屏死机 - 打开错误时没有错误
【发布时间】:2011-07-13 15:47:39
【问题描述】:

我在 Drupal 中打开了所有错误 (error_reporting(-1)),但由于某种原因,大多数错误不会出现在日志或屏幕上。我可以通过简单地将函数名称更改为其他名称来复制问题,并且我希望看到函数不存在错误,但我只是得到一个白屏。我已经尝试在 Drupal 框架之外复制它,但我不能 - 所以它让我相信这不是我的 PHP 设置(Zend Server/Apache2/PHP/Windows),而是在 Drupal 的某个地方......

有什么想法吗?

【问题讨论】:

    标签: php drupal wsod


    【解决方案1】:

    您需要确保display_errors 也已启用。

    ini_set( 'display_errors', 'on' );
    

    【讨论】:

    • 我在 index.php 中有这个:error_reporting(-1); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
    • 200 - 我找到了导致它的模块组,现在只需启用/禁用该组中的所有模块即可找到原因。
    【解决方案2】:

    这可能是 stackoverflow 上最愚蠢的答案,但是当我从头开始设计一个 cakephp 站点并且在 css 中有白色背景和白色字体时,这发生在我身上,并且什么也得不到,没有错误或 sql 转储。

    看看你是否可以在屏幕上选择文本。

    【讨论】:

    • 哈哈为回复喝彩,但是我“查看源”时没有源....屏幕上什么都不能选择。
    【解决方案3】:

    检查 php 的“error_reporting”设置,也许吧?我的设置为:

    error_reporting = E_ALL & ~E_DEPRECATED

    【讨论】:

    • 如果你看上面,它说我将error_reporting设置为-1(所有错误)
    【解决方案4】:

    【讨论】:

      【解决方案5】:

      有时,如果我包含一个具有关闭 php 令牌的文件,我会收到包括 WSOD 在内的奇怪错误。 ?>

      我花了很长时间才找到。

      【讨论】:

      • 是的,这就是我的想法,虽然系统和模块非常广泛,所以我试图将其用作最后的手段! :)
      【解决方案6】:

      我开始启用/禁用模块以查看何时可以再次看到错误并将其限制为两个关闭错误处理的模块...经过更多调查,我发现在 nusoap.php 类中错误报告已被打开关闭,因为某些错误一直显示(其他一些开发人员已将其关闭)...重新打开,升级 nusoap.php,现在一切正常...感谢大家的帮助

      【讨论】:

        【解决方案7】:

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

        我在上面的代码中添加了这 2 个打印语句,然后刷新页面,没有到达“完成加载 $module”语句的模块是有问题的......在我的情况下是开发.

        找到模块后,您可以进入系统表并查找该模块,将其设置为状态 = 0 和引导 = 0 或运行查询:

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

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

        【讨论】:

        • 好主意 - 它最终成为一个关闭错误报告然后出错的模块(因此它停止了输出流)。花了一段时间,但我最终修复了它:)
        • 感谢这个答案,我意识到在我的情况下 WSOD 是由 Drupal 7 和 Blue Host 上的开发模块引起的
        【解决方案8】:

        我注意到您的问题已经得到解答,但阅读本文的其他人可能会知道有时 WSOD 可能是由服务器上旧的不兼容版本的 PHP 引起的。 Drupal 7 需要 PHP 5.3,但许多服务器仍在运行 PHP 5.2。这可能会导致没有错误消息的 WSOD。

        【讨论】:

          猜你喜欢
          • 2015-11-24
          • 2012-01-03
          • 1970-01-01
          • 1970-01-01
          • 2021-02-03
          • 2013-05-08
          • 2011-08-26
          • 2012-11-26
          • 1970-01-01
          相关资源
          最近更新 更多