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