ob start php.ini,Smarty中的ob_start问题

近日升级php 4.3.10 到 4.4.6,遭遇到一个奇怪的问题。描述如下:

Linux Redhat AS4, Apache 1.3.37, PHP 4.4.6, Smarty 2.6.3 环境中,只要在调用 Smarty 的 display() 函数之前有任何诸如

echo/print/print_r 等输出,那么整个输出结果就变成空白页面。一开始以为是版本升级导致的问题,遂换成旧版本,问题依旧。也怀疑到是否因为 SQUID 缓存引起的,于是直接走 Apache 端口,还是那样。把 PHP 的 error_reporting 改成 E_ALL,重启,没看到任何报错,但是问题依旧如此...这时已经有点烦躁了。 以前也从来没碰到过如此BT之问题,百思不得其解,干脆重启机器吧,可还是那样...

把保存cache的目录权限设置成777,把cache清除,禁用cache...能想得到的都做了,可是,结果还是那样...

没办法,那只好debug调试程序了吧,于是就跟踪 Smarty 的源代码中的 display() 函数,发现调用了 ob 系列函数,于是怀疑和它们有关>系,于是关闭 ob 功能,问题消失。

究其原因,原来是在 Smarty 中调用了 ob_start() 函数,并且附带了参数 'ob_gzhandler',代码段如下:@ob_start('ob_gzhandler');

$this->fetch($resource_name, $cache_id, $compile_id, true);

$content = @ob_get_contents();

if($content)

{

@ob_end_clean();

@ob_start('ob_gzhandler');

echo $content;

@ob_end_flush();

}

在这里,指定输出缓存(output_handler)要调用了 ob_gzhandler 函数。然而,在 php.ini 中的 output_handler

选项却没有打开,也就是无法支持 output_handler 了。打开 php.ini 文件,修改如下内容:output_handler = ob_gzhandler;

指定 output_handler 的默认处理函数为 ob_gzhandler。重启 Apache,一切 OK。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值