php頁面的靜態化很有必要,尤其是在cms系統中,一些內容一旦生成,基本上不會有變化,這時如果用html將頁面靜態化,無疑會減少服務其解析php頁面的負擔。
無論是利用框架還是簡單的指令碼,原理基本一致:就是利用php進行檔案操作,替換html模板中的動態元素。
關鍵點: 生成靜態內容
建立靜態檔案
儲存靜態檔案標識
刪改靜態檔案
第一點:生成靜態內容 就是利用建立文章得到的一些內容,這個基本上類似,但是也有各自的特色等,例如:標題,時間,作者,關鍵字,**,內容等。把這些內容通過編輯器編輯後提交到生成頁面,然後讀取模板檔案(.html) 在模板檔案中有以上相應欄位的關鍵字,就是替換的關鍵字,例如,這個因人而異,只要不重複就可以,然後用函式把從提交頁面得到的相應內容替換相應的字段。最後得到的就是靜態的內容。
第二點:建立靜態檔案,php有一系列相應的檔案操作函式可以迅速的建立靜態檔案,在這裡面有幾點需要注意,首先是標題,我看過有些phper建立靜態檔案直接用數字或者字母等無關對應文章的內容來做標題,這樣對於搜尋引擎的優化無法起到作用,其次是檔案的唯一性,不要起得檔名重複了,這樣會引起未知錯誤。再次是檔案的許可權問題,要能建立檔案 但是又不能讓檔案許可權有安全漏洞。
第三:儲存靜態檔案標識,這裡用到了資料庫,其實文章的內容等text型別的資料一般也存在資料庫中,但是只是用來生成或者更新靜態檔案,每次讀取的時候是讀取的靜態檔案。這裡一般的標識是文章的標題等。然後對應的每個標識有乙個相應的path(路徑)字段用來做鏈結到靜態檔案的超連結。
第四:雖然生成的檔案變化的次數不多,但是更改是少不了的,這時候就需要重新生成靜態頁面了 用unlink函式刪除原來的頁面然後重複上面的步驟生成乙個新的頁面,同時更新資料庫相應的內容。
下面是例子,
其中的資料庫操作類檔案我已經發表過了在php運算元據庫mysql類檔案
這個例子有些粗糙 但是我只是讓說明下上面的過程,至於完善的php靜態類我稍後會整理發表
資料庫create table if not exists `news` (
`id` int(5) not null auto_increment,
`title` varchar(100) not null,
`content` text not null,
`path` varchar(100) not null,
primary key (`id`)
) engine=myisam default charset=utf8 auto_increment=5 ;
php**
header("content-type:text/html;charset=utf8"); $action = empty($_post['action'])?'':$_post['action']; if($action == 'add')', $title, $html_content); //在模板中替換相應的標題 $html_content = str_replace('', $content, $html_content);//在模板中替換相應的內容 $filename = 'htmls/'.$filename.'.html';//獲得靜態頁面的全部路徑,相對路徑 if(!file_exists($filename)) $db = new db;//生成資料庫操作類 $sql = "insert into news(`title`,`content`,`path`) values ('$title','$content','$filename')"; $check = $db->executesql($sql); //把資料儲存到資料庫中 if($check)else }
至於提交的頁面就省略了。
目錄結構
稍後會總結成乙個比較完善的php靜態頁面生成類
PHP靜態頁面
今天自己研究了一下靜態頁面,其實也沒有那麼高深。當然,我現在實現的只是最簡單的情況,只能根據過期時間來處理,後面還有由資料的更新來觸發靜態頁面的更新,等等更加有效地手段,還有很長的路要走。如果我繼續研究下去,並且有所收穫的話,也會在這篇部落格裡持續更新。這是基於phpcms的,乙個模組實現一類功能,...
PHP保持靜態頁面,php實現頁面靜態化
php實現頁面靜態化 2017 4 19 hubo php開發 1.頁面分為靜態頁面和動態頁面,載入動態頁面會去執行動態檔案 php jsp等 會經過語法分析 編譯 執行等程式,而靜態頁面就是html 不需要經過動態檔案的過程,直接執行就可以了,所以載入靜態檔案要比載入動態檔案要快。3.動態頁面靜態...
PHP生成靜態頁面
php生成靜態頁面 php生成靜態頁面的條件 使用ob start 方法開啟快取區也是生成靜態頁面的開始 使用ob get contect 方法獲取快取內容 使用ob clean 方法清空快取 ob start 開啟快取區 filename date ymdhis rand 1000,9999 ht...