百度首页 | 百度空间
 
查看文章
 
Lighttpd下出现PHP空白页面的问题
2008年05月06日 星期二 下午 12:42
作者:老王

Web服务器为Lighttpd,使用fcgi方式运行PHP,跑一个Discuz论坛,在程序代码里(common.inc.php)使用了ob_start('ob_gzhandler')对页面进行压缩,出现问题:浏览器显示空白页面,如果去掉ob_start('ob_gzhandler')等相关代码则一切正常。

经过漫长的调试发现是因为ob_start('ob_gzhandler')之前有输出所致,下面在lighttpd下做实验验证一下:

<?php
ob_start('ob_gzhandler');

echo "hello, world.";
?>


浏览页面,一切正常。修改代码如下:

<?php
echo "\n";

ob_start('ob_gzhandler');

echo "hello, world.";
?>


浏览页面,空白无显示。

如果一定要问为什么会出现这样的问题,也不难解释:当我们在PHP中使用ob_start('ob_gzhandler')进行输出压缩的时候,可以保证后面的所有内容都是压缩的。但是在ob_start('ob_gzhandler')前面的输出却不是压缩的。浏览器接收到请求之后,首先会看到一个标识压缩的HTTP头(比如gzip),而后又发现信息不是压缩的,在这样前后矛盾的情况下,浏览器就会认为数据是非法的,不再解析,显示出来就是一个空白页。

======================

同样的代码,在Apache下测试没有发现问题,可能是Apache对输出做了某种处理。

类别:Php | 添加到搜藏 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2008年05月07日 星期三 下午 01:12
应该可以在前面ob_clear一下吧,如果没记错的话。
 
2
2008年06月11日 星期三 上午 10:43
试了一下,的确如此。
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu