PHP的輸出緩衝區

2021-10-07 21:49:10 字數 1191 閱讀 5667

在php中有乙個名為「輸出緩衝區」「ob」的東西。php的輸出流包含很多位元組,通常是echo語句或者printf()函式輸出的。這些東西的資料需要用到輸出緩衝區。

一般php的輸出就是按照上面這張圖在各個緩衝區間流轉,但是cli模式下有些特殊。在cli模式下ini的配置中_output_buffer_選項強制設定為0、_implicit_flush_的值也會被設定為1。

關於緩衝區的配置選項的值會在php程式啟動的時候,還沒有執行任何指令碼之前解析,所以在指令碼啟動之後使用ini_set()去設定是沒有效果的。

在web應用環境中對輸出的內容使用緩衝區對效能有好處。這意味著你可以先寫入一些字元,然後再跟下面的sapi層通訊。並且在web應用環境中,通過socket乙個位元組乙個位元組的傳輸訊息的方式對效能並不好。更好的方式是把所有內容一次性傳輸給伺服器,或者至少是一塊一塊地傳輸。層與層之間的資料交換的次數越少,效能越好。

對於fastcgi協議,重新整理操作(flushing)是每次寫入後都傳送乙個fastcgi陣列包(packet),如果傳送資料報之前先把fastcgi的緩衝區寫滿會更好一些。

可以使用flush()函式顯式重新整理sapi緩衝區。

使用ob_start()建立使用者輸出緩衝區。這些緩衝區組成乙個堆疊結構,每個新建緩衝區都會堆疊到之前的緩衝區上,每當它被填滿或者溢位,都會執行重新整理操作,然後把其中的資料傳遞給下乙個緩衝區。

// web請求立即返回,然後後台繼續執行任務。

echo

json_encode([

'code'

=>

200]);

$size

=ob_get_length()

;header

("content-length: $size")

;header

('connection: close');

ob_end_flush()

;ob_flush()

;flush()

;//在關閉連線後,繼續執行php指令碼

ignore_user_abort

(true);

// 不設定超時時間

set_time_limit(0

);// 繼續執行任務

php 緩衝區,PHP的輸出緩衝區

1 什麼是緩衝區?緩衝區的作用是把輸入或者輸出的內容先放進記憶體,而不顯示或者讀取,最本質的作用就是協調高速cpu和相對緩慢的io裝置 磁碟等 的運作。2 php在執行的時候,在什麼地方有用到緩衝區?當執行php的時候,如果碰到了echo print r之類的會輸出資料的 php就會將要輸出的資料放...

PHP的輸出緩衝區

什麼是緩衝區?簡單而言,緩衝區的作用就是,把輸入或者輸出的內容先放進記憶體,而不顯示或者讀取.至於為什麼要有緩衝區,這是乙個很廣泛的問題,如果有興趣,可以在網上找下資料.其實緩衝區最本質的作用就是,協調高速cpu和相對緩慢的io裝置 磁碟等 的運作.php在執行的時候,在什麼地方有用到緩衝區?想要了...

輸出緩衝區

輸出緩衝區 printf 輸出緩衝區 顯示器 printf函式列印的內容會先送入輸出緩衝區,輸出緩衝區將資料送到顯示器我們才能看見。什麼時候輸入緩衝區會將資料送到顯示器 什麼時候輸出緩衝區會清空 1 當輸出乙個換行符時 2 當輸入時,先清空輸出緩衝區 3 輸出緩衝區滿時 4 當主動呼叫fflush ...