查看文章 |
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对输出做了某种处理。 |
最近读者: