PHP 静态缓存 OB系列函数
生活随笔
收集整理的這篇文章主要介紹了
PHP 静态缓存 OB系列函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要::
靜態化:
靜態化是解決減輕網站壓力,提高網站訪問速度的常用方案.包括:純靜態和偽靜態。
純靜態:
將PHP程序生成靜態的HTML文件,保存到服務器的磁盤中。
原理:
在用戶訪問PHP程序時,首先檢測靜態的HTML文件是否存在,如果存在直接輸出靜態文件,如果靜態文件不存在,查詢數據庫,生成靜態文件,并輸出。
優勢:
減少PHP程序編譯和對數據庫的查詢。
數據緩沖區:
數據緩沖區是用戶前端用來存儲、操縱數據的對象。
OB系列函數::
靜態緩存簡單應用::
//在要做靜態緩存的頁面,我們定義一個變量來存放一個緩存文件的路徑(相對于當前頁面的路徑)
$filename="scoreSearch.html";
//定義一個變量來存儲緩存過期時間
$endTime = 10;
//判斷一下,緩存文件是否存在或者是否過期,如果緩存文件不存在就執行源代碼生成緩存,或者時間過期了也應該重新緩存一下,如果上述條件不滿足則調用緩存頁面顯示
if(!file_exists($filename) || filemtime($filename)+$cachetime<time())
{//緩存頁面代碼
}
else
{include($filename);//如果存在,調用緩存文件或者echo file_get_contents($filename);//取出文件內容并輸出
}//生成緩存,在頁面輸出內容之前,我們調用ob_start()方法打開內存緩沖區,將要輸出的內容放到內存里面
ob_start();//輸出將要緩存的內容
echo "######################################"; //在頁面輸出完之后,將內存中獲取到的內容保存下來,存為一個靜態頁面
//從內存緩存中獲取頁面代碼
$content = ob_get_contents();//將獲取到的內容存放到緩存文件
file_put_contents($filename,$content);//清掉內存緩存
ob_flush();//最后我們加上一段輸出,來測試是否重新緩存了,如果頁面有輸出該內容代表重新生成了緩存文件,如果沒有,說明是直接讀的緩存文件
echo 123; //測試是否調用了緩存文件,緩存文件不輸出這句話
這樣我們就簡單做了一個靜態緩存,完整代碼如下::<?php //查詢是否有緩存文件 $filename="scoreSearch.html"; $endTime = 10; if(!file_exists($filename) || time()-filemtime($filename) > $endTime){ob_start(); //啟動ob緩存echo "<html><a href='#'>aa</a></html>";$ob_str = ob_get_contents(); //返回輸出緩沖區的內容$file = fopen($filename,'w') or die("Unable to open file!"); //打開文件或者 URL('w'參數:如果文件不存在則嘗試創建之)fwrite($file,$ob_str); //寫入文件fclose($file); //關閉一個已打開的文件指針ob_flush(); }else {echo file_get_contents($filename); } ?>
把代碼運行到linux 中的靜態緩存? ?注意::: ? ??
靜態化是解決減輕網站壓力,提高網站訪問速度的常用方案.包括:純靜態和偽靜態。
純靜態:
將PHP程序生成靜態的HTML文件,保存到服務器的磁盤中。
原理:
在用戶訪問PHP程序時,首先檢測靜態的HTML文件是否存在,如果存在直接輸出靜態文件,如果靜態文件不存在,查詢數據庫,生成靜態文件,并輸出。
優勢:
減少PHP程序編譯和對數據庫的查詢。
數據緩沖區:
數據緩沖區是用戶前端用來存儲、操縱數據的對象。
OB系列函數::
- ob_start()函數:打開輸出緩沖區
- Flush():刷新緩沖區的內容,輸出
- ob_flush:沖刷出(送出)輸出緩沖區中的內容
- ob_get_contents :返回內部緩沖區的內容
- ob_end_flush: 發送內部緩沖區的內容到瀏覽器,并且關閉輸出緩沖區
- ob_implicit_flush:打開或關閉絕對刷新
- ob_clean:清空(擦掉)輸出緩沖區說明:此函數用來丟棄輸出緩沖區中的內容。 此函數不會銷毀輸出緩沖區,而像 ob_end_clean() 函數會銷毀輸出緩沖區。
- ob_end_clean:刪除內部緩沖區的內容,并且關閉內部緩沖區
- ob_get_length:返回內部緩沖區的長度
這樣我們就簡單做了一個靜態緩存,完整代碼如下::<?php //查詢是否有緩存文件 $filename="scoreSearch.html"; $endTime = 10; if(!file_exists($filename) || time()-filemtime($filename) > $endTime){ob_start(); //啟動ob緩存echo "<html><a href='#'>aa</a></html>";$ob_str = ob_get_contents(); //返回輸出緩沖區的內容$file = fopen($filename,'w') or die("Unable to open file!"); //打開文件或者 URL('w'參數:如果文件不存在則嘗試創建之)fwrite($file,$ob_str); //寫入文件fclose($file); //關閉一個已打開的文件指針ob_flush(); }else {echo file_get_contents($filename); } ?>
把代碼運行到linux 中的靜態緩存? ?注意::: ? ??
linux 中? ?需要? 開啟? ?權限? ?\html? ?
????在Linux中,權限的所有者分為用戶權限,組權限和其他權限
? ? ?權限分為:讀 r , 寫 w , 執行 x.
????權限都可以用數字來表示:r 4, w 2 , x 1,?
? ? 代碼如下:
????????? ??chmod -R 777 某文件夾.
?????????????(對文件夾進行權限修改而不是對某個文件,原因是我們在對當前文件夾進行寫入操作)
總結
以上是生活随笔為你收集整理的PHP 静态缓存 OB系列函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue3快速上手(尚硅谷视频笔记)
- 下一篇: php ob_get_contents,