將PHP的執行頁面預先轉換成HTML,是所謂的PHP靜態化方法之一。
其他還有模板替換法,opcache等方法。
靜態化的作用:
提高網站的回應速度,降低伺服器的負載;
用於搜尋引擎的SEO;
利用PHP輸出buffer直接寫成html,定時後台定時掃一次網站,是比較容易實現的網頁靜態化。
靜態化之前:
for($i=0;$i<1000;$i++){
# echo "bull
";
}
?>
靜態化:
ob_start();
for($i=0;$i<1000;$i++){
echo "bull< ;br>";
}
$str = ob_get_contents();
ob_end_clean();
$fp = fopen("test.html ","w");
fwrite($fp,$str);
fclose($fp);
echo "
?>
該段程式碼就會預先形成一個test.html,說白了其實就是用空間換取時間,像新聞類網站,發布的內容基本上寫完是不會變了,比較適合靜態化成html。
使用者造訪的時候就可以direct到這個html頁面就可以了。
首先介紹一下php
中ob快取常用到的幾個常用函數 ob_start():開啟快取機制ob_get_contents():取得ob快取中的內容ob_clean()清除ob快取中的內容,但不關閉快取ob_end_clean() 清除ob快取中的內容,並關閉緩存ob_flush 清空緩存,輸出內容,但不關閉緩存ob_end_flush 清空緩存,輸出內容,並關閉緩存#flush強制刷新輸出快取中的內容依照http協定的規定,回應內容不能在回應頭之前輸出,所以,如果在header()函數前面有內容輸出,就會出現錯誤,但使用了ob_start()後就會將回應內容先放在ob快取中,不會再訊息頭發送之前被發送,就解決了header()報錯的問題!
1 <?php 2 3 $id=$_REQUEST['id']; 4 5 //判断缓存文件是否存在,如果存在,直接输出 6 if(file_exists('content'.$id.'.html')){ 7 echo file_get_contents('content'.$id.'.html'); 8 return; 9 }10 11 //开启缓存机制12 ob_start();13 14 //到数据库中查询所需要的内容15 $conn=mysql_connect("localhost","root","root");16 mysql_select('db');17 mysql_query('set names utf8');18 19 $sql="select content from table_name where id=$id";20 $res=mysql_query($sql);21 $row=mysql_fetch_assoc($res);22 $content=$row[0];23 24 mysql_free_result($res);25 mysql_close($conn);26 echo $content;27 //将输出的内容保存到文件中,形成静态页面,在下次访问的时候,直接读取输出28 file_put_contents('content'.$id.'.html',ob_get_contents());29 30 31 ?>
如上述程式碼所示:將我們查詢到的內容直接儲存到html檔案中,如果檔案存在,之間輸出,如果不存在,則存取資料庫,執行對應的查詢過程######如果要設定檔案的過期時間,可以在if語句裡面加一個判斷條件,用於判斷快取檔案是否過期,time()-設定的過期時間# ##
以上是解析php如何利用ob快取機制實作頁面靜態化解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!