2011-06-05 22 views
1

我不確定如何爲此主題標題,抱歉。PHP腳本沒有實時回顯日誌 - 在我的其他服務器上工作

我有一個處理一些日誌的腳本,並且我會在處理過程中處理大量的調試信息。由於移動到新的服務器,腳本似乎掛起了30秒,然後吐出所有的日誌記錄,然後再掛起30秒,然後過程繼續。

這真是很奇怪的行爲,我不知道從哪裏開始。它就像它不是按行處理文件,而是在塊中處理文件...

在運行plesk的CentOS上,PHP版本是5.1.6。 (我的老CP是CPanel)

任何想法?

編輯:我的問題的簡單例子 - 運行該代碼:

for ($i=0; $i<100; $i++) { 
echo "test $i"; 
sleep(1); 
} 

腳本將掛起100秒,然後打印出所有的「測試1」等。我的主腳本需要睡眠,而另一臺服務器上則需要依次回顯值。

EDIT2:試過設置output_buffering = 0和implicit_flush = On並沒有幫助。

+0

首先打開'display_errors',然後張貼一些代碼,特別是在看起來很嘈雜的地方,大約20行左右。我們無法僅僅使用服務器信息做很多事情。 – 2011-06-05 14:02:58

+0

我的代碼很大,所以我想創建一個簡單的例子。 – webnoob 2011-06-05 14:09:17

+0

請看我的例子。 – webnoob 2011-06-05 14:11:54

回答

4

您可能還需要output_bufferingOn。嘗試先禁用它。

你可以做到這一點無論是在php.ini文件,在.htaccess文件,如果你的服務器允許的話,或者在你的PHP腳本的開頭使用下面的代碼:

while (ob_get_level()) ob_end_clean(); 

而且,使用flush()echoprint後,它應該沒問題!

更新: 您也可能會遇到您不能在PHP中控制其他緩衝區(Web服務器,瀏覽器,...),這就是爲什麼你還沒有任何seing。一種解決方法是在每次打印後發送一些空字節:

while (ob_get_level()) ob_end_clean(); 

for ($i=0; $i<100; $i++) { 
    echo "test $i"; 
    echo str_repeat(' ', 256); 
    flush(); 
    sleep(1); 
} 

然而,儘管這個例子對我的作品在IE火狐&,它無法在Chrome工作!

+0

我已經試過這個建議與我的for循環以上,它並沒有幫助:( – webnoob 2011-06-05 14:14:54

+1

也許apache(或負載平衡器)緩衝輸出。 – 2011-06-05 14:26:10

+0

那麼完全相同的代碼在我的另一臺服務器上的Firefox的作​​品,所以我猜這應該是一個安裝問題,我的其他機器是VPS,而這是一個dedibox。現在嘗試你的代碼。 – webnoob 2011-06-05 14:37:06

相關問題