php頁面靜態化實現思路

2021-06-29 07:35:13 字數 3539 閱讀 4224

php頁面靜態化實現,主要有兩個方面的問題要處理,第一是怎麼樣生成靜態化檔案,第二是怎麼樣更新靜態檔案。

一、 靜態頁面生成

靜態頁面生成,主要的方式是通過php的 output buffer系列函式來實現。output buffer(這裡簡稱ob)是php的輸出緩衝,在php輸出時,先要寫入到這個緩衝區,只有當php程式結束或者緩衝區寫滿的時候,才會輸出到瀏覽器。基於這個特性,我們的思路是,執行php動態程式生成頁面,通過ob系列函式,如ob_get_contents()獲得緩衝區中的頁面內容,然後用檔案操作函式如 file_put_content(), 將頁面儲存到檔案中。

//開啟output buffer 緩衝區,如果php已經開啟,則不需要。

// php.ini 中,output_buffering = 4096

if(!ini_get('output_buffering'))

//從資料庫或快取中獲取資料,本行是偽**,get_from_stroge需要具體實現。

$data = get_from_stroge();

//呼叫模板組織成頁面

require "templates/index.php";

//獲取緩衝區中的頁面,並清除緩衝區

$content = ob_get_clean();

//將頁面儲存成為靜態檔案

file_put_contents("index.htm",$content);

index.htm就生成了,在瀏覽器中打入static.lukexp.com/index.htm 就能開啟直接訪問生成的靜態頁面,static.lukexp.com是我本地的虛擬網域名稱,可以通過修改hosts檔案和apache虛擬站點來實現。

//博文內容

//***************** getcomment.php ************************

if(ini_get('output_buffering')!==false)

$blog_id = $_get['id'];

$commentdata = get_comment_data($blog_id);

require_once("template/comment.php");

$content = ob_get_clean();

$result = array('code'=>0,'msg'=>'',data=>array('contenthtml'=>$content));

echo json_encode($result);

二、 靜態頁面的更新

我們說的內容不變的頁面生成靜態頁面,但這裡的不變也是相對的,比如,博文做了編輯,這個時候,靜態頁面也要做更新了。更新通常有四種方式:主動觸發,過期重建,定時更新,還有被動生成。

1、主動觸發的方式,例如上文說的博文做了編輯,這個時候,我們可以在博文儲存的時候,同步生成新的博文靜態頁面。也可以專門提供乙個按鈕,讓使用者手動觸發重新生成靜態頁面的操作。

2、過期重建方式,生成的時候對靜態頁面的時間做乙個判斷,超過了一定的時間,則重新生成。如:

if(!file_exists("index.htm") || time()-filemtime("index.htm")>300)

$data = get_from_stroge();

require "templates/index.php";

$content = ob_get_clean();

file_put_contents("index.htm",$content);

}

3、定期更新。定時更新是使用windows的計畫任務或者linux的cronjob 之類的工具,定時執行指令碼來更新靜態頁面。以cronjob為例

/etc/init.d/cron reload以上命令的意思是,每隔1分鐘,執行/var/www/static.lukexp.com/update.php,這裡update.php就是生成靜態頁面的**。

4、被動生成方式。是指在訪問到某個頁面的時候,如果該頁面已經存在則正常訪問,否則就生成靜態頁面並顯示。這個過程中,需要用的url rewrite即偽靜態。例如,上文中博文的靜態頁面的url是static.lukexp.com/blog/1.htm,而對應的動態url 是static.lukexp.com/index.php?act=blog&id=1。

以apache為例,首先,我們要開啟apache的 rewrite模組,在httd.conf中,去掉 loadmodule rewrite_module modules/mod_rewrite.so 前的「#」,並在 虛擬站點配置中新增rewrite規則,

以上的意思就是,/blog/1.htm不存在的時候,就訪問index.php?act=blog&id=1,而index.php則根據根據引數呼叫資料並生成靜態頁面,然後顯示,**如下:

$act = $_get['act'];

$id = $_get['id'];

if(ini_get('output_buffering')!==false)

//從資料庫或快取中獲取資料,本行是偽**,get_from_stroge需要具體實現。

//$data = get_from_stroge($act,$id);

//呼叫模板組織成頁面

require "templates/.php";

//獲取緩衝區中的頁面,但不清除緩衝區

$content = ob_get_contents();

//將頁面儲存成為靜態檔案

$stfile = "/.htm";

file_put_contents($stfile,$content);

在我們實際應用的過程中,以上幾種靜態檔案的生成和更新方式,要根據實際需求,挑選其中一種或者綜合幾種方式來實現。一般不會單獨出現。例如上例中,我們也可以直接到index.php,然後在index.php中根據時間來判斷模板是否過期,如果不過期則載入靜態檔案,否則重新生成。總之,還是要具體的業務需求來挑選實現方式。

PHP保持靜態頁面,php實現頁面靜態化

php實現頁面靜態化 2017 4 19 hubo php開發 1.頁面分為靜態頁面和動態頁面,載入動態頁面會去執行動態檔案 php jsp等 會經過語法分析 編譯 執行等程式,而靜態頁面就是html 不需要經過動態檔案的過程,直接執行就可以了,所以載入靜態檔案要比載入動態檔案要快。3.動態頁面靜態...

php實現頁面靜態化

php生成靜態html頁面的方法 1.gid get gid 0 商品id goods statis file goods file gid.html 對應靜態頁檔案 expr 3600 24 10 靜態檔案有效期,十天 if file exists goods statis file else e...

PHP實現頁面靜態化

一 buffer認知 buffer php存在的緩衝區,乙個記憶體位址空間,主要用於儲存資料區域 可在php.ini中開啟引數 output buffering on 或者在php檔案中手動開啟 ob start 開啟輸出控制緩衝 ob get contents 返回輸出緩衝區內容 ob clean...