PHP的緩衝區

2021-07-06 03:09:30 字數 1754 閱讀 2022

php 每執行一條輸出就把結果傳送給 php 緩衝區,php 緩衝區傳送給 apache 緩衝區,apache 緩衝區再傳送給瀏覽器。

如果關閉 php 緩衝區,則每執行一條輸出就把結果直接傳送給apache 緩衝區。

php.ini中 php 緩衝區預設設定

// 4096bytes

output_buffering = 4096

// 有3種配置引數

on 開啟緩衝區

off 關閉緩衝區

整數 開啟緩衝區,而且當緩衝區的內容超過"整數"的時候,自動重新整理緩衝區(把資料傳送到apache)

php.ini中 apache 緩衝區預設設定

implicit_flush = off

// 有2種配置引數

on 自動重新整理apache緩衝區,也就是,當 php 傳送資料到 apache 的緩衝區的時候,不需要等待其他指令,直接就把輸出返回到瀏覽器

off 不自動重新整理apache緩衝區,接受到資料後,等待重新整理指令

php 緩衝區相關函式

ob_​start // 開啟 php 緩衝區,不管 output_buffering 怎麼設定

ob_​flush // 把 php 緩衝區的內容傳送給 apache 緩衝區

ob_​end_​flush // 把 php 緩衝區的內容傳送給 apache 緩衝區並關閉

ob_​clean // 清除 php 緩衝區

ob_​end_​clean // 清除並關閉 php 緩衝區

ob_​get_​contents // 獲取 php 緩衝區的內容

ob_​get_​clean // 獲取 php 緩衝區的內容並清除

ob_​get_​flush // 把 php 緩衝區的內容傳送給 apache 緩衝區,以字串形式返回內容,並關閉緩衝區

ob_​get_​length // 返回輸出緩衝區內容的長度

...

apache 緩衝區相關函式

void flush ( void ) // 輸出 apache 緩衝區
有些apache的模組,比如mod_gzip,可能自己進行輸出快取,這將導致flush()函式產生的結果不會立即被傳送到客戶端瀏覽器。

在不開啟緩衝區的情況下,必須把資料全部讀出,如果檔案很大,使用者將會在所有資料讀完之後才會得到響應,降低了使用者體驗感。而且,為了保證伺服器的穩定,管理員通常會把 php 的執行記憶體設乙個限制(通過php.ini總的memory_limit,其預設值是8m),也就是每個php程式使用的記憶體不能使用超過這個值的記憶體。

如果開啟了緩衝區,當php程式讀完檔案的某一段,然後馬上輸出到 apache 緩衝區,然後讓 apache 馬上返回到瀏覽器,這樣就可以減少使用者等待時間。那後面的資料怎麼辦呢?我們可以寫乙個 while 迴圈,一直一段一段地讀取檔案,每讀一段,就馬上輸出,直到把檔案全部輸出為止,這樣瀏覽器就可以持續地接受到資料,而不必等到所有檔案讀取完畢。

就是所謂的」頁面靜態化」或」快取」。

ob_start();

echo '頁面內容';

$string = ob_get_contents();

file_put_contents('index.html', $string);

ob_flush();

flush();

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

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

重新整理PHP緩衝區

為你的站點加速 php技巧 在當前 php 版本的預設配置下,輸出緩衝 output buffering 是被開啟的。舊版本則不是這樣,在舊版本的 php 中,字串在每次被輸出的時候 通過 echo 或 print 函式 都會觸發一次傳送到客戶端瀏覽器的動作。輸出緩衝 的引入,使得這一過程更加快速 ...

PHP的輸出緩衝區

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