PHP頁面靜態化

動態頁面: 如PHP,加載頁面時候會進行 語法分析,編譯,運行。
靜態文件: 如html,直接加載,不需分析
動態頁面靜態化實質: 生成靜態HTML文件
優點: 減少服務器腳本的計算時間;降低服務器的響應時間(但不適合經常改變的網站,如微博等)
僞靜態: 將?id=9這種的URL轉換成可記憶的友好地址
buffer: 緩衝區,內存地址空間,用於存儲數據區域
PHP輸出流程: 內容–>php buffer–>tcp–>終端
php運行的結果先放入緩衝區(buffer),只有當緩衝區滿了或者php運行完畢,纔將數據輸出去。
緩衝區是通過php.ini中的output_buffering變量控制。output_buffering的默認值是off,可以設置大於0的數值來打開buffer。
但是這裏需要注意的是:
1)使用ini_set是無法修改buffer的設置。
2)不管php.ini中output_buffering設置,cli模式下的php始終默認是output buffering爲關閉的。但是你可以通過ob_start()將buffer打開。
大家都說:ob_start()是將php buffer打開,ob_end_flush()是將php buffer關閉。需要注意的是php.ini中php buffer是關閉的,再次調用ob_end_flush()會報warning。
基本方式: file_put_contents(‘filename’,’contents’)寫入文件;php內置緩存機制output_buffering

#index.php
<?php
//連接數據庫操作獲取數據
require_once("db.php"); //引入數據庫文件

$connect = DB::getInstance()->connect();
$sql="SELECT *FROM news WHERE catagory_id=1 AND status=1 ORDER BY id LIMIT 5;";
$result = mysql_query($sql,$connect);
$news=array();
while($row = mysql_fetch_array($result)){

    $news[]=$row;
}
//開啓buffer緩存
ob_start();
//引入模板文件
require_once("qq.php"); 
//html代碼也是通過緩存輸出的,所以可以把它截下來並清空緩存
//將模板文件qq.php寫入靜態頁面index.shtml
 if(file_put_contents('index.shtml',ob_get_clean())){
    echo 'success';
}else{
    echo 'error';
}
#qq.php
<html>
<?php foreach($news as $key=>$val){
    echo $val['title'];
}?>
</html>
#index.shtml
//輸出的內容和index.php一樣個,只是頁面爲靜態頁面,訪問速度更快

方法一:進行時間判斷,看是否展示新頁面或者展示shtlm

#index.php
//寫在開頭
if(is_file('index.shtml')&&time()-filemtime('index.shtml')<300){
    require_once('index.shtml');
}else{
..............
}

方法二:手動觸發,點擊後將.php寫入靜態頁面shtml

//後續補充

方法三:通過Linux下的crontab定時任務來操作

//後續補充

/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章