我有一个对某个文件的 ajax 调用.php . 我希望 PHP 脚本执行一个简单的任务,而不是将数据发回给用户,并且只执行非常耗时的任务。 所以我需要在第一个简单任务后刷新输出。 它不起作用,可能是因为我启用了 gzip。
我绝对不想在所有 vhost 中禁用 gzip,也不要在某个文件所在的所有文件夹中禁用 gzip.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");
?>
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
等标头。它们还将缓冲响应。
把它放在 httpd.conf 中
# exclude certain page requests (e.g. for requesting getMyFile.php?action=getFile&id=3 as non-compressed)
SetEnvIfNoCase Request_URI getMyFile'.php$ no-gzip dont-vary