我有一个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 varnish
或Via: 1.1 vegur
。 他们也会缓冲响应。