1. 程式人生 > >ThinkPHP 的頁面靜態化功能的實現(一)

ThinkPHP 的頁面靜態化功能的實現(一)

頁面靜態化有很多好處,加快頁面開啟瀏覽速度,有利於搜尋引擎優化SEO,減輕伺服器負擔,網站更安全,HTML頁面不會受php相關漏洞的影響。

常說的頁面靜態化分為兩種,一種是偽靜態,即url 重寫,一種是真靜態化。

ThinkPHP 也自帶了生成靜態檔案的方法 buildHtml,方法在 /ThinkPHP/Library/Think/Controller.class.php,Line 86:

/**
 *  建立靜態頁面
 * @access protected
 * @htmlfile 生成的靜態檔名稱
 * @htmlpath 生成的靜態檔案路徑
 * @param string $templateFile 指定要呼叫的模板檔案
 * 預設為空 由系統自動定位模板檔案
 * @return string
 */
protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') {
	$content    =   $this->fetch($templateFile);
	$htmlpath   =   !empty($htmlpath)?$htmlpath:HTML_PATH;
	$htmlfile   =   $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX');
	Storage::put($htmlfile,$content,'html');
	return $content;
}

使用方法也很簡單:

(1)在根目錄下的程式入口檔案index.php中加下面這行:

define('HTML_PATH', './HTML/');//生成靜態頁面的檔案位置
(2)在專案的配置檔案config.php中加下面這行:
'HTML_FILE_SUFFIX' => '.html',// 預設靜態檔案字尾
(3)在需要生成靜態頁的action裡呼叫方法
public function index(){
	$map = "id = $_GET[id]";
	$list = M("artical")->where($map)->limit(5)->order("add_time desc")->select();
	$this->assign("news", $list);
	$this->buildHtml('news', HTML_PATH . '/news/', 'index');
	$this->display();
}

然後在根目錄下的HTML目錄中就會出現一個news.html檔案。

這種方法雖然操作簡單,但其實沒什麼意義,在現實專案中基本用不到,因為它存在很多不足:

(1)它只是一個單純的靜態的HTML檔案,訪問網頁的時候也不會被訪問到。

(2)它只是根據方法生成頁面,在列表分頁的時候,多個頁面是同一個方法產生,但靜態化出來的只有一個檔案,也就是隻有一個頁面。

所以這種方法不推薦使用!!!