2011-07-22 121 views
2

我的刷新機制停止工作,我不知道爲什麼。 我想現在運行一個簡單的沖洗例如,沒有運氣:PHP刷新不起作用

echo "before sleep"; 
flush(); 
sleep(5); 
echo "after sleep"; 

做一些閱讀後,和理解NGIN x爲安裝在我的服務器最近,我要求它爲我的域名被禁用。 (服務器管理員說,他禁止其用於此特定的域)

也,我試圖禁用的gzip,增加這些線路爲.htaccess

SetOutputFilter DEFLATE 
SetEnv no-gzip dont-vary 

也嘗試添加這些到我的PHP文件

ini_set('output_buffering','on'); 
ini_set('zlib.output_compression', 0); 

沒有什麼幫助。它睡了5秒,然後將所有內容一起顯示。 我一直在使用它,並且一直在使用輸出緩衝區(ob_start,ob_flush等,現在只是試圖讓最簡單的例子工作)

+0

只是猜測:一些瀏覽器至少需要接收256個字節,然後纔開始渲染。 –

+0

是的,我試過,也....仍然沒有工作。 10倍雖然 – normalppl

回答

0

「停止工作」是一個相當高的水平。實際上你應該看看有沒有什麼可以找到更多的東西。

這可以通過監視網絡流量來完成。您會看到已經完成了多少響應以及發送的是哪種編碼。

如果響應得到壓縮,大多數壓縮函數在壓縮之前需要一定數量的字節。所以,即使你做了一個flush()來發信號通知PHP刷新輸出緩衝區,仍然可以在PHP輸出過濾器或服務器等待更多的地方進行壓縮。所以旁邊的壓縮由apache完成,檢查您的PHP配置是否也壓縮,並禁用它。

如果您不想監視您的網絡流量,curl命令行實用程序也做了相當不錯的工作以顯示正在發生的事情,並且可能更容易使用它而不是網絡監視。

curl -Ni --raw URL 

確保您使用-N開關將由curl禁用緩衝,所以你直接看到你的腳本/服務器的輸出。

請參閱我之前的回答中的Inspecting HTTP Compression Problems with Curl部分,該部分顯示了一些curl命令,用於在壓縮完成時查看請求的輸出。

curl能夠最終顯示未壓縮的壓縮數據,並且可以禁用每個請求的壓縮,因此無論服務器還是PHP輸出壓縮設置,都可以測試更多差異化。

0
<?php 
ini_set('zlib.output_handler', ''); 
ini_set('zlib.output_compression', 0); 
ini_set('output_handler', ''); 
ini_set('output_buffering', false); 
ini_set('implicit_flush', true); 
apache_setenv('no-gzip', '1'); 


for($i = 0; $i < 5; $i++){ 
    echo str_repeat(chr(0), 4096); #flood apache some null bytes so it feels the packet is big enough to be sent... 
    echo "$i<br/>"; 
    flush(); 
    sleep(1); 
} 
?>