跳转到主要内容
bright_king 提交于 3 August 2012

本文是根据drupal官方技术文档”The White Screen of Death (Completely Blank Page)”翻译过来,感谢您的阅读和支持。

译文

“White screen of death,WSOD。”白屏,想必在很多drupal用户在移动到一个页面时,突然间发现页面内容消失了,完全的白掉了。The White Screen of Death (Completely Blank Page)——白屏!没内容,没有错误提示。白屏不仅仅会在升级升级主题、升级核心、升级模块时产生,而且还具有一定的偶然性,但问题始终是有方法解决 的。这篇文章中我们就介绍一下处理drupal白屏时的一些方法。

首先,我们要处理白屏的问题,,在某些情况下让我们毫无头绪,所以我们现在要做的就是临时开启错误报告。

开启错误报告方法如下:

1:使用文档编辑器(dreamweaver或者editplus)打开根目录下的index.php。

2:在index.php的最低部加入代码(不要去修改原有的信息,加在底部即可):

<?

error_reporting(E_ALL);

ini_set(‘display_errors’, TRUE);

ini_set(‘display_startup_errors’, TRUE);

?>

注释:如果您建立的是多站点,但您只想让错误报告在一个站点显示的话,只需要在前面加一个if进行判断:<?

If $_server['http_host']===’需要显示站点域名’{

这里把显示错误报告的代码复制到这里。

}

?>

如果问题发生在运行update.php的时候,我们就用文档编辑器开打update.php把ini_set(‘display_errors’,FLASE);这一句的注释掉。

日志文件(Log

日志文件可以让我们知道造成白屏的错误是什么操作产生的,并能告诉我们这个错误的文件在哪。在无忧主机(www.51php.com)上是提供日志 文件下载的。而在nuix shell下我们键入”tail /var/log/apache/error.log”进入服务器的日志文件。当然我们还可以键入:

grep ‘ErrorLog’ /etc/apache2/*

grep ‘ErrorLog’ /etc/apache2/*/*

来查找日志文件的存放地址。

php文件的末尾是空白

最普通的造成白屏的代码错误是额外的空白空间在PHP文件的最末端,避免这个问题您可以去参考drupal的编码标准(drupal coding standard)是不要在php文件末尾加上?>关闭。

php版本问题

在php4的一些版本下函数申明中申明的变量因为太多的“=”或者是处理“&$…”的时候因为PHP4处理器的不兼容造成白屏。

解决办法:升级到PHP5

当您的的网站运行在多PHP版本的服务器上时,可能会在.htaccess上添加一条 “addType x-mapp-php5 .php”来告诉服务器用PHP5而不是PHP4。

如果是这个情况下,我们只需要把.htaccess中的addType x-mapp-php.php移除即可。

升级过程中造成不可见的错误

如果升级了模块,您首先可能会加载文件来测试一下,并确定没有明显的PHP语法错误。这是如果发生白屏是因为include_once()或者是 require_once()函数调用不会报错(缺少原因)。在您的系统上运行这样的命令(这需要PHP接口或者是CLI安装了的情况下)“$ php <filename>”,这个命令会询问您的PHP去解析您的文件,如果遗失了“;”或者是“}”会立即给您返回错误提示,在我们修改错误以 后,再次再您的服务器上运行。

在*nix系统下,运行“$ find . -type f -name ‘*.php’ -exec php -1 ‘{}’ \;” 。

为了达到更好的效果,您可能要为检测这样的错误写一个自动检测。(更多信息请查看:http://drupal.org/simpletest)

输出缓冲

一些模块需要输出缓冲功能开启。

开启这项功能,我们只需要在您网站根目录下的.htaccess文件中加入如下代码:

php_value output_buffering On

php_value output_handler mb_output_handler

Zend主题的兼容模式

当您的网站迁移至另一个php虚拟主机上 时出现白屏,可能就是因为zend主题的兼容造成的(在php.ini文件中)。在查看错误报告显示的是“Trying to clone an uncloneable object of class mysqli” ,我们在apache服务器下的php.ini键入这行命令:“Zend.ze1_compatibility_mod= off” 。

清除缓存

有时候只要我们清楚网站的缓存就可以解决白屏问题,缓存存储在您当前网站数据库的cache表中,删除数据表内容的SQL命令是“Truncate Table 表名;”(这里的话表名是cache)。

WIMPwindows IIS mysql php

如果您站点的安装环境是WIMP,当在http://www.example.com/install.php发生白屏时,您应该检测一下是否您在IIS服务器上安装了ISAPI模块。如果没有安装,请及时安装。

PHP内存限制

另一个很普遍造成白屏的原因就是内存限制,这个问题很容易发生在您登录到模块管理页面。

解决方案:http://drupal.org/node/31819

您可能需要运行一下updata.php,如果您不知道如果运行或者您没有权限运行,请查阅:http://drupal.org/node/61736

不推荐的模块版本

如果您下载的模块不是推荐的版本,您可以要把它升级到推荐的版本。模块的话我们能在http://drupal.org/project/modules查看版本情况,recommended就是推荐的意思。

名字冲突

另一个造成白屏的的原因很可能就是名字冲突,一个模块名和主题名相同。

这个时候是没有错误信息产生的,因为这是需要drupal主题系统的行为。

解决办法:重命名,当然不能相同。

Template.php编码问题

当错误提示为:Cannot modify header information – headers already sent by

(output started at …/sites/all/themes/THEME_NAME/template.php:1)

in …/includes/common.inc on line 314.

从上面看出输出在第一行,这就是文件的编码方式不正确造成的。

解决方法:用文档编辑器(推荐使用dreamweaver)打开文件后ctrl+j进行编码方式修改(推荐utf-8)。

禁用模块

当白屏是由于模块产生,却又不知道是哪个模块造成的,我们就可以按下列的方法来找出问题模块。

1:在管理员后台禁用模块

一个个的禁用的模块来寻找出造成白屏的模块。浏览到“管理员—>模块” ,把模块的复选框设定为取消,保存。

2:通过数据库禁用模块

在您drupal网站的数据库中找到一张system的数据表,然后把它的status状态改为0,接着删除缓存。

PHP超时

默认情况下PHP超时在php.ini文件下定义的是30秒,这对于模块的激活和开启来可能会有点短,从而造成白屏。

超时的错误提醒是:Fatal error: Maximum execution time of 30 seconds exceeded in X:…..

此时我们增加执行时间的办法有如下:

在../sites/default/settings.php的最底部加入:ini_set(‘max_execution_time’,168);   /*这里的取值可以在147-168间*/

这只是无忧主机(www.51php.com)翻译的处理drupal网站访问白屏方法,无忧主机(www.51php.com)小编选了一些比较 常用和有效处理白屏的方法记载下来,确实有一些感觉是鸡肋也就没有进行翻译,如果上述处理drupal白屏的方法还不能解决您的实际需求的话,请您查看原 文:http://drupal.org/node/158043

标签