对于PHP刷新 – 如何禁用特定文件的gzip?

我有一个ajax调用somefile.php。 我想PHP脚本做一个简单的任务,并发送回数据给用户,而只做非常耗时的任务。 所以我需要在第一个简单的任务之后刷新输出。 它不工作,可能是因为我有gzip启用。

我绝对不想在所有虚拟主机上禁用gzip,也不是在somefile.php所在的文件夹中。 我只是想禁用这个特定的文件。 那可能吗?

编辑:

这就是我在我的apache conf中包含的内容:

<FilesMatch \.php$> SetEnv no-gzip 1 </FilesMatch> 

这是我的PHP脚本:

 <?php $sucesss = @apache_setenv('no-gzip', 1); @ini_set('zlib.output_compression', 0); @ini_set('implicit_flush', 1); ob_start(); for($i=0;$i<10;$i++) { echo 'printing...'; ob_flush(); flush(); sleep(1); } ?> 

它不工作。 10秒后我仍然可以看到所有的输出。

我正在为同一个问题寻找解决方案。 这是我的工作,但不幸的是,它的接缝不是一个有效的标题。

 <? header("Content-Encoding: none"); ?> 

把它放在httpd.conf中

 # exclude certain page requests (eg for requesting getMyFile.php?action=getFile&id=3 as non-compressed) SetEnvIfNoCase Request_URI getMyFile\.php$ no-gzip dont-vary 

apache_setenv()是正确的。 请参阅文档。

http://php.net/manual/en/function.apache-setenv.php#60530

 apache_setenv('no-gzip', '1'); 

你的问题是,你打开ob_start()输出缓冲。 评论一下。

我已经了解到apache_setenv()仅适用于PHP的Apache模块。 使用FPM时不可用。 在这种情况下,您必须使用.htaccess来关闭GZip。 一个例子是

https://stackoverflow.com/a/36212238/148844

 RewriteRule ^dashboard/index - [E=no-gzip:1] SetEnvIf REDIRECT_no-gzip 1 no-gzip 

-表示NOOP, E表示设置变量, 1表示值。 重定向之后,变量将被重命名,并以REDIRECT_前缀。

如果输出仍在缓冲中,请检查您是否正在通过代理或缓存。 看看是否存在像Via: 1.1 varnishVia: 1.1 vegur 。 他们也会缓冲响应。