Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么ob#u start(';ob#gzhandler';)会破坏这个网站?_Php_Content Encoding - Fatal编程技术网

Php 为什么ob#u start(';ob#gzhandler';)会破坏这个网站?

Php 为什么ob#u start(';ob#gzhandler';)会破坏这个网站?,php,content-encoding,Php,Content Encoding,我有一个网站,如果存在ob_start('ob_gzhandler'),它会在浏览器中抛出一个内容编码错误。如果我删除该语句,它将正常运行 该网站运行的框架、服务器和主机包与其他许多网站相同。无论语句是否在其中,它们都可以工作 该语句位于框架中,而不是应用程序代码中,因此它由所有站点共享 工作站点和非工作站点之间的配置没有区别 该网站使用完全相同的代码和数据在本地运行良好 您可以使用curl/wget获取站点,返回的HTML在浏览器中呈现良好效果 响应头完全相同,没有out,也没有语句 我现

我有一个网站,如果存在ob_start('ob_gzhandler'),它会在浏览器中抛出一个内容编码错误。如果我删除该语句,它将正常运行

  • 该网站运行的框架、服务器和主机包与其他许多网站相同。无论语句是否在其中,它们都可以工作
  • 该语句位于框架中,而不是应用程序代码中,因此它由所有站点共享
  • 工作站点和非工作站点之间的配置没有区别
  • 该网站使用完全相同的代码和数据在本地运行良好
  • 您可以使用curl/wget获取站点,返回的HTML在浏览器中呈现良好效果
  • 响应头完全相同,没有out,也没有语句
我现在已经删除了远程服务器上的所有代码,并重新上传了所有内容。还是没有变化。 下一步是重新安装站点,从头开始,但我不想丢失所有数据


有什么建议、建议或解决方案吗?

通常我会在下面做,它对我有用,试试看

写入
ob_end_clean()
ob_flush()在您开始的页面底部
ob_start()

参考资料:


如果您已经在使用Apache的gzip压缩(从外观上看,您确实在使用,因为CSS/JS在我看来是压缩的),那么使用ob_start('ob_gzhandler')将压缩该压缩。。。浏览器将无法处理它

当然,我是在纠正的情况下说的,因为我一直使用Apache为我做这件事,但看起来你是在重复gzip,这就是为什么它没有“ob_gzhandler”语句的原因


检查其他站点上的.htaccess文件,并将其与您正在运行的站点进行比较,该站点存在相同的问题,因为我看不到您在zacoders.net和jadeit.co.za上运行Drupal,只是在jadeit.co.za上,这让我觉得它们与您所说的框架不同?耸耸肩

只要把这行代码放在开头,一切都会好起来的

while (ob_get_level() > 0) { ob_end_clean() ; } 

IDE是否在文档开头添加了
UTF8/UTF16
字符?是否已激活?如上所述,您不能同时使用ob_gzhandler()和zlib.output_压缩。还要注意的是,使用zlib.output_compression比ob_gzhandler()更可取。@Russel Dias no@Shikiryu ob_start('ob_gzhandler')周围的代码会检查这一点。再加上我的回答,curl通常返回网站的原因是(同样,AFAIK)它不支持gzip,因此服务器/软件会给网站“原样”的. 但是,如果浏览器确实支持gzip并告诉服务器他们支持gzip,则会返回gzip压缩的内容,并且无法正确地对其进行压缩。您说它将压缩压缩的数据是对的,但我通过在运行(ob_get_level()==0){ob ob_start('ob_gzhandler');}zacoders时执行此操作来防止这种情况发生,实际上后端站点和jrgns.net也是如此。我也在我工作的公司使用它。我还没有机会把翡翠移植到它上面…:)那么,试着禁用Apache的gzip(如果Texo允许,则使用.htaccess),看看它是否有效。另外,ob_get_level只检查ob_start之前是否被调用过。它不会阻止页面第一次被gzip压缩,因为在ob_get_级别检查之前调用了ob_start(),因此if语句将始终为true,从而始终压缩压缩的页面。ob_get_级别返回当前输出缓冲级别。如果在没有调用ob_start的情况下大于0,那么您就知道PHP正在执行gzip。我通过在结束脚本之前关闭所有输出缓冲区来解决问题。但这是有趣的部分。当脚本结束时,PHP会自动逐个刷新所有输出缓冲区。对于所有其他网站,这没有造成任何问题。这一次是这样的。这样做明确地解决了问题,但我仍然不确定确切的问题是什么!:)有趣。我添加了while(ob_get_level()>0){ob_end_clean()}来修复它。我仍然想知道为什么它没有出现在其他网站上,心想。反正是Thanx!