一直用smarty的cache,但感覺還是要自己做乙個,才有感覺。網上有很多牛人的功能比較完備,打算先自己搞簡單的再慢慢豐滿。這兩天做了乙個比較簡單的,在hi.baidu.net/alex_wang58記錄一下。
mod_rewrite (rewritecond,rewriterule)位址重寫,
ob系列函式緩衝
file_put_contents生成html
(1)存在則直接轉到對應的html頁面。
(2)不存在通過php讀取資料庫資料,然後生成html檔案,並存放到指定目錄。
三、實現方法:
(1)位址重寫用apahce的mod_rewrite模組中的rewriterule指令實現重寫(mod_rewrite的開啟和簡單規則見本博另一篇 ... 0346ffb3fb952e.html )。
(2)判斷文章是否存在用apahce 的mod_rewrite模組中的rewritecond指令
(3)生成html檔案:
ob_star()開啟緩衝,將讀取文章的php包含進來,然後用file_put_contents將獲得的緩衝內容寫入指定html檔案。
四、**
/test 目錄下的 .htaccess 檔案內容:
rewriteengine on
rewriterule ^index.html$ /news.php [l]
rewritecond % !-s
rewriterule ^html/news_([0-9]+).html$ getnews.php?id=$1 [l]
對news.php的訪問將通過 localhost/test/index.html 實現由第二句 rewriterule ^index.html$ test/news.php [l] 實現
header("content-type:text/html; charset=gbk"); //以防出現亂碼
mysql_connect("localhost","root","");
mysql_query('set names gbk'); //我的資料庫用的gbk編碼,請根據自己實際情況調整
mysql_select_db("test");
$sql = "select `id`,`title` from `arc` order by `id` desc";
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ) !-s
實現:rewritecond 是「定向重寫發生條件」。request_filename 這個引數是「客戶端請求的檔名」
'-s' (是乙個非空的常規檔案[size]) 測試指定檔案是否存在而且是乙個尺寸大於0的常規的檔案. !表示匹配條件的反轉。
所以 rewritecond 這句就表示當請求鏈結不存在時 執行下面的 rewriterule 規則。
所以當請求的news_3.html 不存在時會重寫位址讓 getnews.php?id=3 來處理(否則如果news_3.html 存在則直接就載入該html檔案)。
getnews.php ***************====>功能:判斷引數傳輸的完整性,並呼叫相應檔案生成html檔案。
$id =$_get['id'];
$root =& $_server['document_root'];
$filename = "news_".$id.".html";
$file = $root."/test/html/".$filename;
ob_start();
include($root."/test/newsdetail.php");
file_put_contents($file,ob_get_contents());
ob_end_flush();
newsdetail.php ********************> 從資料庫中讀取資料,產生新聞內容,內容被getnews.php捕獲
header("content-type:text/html; charset=gbk");
if( isset($_get['id']) )else !-s。看似可行,但結果會產生「迴圈重定向」的問題。
當news_3.html 不存在時 我們需要用 getnews.php生成news_3.html ,生成完畢後需要轉向到 news_3.html ,於是又形成了一次請求mod_rewrite又啟動把 news_3.html重寫為 getnews.php?id=3 這就形成了死迴圈了。所以把檔案存在性的判斷交給 rewritecond ,指定的html檔案不存在時才啟用重寫規則。這樣迴圈重定向的問題就沒有了。
一開始沒有採用fopen開啟newsdetail.php,然後再將生成的內容fwrite成html檔案,然後include輸出靜態頁面。後來在fhjr999的提醒下,改為:將newdetail.php包含進getnews.php,通過ob系列函式將生成的內容放入緩衝,然後再生成html檔案。ob的效率是前者的20倍左右。
php生成靜態頁
先建立一chtml資料庫 表名稱為bihtml create table bihtml id int 11 auto increment not null,szdtitle varchar 30 szdcontent text primary key id 在表中插入兩條記錄 insert into...
PHP生成靜態頁
最近作的乙個專案中用到了兩種用 php 生成靜態頁面的 方法 回想起當初自己還不知道如何生成靜態頁面的迷惘,以及看不懂高手寫的文章的痛苦,覺得自己有必要站出來為還不知道如何生成靜態頁的phper寫乙個通俗點文章,以幫助他們盡快掌握這個好東西。在我之前所見的文章中要不是用 堆砌空間就是用高手與高手交流...
PHP生成靜態頁
複製 如下 程式設計客棧 function makedir mudir 建立目錄 function writemod filemodname 先創子摸板檔案路徑 function writeweb content,web,modfile 更新各自的子摸板檔案 modfile是子摸板名字 nbs m ...