Smarty中的ob_start问题-阿里云开发者社区

开发者社区> 科技小先锋> 正文

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。


本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/308086,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ECS的使用感受
在学校结合所学的知识,运用在阿里云上,学思悟践,使我进步了很多!
10 0
Linux常用命令
文章目录 Linux常用命令 1.修改基本配置 1.1修改主机名 1.2修改ip地址 1.3修改ip和主机名的映射 1.4关闭防火墙 2.常用快捷键 3.日常操作命令 4.文件操作命令 4.1基本命令 4.2文件夹命令 4.3创建文件 4.4vi命令 4.5vim介绍 5.文件权限命令
3 0
2021年12月1号 linux系统优化
本文均为本人实操整理,请勿搬运,学习交流可以随时评论---魏红斌
6 0
推荐10个堪称神器的学习网站
推荐10个堪称神器的学习网站
6 0
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作(3)
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作
5 0
Java的内存模型
java的后端服务器开发中"高效并发"是我们经常会碰到的,而要写出高效的代码需要更多的积累与实践。而一些基础的内容是往这个方向发展的基石。所以我们就来介绍下
5 0
Redis应用之缓存实现
Redis的众多应用场景中缓存绝对是频率最高的场景了。本文来介绍下Redis作为缓存要注意的地方。
4 0
SpringBoot项目集成FTP
FTP是一个文件传输协议,被开发人员广泛用于在互联网中文件传输的一套标准协议。而我们通常在开发过程中也要通过FTP来搭建文件系统,用于存储系统文件等。目前正值SpringBoot热潮,所以接下来会一起学习一下SpringBoot如何集成FTP,以及相关的FTP组件包,还有其主要提供的几个方法。
3 0
springboot项目集成redis
Redis是一款NoSql数据库,经常用于缓存数据,我们也经常要在不同系统框架中去集成Redis数据库的访问。我们要学习SpringBoot项目中是如何集成Redis的,文章最后附上平时使用的工具类。
4 0
这些插件太强了,Chrome 必装!尤其程序员!
这些插件太强了,Chrome 必装!尤其程序员!
5 0
4571
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载