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

2021-10-25 20:46:44 字數 1210 閱讀 7569

1、什麼是緩衝區?

緩衝區的作用是把輸入或者輸出的內容先放進記憶體,而不顯示或者讀取,最本質的作用就是協調高速cpu和相對緩慢的io裝置(磁碟等)的運作。

2、php在執行的時候,在什麼地方有用到緩衝區?

當執行php的時候,如果碰到了echo print_r之類的會輸出資料的**,php就會將要輸出的資料放到php自身的緩衝區等待輸出,當php自身的緩衝區接到指令,指示要輸出緩衝區的內容時,將會把緩衝區內的資料輸出到apache上,apache接受到php輸出的資料,然後再把該資料存在到apache自身的緩衝區內等待輸出,當apache接受到指令,只是要輸出緩衝區的內容時,將會把緩衝區的內容輸出,返回到瀏覽器。

由此可見,php要輸出資料的時候,將會經過兩個緩衝區(先是自身的,然後是apache的),再返回到瀏覽器.

3、緩衝區在php中起到什麼作用?

在使用header函式之前,輸出了某些資料,這樣會導致某些錯誤。例如 cannot modify header information – headers already sent by;

echo "this is test";

header("location ");

報錯原因:在header之前已經輸出了資料,而輸出這些資料的同時,apache將會同時傳送乙個響應狀態到瀏覽器上,請求是有效的,而其後你又再次使用header函式傳送http頭,則會返回這個錯誤,http頭已經傳送出去了,你不能對他再做修改的致命錯誤。

1)使用緩衝區可以避免這個錯誤呢?

因為header函式是不受緩衝區影響的,當一碰到header函式的時候,php馬上執行apache傳送這乙個http頭都瀏覽器。而輸出的資料php開啟輸出緩衝區後, 這些資料將會存放在緩衝區,等待輸出.這樣就可以避免了之前所發生的錯誤。

解決:1.將會在所有資料讀完之後才會得到響應,降低了使用者體驗感。

2.php的執行記憶體的限制。

function readfile_chunked($filename,$retbytes=true) else{

echo file_get_contents($file);

ob_flush是和php自身相關的,而flush操作的是apache的緩衝區,所有我們在使用這兩個函式的時候,需要先執行ob_flush,再執行flush,因為我們需要先把資料從php上傳送到apache,然後再由apache返回到瀏覽器。如果php還沒有把資料重新整理到apache,就呼叫了flush,則apache無任何資料返回到瀏覽器.

PHP的輸出緩衝區

在php中有乙個名為 輸出緩衝區 ob 的東西。php的輸出流包含很多位元組,通常是echo語句或者printf 函式輸出的。這些東西的資料需要用到輸出緩衝區。一般php的輸出就是按照上面這張圖在各個緩衝區間流轉,但是cli模式下有些特殊。在cli模式下ini的配置中 output buffer 選...

PHP的輸出緩衝區

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

PHP的緩衝區

php 每執行一條輸出就把結果傳送給 php 緩衝區,php 緩衝區傳送給 apache 緩衝區,apache 緩衝區再傳送給瀏覽器。如果關閉 php 緩衝區,則每執行一條輸出就把結果直接傳送給apache 緩衝區。php.ini中 php 緩衝區預設設定 4096bytes output buff...