概念
PHP靜態(tài)化分為:純靜態(tài)化 和 偽靜態(tài)化;純靜態(tài)化又分為:局部靜態(tài)化 和 完全靜態(tài)化
純靜態(tài)化:是把PHP生成的動(dòng)態(tài)頁(yè)面保存成靜態(tài)的html文件,用戶(hù)訪(fǎng)問(wèn)該靜態(tài)頁(yè)面,而不是用戶(hù)每一次訪(fǎng)問(wèn)都重新生成一張相同的網(wǎng)頁(yè),優(yōu)點(diǎn)就是減小服務(wù)器開(kāi)銷(xiāo),
局部靜態(tài)化:是生成的靜態(tài)文件中,有局部的數(shù)據(jù)還是通過(guò)ajax技術(shù)動(dòng)態(tài)獲取的;
完全靜態(tài)化:即不存在動(dòng)態(tài)獲取數(shù)據(jù)的情況,所以?xún)?nèi)容都來(lái)自靜態(tài)的html頁(yè)面
偽靜態(tài)化:其實(shí)還是動(dòng)態(tài)訪(fǎng)問(wèn),其實(shí)質(zhì)是動(dòng)態(tài)生成數(shù)據(jù),你訪(fǎng)問(wèn)的網(wǎng)址類(lèi)似于”http://yourhost,com/index/post/12″,是一個(gè)靜態(tài)地址,該地址多見(jiàn)于博客地址,但偽靜態(tài)化中,你訪(fǎng)問(wèn)的網(wǎng)址實(shí)際上經(jīng)過(guò)服務(wù)器解析,還是會(huì)解析成類(lèi)似于”http://yourhost,com/?c=index&a=post&id=12″的地址,所以稱(chēng)之為偽靜態(tài)化
偽靜態(tài)的優(yōu)點(diǎn):美觀;便于搜索引擎收錄
利用php內(nèi)置的ob函數(shù)實(shí)現(xiàn)頁(yè)面的靜態(tài)化,大概步驟如下:
<?php ob_start();//開(kāi)啟緩存
?>
<p>我是要生成的靜態(tài)內(nèi)容,也可以在該處鏈接數(shù)據(jù)庫(kù)生成動(dòng)態(tài)內(nèi)容于此</p>
<?php
file_put_contents( ‘index.html’, ob_get_clean() );//把生成的靜態(tài)內(nèi)容保存到index.html文件,而不是輸出到瀏覽器
?>
觸發(fā)系統(tǒng)生成純靜態(tài)化頁(yè)面
方法:頁(yè)面添加緩存時(shí)間;手動(dòng)觸發(fā)
頁(yè)面添加緩存時(shí)間
<?php
$file_name = ‘index.html’;
if(file_exists( $file_name ) && filemtime( $file_name ) – time() < 10 ){//如果文件是存在并且最后修改時(shí)間小于設(shè)定時(shí)間 10s
//filemtime( $file_name );//得到文件最后修改時(shí)間
//time();//當(dāng)前時(shí)間
require_once( $file_name );//引入文件
}else{
ob_start( );
?>
<p>我是要生成的靜態(tài)內(nèi)容</p>
<?php
file_put_contents( $file_name, ob_get_contents() )//輸出到瀏覽器
}
如果后臺(tái)數(shù)據(jù)存在更細(xì),定時(shí)刷新不能及時(shí)更改靜態(tài)頁(yè)面,怎么辦?所有引入了手動(dòng)觸發(fā)的功能
手動(dòng)觸發(fā)
手動(dòng)觸發(fā)的大概樣式就類(lèi)似于優(yōu)酷視頻評(píng)論區(qū),當(dāng)有新評(píng)論時(shí),會(huì)后一條屎黃屎黃的小提示框:“有新評(píng)論,點(diǎn)擊更新”,也類(lèi)似于app中的下滑刷新的機(jī)制,自己去尋找吧。。
除此之外還有Linux下的crontab定時(shí)掃描程序
*/5****php/data/static/index.php
局部靜態(tài)化內(nèi)容不做敘述
// 靜態(tài):http://yourhost.com/index.php/12/2.html
// 動(dòng)態(tài):http://yourhost.com/index.php?type=12&id=2
$pathinfo = $_SERVER[‘PATH_INFO’];
if( preg_match(‘/^//(/d+)//(/d+)/’, $pathinfo,$path) ){
$type = $path[1];
$id = $path[2];
echo ‘type=’,$type,’&id=’,$id;//獲得type 和 id 進(jìn)一步處理
}else{
//錯(cuò)誤處理
echo “err”;
}
Apache服務(wù)器rewrite配置
在httpd.conf文件中,找到
#注釋?zhuān)喝サ羟斑叺?#8221; # “開(kāi)啟rewrite服務(wù),重啟服務(wù)器生效
#LoadModule rewrite_module modules/mod_rewrite.so
#注釋?zhuān)篽ttp-vhosts.conf文件是虛擬域名配置的文件,開(kāi)啟改文件可以配置虛擬域名,一般默認(rèn)是開(kāi)啟的
#Include conf/extra/httpd-vhosts.conf
如果你不會(huì)配置虛擬域名,可以參考我的另外一篇文章:WAMPServer配置修改及問(wèn)題匯總
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “c:/Apache24/docs/dummy-host.example.com”
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog “logs/dummy-host.example.com-error.log”
CustomLog “logs/dummy-host.example.com-access.log” common
#配置規(guī)則如下所示
RewriteEngine on
RewriteRule ^/vidio/([0-9]*).html$ /vidio.php?id=$1
</VirtualHost>
復(fù)制代碼
RewriteEngine其他配置規(guī)則以后會(huì)再添加
現(xiàn)在你訪(fǎng)問(wèn)http://yourhost.com/vidio/12.html時(shí),相當(dāng)于訪(fǎng)問(wèn)了http://yourhost.com/vidio.php?id=12
問(wèn)題:配置完上面的內(nèi)容后,又存在以下問(wèn)題?如果項(xiàng)目目錄下存在該靜態(tài)頁(yè)面時(shí),到底是訪(fǎng)問(wèn)我們的靜態(tài)頁(yè)面還是訪(fǎng)問(wèn)我們偽靜態(tài)的文件呢?
經(jīng)過(guò)測(cè)試我們發(fā)現(xiàn),并不會(huì)訪(fǎng)問(wèn)靜態(tài)頁(yè)面,如果我們想訪(fǎng)問(wèn)我們的靜態(tài)頁(yè)面怎么辦?
偽靜態(tài)和靜態(tài)頁(yè)面沖突時(shí)解決辦法:
#完整的配置規(guī)則如下
RewriteEngine on
#添加以下兩項(xiàng),!-d 和 !-f 分別表示 目錄 和 文件
#當(dāng)訪(fǎng)問(wèn)的偽靜態(tài)和相應(yīng)的靜態(tài)目錄和文件沖突時(shí),訪(fǎng)問(wèn)靜態(tài)頁(yè)面
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^/index/([0-9]*).html$ /index.php?id=$1
復(fù)制代碼
如果你覺(jué)得本文對(duì)您有幫助,可以留言或點(diǎn)贊哦!
新聞熱點(diǎn)
疑難解答