php中url伪静态和Gzip同时开启引发冲突的原因与解决方法

php中文网
发布: 2016-07-25 08:58:00
原创
1117人浏览过
本文介绍下,在php中进行url伪静态、以及gzip同时开启时,会引发冲突的原因及解决方法。有需要的朋友参考下。

问题描述: 单纯开启url伪静态,不开启gzip,网站正常; 单纯开启gzip,不开启url伪静态,网站正常; 同时开启url伪静态和gzip,网站无法正常显示,有时显示不出内容,刷新后自动refresh等等问题。

解决办法,如下:

1、修改服务器设置法: 到服务器里,从php.ini找出:zlib.output_compression 这条,把zlib.output_compression = On 改成 zlib.output_compression = Off 保存,然后重启apache或IIS即可。

2、修改网站程序法: 使用虚拟主机,无法修改 php.ini 的,暂时修改方法,可以在网站的公共文件或初始化文件中加入: ! ini_get('zlib.output_compression') ? ob_start('ob_gzhandler') : ob_start();

分析:

开启 zlib.output_compression 相当于给每个PHP程序开头加上了ob_start("ob_gzhandler");这条语句。

虽然 zlib.output_compression和ob_gzhandler还是有区别的。zlib.output_compression是和PHP脚 本解析程序并行的一个线程,当PHP输入时,这边读入,压缩,而已经压缩好的文档达到一定数量(默认是4k),它就向浏览器发送数据。

而 ob_gzhandler则是在PHP脚本执行完所有代码才把缓存好的输出文件进行压缩并传输给浏览器,所以相对慢一点,但原理是相同的。

MindShow
MindShow

MindShow官网 | AI生成PPT,快速演示你的想法

MindShow 1492
查看详情 MindShow

立即学习PHP免费学习笔记(深入)”;

而在后台开启 gzip 功能后,会不加判断地强制运行头部的 ob_start("ob_gzhandler") 语句,这样相当于程序同时运行了两条 ob_start("ob_gzhandler") 语句,造成无法正常执行并显示出页面内容。

因此,建议正常情况下php.ini里zlib.output_compression设置为 Off 状态,这是由于程序员会不加判断地添加 ob_start("ob_gzhandler") 语句。



PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号