首頁 >php教程 >php手册 >分享常見的幾種頁面靜態化的方法_php基礎

分享常見的幾種頁面靜態化的方法_php基礎

WBOY
WBOY原創
2016-05-16 08:59:483505瀏覽

什麼是php靜態化

php靜態化的簡單理解就是讓網站產生頁面以靜態html的形式展現在訪客面前,php靜態化分純靜態化與偽靜態化,兩者的差別在於php產生靜態頁的處理機制不同。

為什麼要讓網頁靜態化

一、加快頁面開啟瀏覽速度,靜態頁面無需連接資料庫開啟速度較動態頁面有明顯提升;
二、有利於搜尋引擎優化seo,baidu、google都會優先收錄靜態頁面,不僅被收錄的快還收錄的全;
三、減輕伺服器負擔,瀏覽網頁無需呼叫系統資料庫;
四、網站更安全,html頁面不會受php相關漏洞的影響; 觀看一下大一點的網站基本上全是靜態頁面,而且可以減少攻擊,防sql注入。

資料庫出錯時,不影響網站正常存取。
生成html文章雖操作上麻煩些,程式上繁雜些,但為了更利於搜索,為了速度更快些,更安全,這些犧牲還是值得的。

php產生靜態html頁面的方法

利用php模板產生靜態頁面

php模板實現靜態化非常方便,例如安裝和使用php smarty實現網站靜態化,也可以自己寫一套模板解析規則,常見的可以模仿各類cms的模板規則。

1.使用php檔案讀寫功能與ob快取機制產生靜態頁
例如某個商品的動態詳情頁網址是: http://xxx.com?goods.php?gid=112
那麼這裡我們根據這個位址讀取一次這個詳情頁的內容,然後儲存為靜態頁,下次有人造訪這個商品詳情頁動態位址時,我們可以
直接把已產生好的對應靜態內容檔輸出出來。

<!--?php
$gid = $_get['gid']+0;//商品id
$goods_statis_file = "goods_file_".$gid.".html";//对应静态页文件
$expr = 3600*24*10;//静态文件有效期,十天
if(file_exists($goods_statis_file)){
  $file_ctime =filectime($goods_statis_file);//文件创建时间 
	 if($file_ctime+$expr-->time()){//如果没过期
	  echo file_get_contents($goods_statis_file);//输出静态文件内容
		 exit;
	 }else{//如果已过期
		 unlink($goods_statis_file);//删除过期的静态页文件
		 ob_start();
 
			//从数据库读取数据,并赋值给相关变量
 
			//include ("xxx.html");//加载对应的商品详情页模板
 
			$content = ob_get_contents();//把详情页内容赋值给$content变量
			file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
			ob_end_flush();//输出商品详情页信息
	 }
}else{
 ob_start();
 
 //从数据库读取数据,并赋值给相关变量
 
 //include ("xxx.html");//加载对应的商品详情页模板
 
 $content = ob_get_contents();//把详情页内容赋值给$content变量
 file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
 ob_end_flush();//输出商品详情页信息
 
}
 
?>

2.使用nosql從記憶體讀取內容(其實這個已經不算靜態化了而是快取);

以memcache為例:


<!--?php
$gid = $_GET['gid']+0;//商品id
$goods_statis_content = "goods_content_".$gid;//对应键
$expr = 3600*24*10;//有效期,十天
 
$mem = new Memcache; 
$mem--->connect('memcache_host', 11211);
 
$mem_goods_content = $mem->get($goods_statis_content);
 
 
 
if($mem_goods_content){
  echo $mem_goods_content;
}else{
 ob_start();
 
 //从数据库读取数据,并赋值给相关变量
 
 //include ("xxx.html");//加载对应的商品详情页模板
 
 $content = ob_get_contents();//把详情页内容赋值给$content变量
 $mem->add($goods_statis_content,$content, false, $expr);
 ob_end_flush();//输出商品详情页信息
 
}
 
?>

memcached是鍵值一一對應,key預設最大不能超過128個位元組,value預設大小是1m,因此1m大小滿足大多數網頁大小的儲存。
以上就是頁面靜態化的相關方法,希望對朋友有幫助

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn