1、ob緩存php
ob的基本原則:若是ob緩存打開,則echo的數據首先放在ob緩存。若是是header信息,直接放在程序緩存。當頁面執行到最後,會把ob緩存的數據放到程序緩存,而後依次返回給瀏覽器。html
ob的基本做用:瀏覽器
1) 防止在瀏覽器有輸出以後再使用setcookie()、header()或session_start()等發送頭文件的函數形成的錯誤。其實這樣的用法少用爲好,養成良好的代碼習慣。
2) 捕捉對一些不可獲取的函數的輸出,好比phpinfo()會輸出一大堆的HTML,可是咱們沒法用一個變量例如$info=phpinfo();來捕捉,這時候ob就管用了。
3) 對輸出的內容進行處理,例如進行gzip壓縮,例如進行簡繁轉換,例如進行一些字符串替換。
4) 生成靜態文件,其實就是捕捉整頁的輸出,而後存成文件。常常在生成HTML,或者整頁緩存中使用。緩存
一、開啓cookie
//此函數將打開輸出緩衝。當輸出緩衝激活後,腳本將不會輸出內容(除http標頭外),相反須要輸出的內容被存儲在內部緩衝區中。 ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] ) : bool
<?php function callback($buffer) { // replace all the apples with oranges return (str_replace("apples", "oranges", $buffer)); } ob_start("callback"); ?> <html> <body> <p>It's like comparing apples to oranges.</p> </body> </html> <?php ob_end_flush(); ?>
二、獲取內容session
//只是獲得輸出緩衝區的內容,但不清除它。 ob_get_contents ( void ) : string
//Level 0 ob_start(); echo "Hello "; //Level 1 ob_start(); echo "Hello World"; $out2 = ob_get_contents(); ob_end_clean(); //Back to level 0 echo "Galaxy"; $out1 = ob_get_contents(); ob_end_clean(); //Just output var_dump($out1, $out2);
//獲得當前緩衝區的內容並刪除當前輸出緩衝區。 ob_get_clean ( void ) : string
//刷出(送出)緩衝區內容,以字符串形式返回內容,並關閉輸出緩衝區。 ob_get_flush ( void ) : string
三、清空數據app
//此函數用來丟棄輸出緩衝區中的內容。 ob_clean ( void ) : void
//清空(擦除)緩衝區並關閉輸出緩衝 ob_end_clean ( void ) : bool
四、刷新函數
//沖刷出(送出)輸出緩衝區中的內容 ob_flush ( void ) : void
// 沖刷出(送出)輸出緩衝區內容並關閉緩衝 ob_end_flush ( void ) : bool
//刷出(送出)緩衝區內容,以字符串形式返回內容,並關閉輸出緩衝區。 ob_get_flush ( void ) : string
五、關閉spa
// 沖刷出(送出)輸出緩衝區內容並關閉緩衝 ob_end_flush ( void ) : bool
//清空(擦除)緩衝區並關閉輸出緩衝 ob_end_clean ( void ) : bool
簡單案例:code
<?php /** * Created by PhpStorm. * User: 25754 * Date: 2019/8/31 * Time: 9:46 */ $file = "./index/index.html"; if (file_exists($file) && filemtime($file) + 10 > time()) { echo "輸出緩存內容"; include "./index/index.html"; } else { //開啓ob緩存 ob_start(); include "./tmp.html"; //獲取緩衝區內容 $content = ob_get_contents(); file_put_contents("./index/index.html", $content); //發送內部緩衝區的內容到瀏覽器,而且關閉輸出緩衝區 ob_end_flush(); }