php 實時輸出內容到瀏覽器或到檔案

2021-09-24 09:45:55 字數 935 閱讀 6064

當你在處理乙個過程需要耗時很長,但你又需要適時的知道程式當前的處理狀況的時候,該怎麼辦呢?下面就分享一下如何使用php及時的輸出當前結果到瀏覽器而不重新整理整個頁面的效果吧。

應用場景:如安裝資料庫,實時顯示每一步資訊,如1.資料庫建立成功...2.user表建立成功...3.使用者user1插入成功...

再比如執行消耗 job,需要檢視執行過程等。

php 裡開啟實時輸出方法是 ob_implicit_flush() ,但它大部分情況下都不管用,因為 php.ini 配置裡 output_buffering 輸出緩衝大部分是 on 開啟的,還有 zlib.output_compression 也經常會被開啟,除了 php 這一層,還有 nginx 的緩衝設定 proxy_buffering ,和壓縮 gzip 也大都是開啟的。為了一兩個頁面的需求,修改整個伺服器的**配置,恐怕沒有人會做這種選擇。

set_time_limit(0);

ob_end_clean();

ob_implicit_flush();

header('x-accel-buffering: no'); // 關鍵是加了這一行。

echo '現在是:'.date('h:i:s').'

';sleep(5);

echo '五秒後:'.date('h:i:s');

案例1:實時輸出shell指令碼日誌,將shell指令碼輸出內容重定向到乙個日誌檔案,再實時輸出

set_time_limit(0);

ob_end_clean();

ob_implicit_flush();

header('x-accel-buffering: no'); // 關鍵是加了這一行。

while(exec("/home/web/a.sh >> /home/web/a.log 2>&1 &")

PHP即時輸出結果到瀏覽器

php for i 0 i 10 i 類似上面的程式如果在php直譯器中執行,每秒會輸出乙個數,和想象中一樣。但是如果使用瀏覽器來訪問,情況就有所不同。在瀏覽器中訪問時,只有在十秒之後才會一次性地顯示所有結果。可以使用ob flush 和flush 來強制瀏覽器重新整理快取,程式改為 php for...

使PHP即時輸出結果到瀏覽器

php for i 0 i 10 i 類似上面的程式如果在php直譯器中執行,每秒會輸出乙個數,和想象中一樣。但是如果使用瀏覽器來訪問,情況就有所不同。在瀏覽器中訪問時,只有在十秒之後才會一次性地顯示所有結果。可以使用ob flush 和flush 來強制瀏覽器重新整理快取,程式改為 php for...

使PHP即時輸出結果到瀏覽器

php for i 0 i 10 i 類似上面的程式如果在php直譯器中執行,每秒會輸出乙個數,和想象中一樣。但是如果使用瀏覽器來訪問,情況就有所不同。在瀏覽器中訪問時,只有在十秒之後才會一次性地顯示所有結果。可以使用ob flush 和flush 來強制瀏覽器重新整理快取,程式改為 php for...