2009-09-01 113 views
10

我有一個php腳本,連接10個不同的服務器來獲取數據。我希望它在第二個連接開始之前打印第一個連接的結果。立即打印結果(php)

+0

請詳細說明您正在使用的代碼 – 2009-09-01 17:11:51

回答

23

使用flush和/或ob_flush,你應該得到你想要的。

這裏是一個快速演示:

for ($i=0 ; $i<10 ; $i++) { 
    echo "$i<br />"; 
    ob_flush(); 
    flush(); 
    sleep(1); 
} 

每一秒,號碼將被髮送到瀏覽器,無需等待循環/腳本結束。
(沒有這沖洗和ob_flush,一直等到腳本的末尾發送輸出)


解釋爲什麼你既需要,手動從沖洗頁面引用:

無論後端PHP使用什麼(CGI, Web服務器等),刷新PHP的寫入緩衝區和 。這個嘗試 推動電流輸出一直到 瀏覽器有一些注意事項。

的flush()可能無法覆蓋 您的Web服務器 的緩衝機制,而且它在瀏覽器中任何 客戶端緩存沒有影響。 它也不影響PHP的用戶空間 輸出緩衝機制。這意味着 如果您正在使用這些緩衝區,則必須調用ob_flush() 和flush()以刷新ob輸出 緩衝區。


如果這並不爲你工作,採取一看說明書的兩頁的評論可以給你一對夫婦的指針「它爲什麼會失敗」

+0

@sshow:我聽到同事們在工作中曾多次問過這個問題 - 實際上 - 我自己使用過一次或兩次 - 這有助於^^ – 2009-09-01 17:16:57

+0

謝謝,很好的回答!幫了很多。 – 2017-08-09 14:59:37

2

ob_end_flush http://us.php.net/ob_end_flush

此功能清空輸出緩衝器並禁用輸出緩衝。此功能之後的所有內容都立即發送給瀏覽器。

0

是的,ob_flush應該這樣做。當我想要觀察手術的進展時,我總是用LOOONG頁面來做這件事。