php開始頁,php簡單靜態頁生成過程

2021-10-25 21:01:04 字數 2456 閱讀 4312

一直用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 ...