2012-04-22 45 views
8

我有一個ajax調用somefile.php。我希望php腳本能夠完成一項簡單的任務,然後將數據發回給用戶,而不僅僅是非常耗時的任務。所以我需要在第一個簡單任務之後刷新輸出。它不起作用,可能是因爲我有gzip啓用。對於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秒後我仍然可以看到所有輸出。

+1

如果是您的web服務器來處理gzip壓縮,我認爲您不能通過PHP禁用它。 – noli 2012-04-22 10:25:45

+0

也許看看這個:http://stackoverflow.com/questions/1922934/how-to-disable-mod-deflate-in-apache2 – noli 2012-04-22 10:27:19

回答

1

把這個在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 
+0

你怎麼能禁用它只有對同一個文件的某些請求?例如: 'ajax.php?a = list&id = 5' - >壓縮 'ajax.php?a = download&file = image.png' - >無壓縮 – 2014-02-03 16:06:49

+0

@ B.Martin將'$'離開正則表達式幷包含請求參數。像'ajax \ .php \?a = download'。 – Chloe 2016-03-24 23:04:08

6

我一直在尋找對同一問題上的解決方案。這對我來說很有效,但不幸的是它的接縫不是一個有效的標題。

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

這是'Content-Encoding'規範:https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5 – Chloe 2016-03-23 23:28:00

1

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。他們也會緩衝響應。