天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

php簡單靜態(tài)頁生成過程

一、用到的相關(guān)技術(shù)關(guān)鍵詞:php, Apache,
                                               mod_rewrite (RewriteCond,RewriteRule)地址重寫,
                                               ob系列函數(shù)緩沖
                                               file_put_contents生成html

二、流程:用戶發(fā)出請求url?id=x ,判斷文章是否存在
                        (1)存在則直接轉(zhuǎn)到對應(yīng)的Html頁面。
                        (2)不存在通過php讀取數(shù)據(jù)庫數(shù)據(jù),然后生成html文件,并存放到指定目錄。

三、實(shí)現(xiàn)方法:
(1)地址重寫用Apahce的mod_rewrite模塊中的RewriteRule指令實(shí)現(xiàn)重寫(mod_rewrite的開啟和簡單規(guī)則見本博另一篇http://hi.baidu.com/alex%5Fwang5 ... 0346ffb3fb952e.html )。
(2)判斷文章是否存在用Apahce 的mod_rewrite模塊中的RewriteCond指令
(3)生成html文件:
           ob_star()打開緩沖,將讀取文章的php包含進(jìn)來,然后用file_put_contents將獲得的緩沖內(nèi)容寫入指定HTMl文件。
四、代碼


/Test 目錄下的 .htaccess 文件內(nèi)容:

RewriteEngine On
RewriteRule ^index.html$ /news.php [L]
RewriteCond %{REQUEST_FILENAME}  !-s
RewriteRule ^html/news_([0-9]+).html$ getnews.php?id=$1 [L]

對news.php的訪問將通過 localhost/Test/index.html 實(shí)現(xiàn)由第二句 RewriteRule ^index.html$ Test/news.php [L] 實(shí)現(xiàn)

news.php =============================> news.php將列出文章標(biāo)題鏈接。
復(fù)制代碼 代碼如下:
<?php
header("Content-Type:text/html; charset=gbk"); //以防出現(xiàn)亂碼
mysql_connect("localhost","root","");
mysql_query('SET NAMES gbk'); //我的數(shù)據(jù)庫用的gbk編碼,請根據(jù)自己實(shí)際情況調(diào)整
mysql_select_db("test");

$sql = "Select `id`,`title` FROM `arc` order by `id` DESC";
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ){
echo "<a href='/Test/html/news_$row[id].html'>$row[title]</a><br>";
}
?>

比如生成了<a href='/Test/html/news_3.html'>php靜態(tài)頁實(shí)現(xiàn)</a>
當(dāng)點(diǎn)擊鏈接發(fā)出對 http://localhost/Test/html/news_3.html 的請求時
Apache將會判斷 news_3.html  是否存在,由 .htaccess中的第三句 
RewriteCond %{REQUEST_FILENAME}  !-s 
實(shí)現(xiàn):

     RewriteCond  是“定向重寫發(fā)生條件”。REQUEST_FILENAME 這個參數(shù)是“客戶端請求的文件名”
'-s'  (是一個非空的常規(guī)文件[size]) 測試指定文件是否存在而且是一個尺寸大于0的常規(guī)的文件.  !表示匹配條件的反轉(zhuǎn)。
所以 RewriteCond 這句就表示當(dāng)請求鏈接不存在時 執(zhí)行下面的 RewriteRule 規(guī)則。

所以當(dāng)請求的news_3.html 不存在時會重寫地址讓 getnews.php?id=3 來處理(否則如果news_3.html 存在則直接就加載該html文件)。

getnews.php ===================>功能:判斷參數(shù)傳輸?shù)耐暾裕⒄{(diào)用相應(yīng)文件生成html文件。
復(fù)制代碼 代碼如下:
<?php
$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 ====================> 從數(shù)據(jù)庫中讀取數(shù)據(jù),產(chǎn)生新聞內(nèi)容,內(nèi)容被getnews.php捕獲
復(fù)制代碼 代碼如下:
<?php
header("Content-Type:text/html; charset=gbk");
if( isset($_GET['id']) ){
$id = & $_GET['id'];
}else{
header("Location: http://127.0.0.1/lean/Test/html/news_failed.html");
exit();
}
mysql_connect("localhost","root","");
mysql_query('SET NAMES gbk');
mysql_select_db("test");
$id =$_GET['id'];

$sql = "Select `news` FROM `arc` Where `id`=$id";
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ){
echo $row['news'];
}
?>

這樣將會在/Test/html 目錄下產(chǎn)生以 news_文章ID.html 命名的html文件。 

PS: 一開始在判斷是否存在相應(yīng)html頁面時采用的是 php 內(nèi)置的 file_exists() 判斷,而不用Apache的 RewriteCond,也即沒有 RewriteCond %{REQUEST_FILENAME}  !-s。看似可行,但結(jié)果會產(chǎn)生“循環(huán)重定向”的問題。 
       當(dāng)news_3.html 不存在時 我們需要用 getnews.php生成news_3.html ,生成完畢后需要轉(zhuǎn)向到 news_3.html ,于是又形成了一次請求mod_rewrite又啟動把 news_3.html重寫為 getnews.php?id=3 這就形成了死循環(huán)了。所以把文件存在性的判斷交給 RewriteCond ,指定的html文件不存在時才啟用重寫規(guī)則。這樣循環(huán)重定向的問題就沒有了。 
       一開始沒有采用fopen打開newsDetail.php,然后再將生成的內(nèi)容fwrite成html文件,然后include輸出靜態(tài)頁面。后來在fhjr999的提醒下,改為:將newDetail.php包含進(jìn)getnews.php,通過ob系列函數(shù)將生成的內(nèi)容放入緩沖,然后再生成html文件。ob的效率是前者的20倍左右。

php技術(shù)php簡單靜態(tài)頁生成過程,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 三级视频网站 | 69夫妻交友网 | 国产精品观看视频免费完整版 | 伊人青青草 | 亚洲AV久久无码精品九九软件 | 丝袜美女自摸 | 大中国免费视频大全在线观看 | 性色AV一区二区三区V视界影院 | 99视频免费在线观看 | 国产精品69人妻无码久久 | 色丁香婷婷综合缴情综 | 国产在线观看成人免费视频 | 无码欧美毛片一区二区三在线视频 | 中字幕视频在线永久在线观看免费 | 少妇人妻偷人精品视蜜桃 | 日韩丰满少妇无码内射 | 亚洲精品久久久久中文字幕二区 | 国产AV精品白浆一区二 | 国产伦子沙发午休系列资源曝光 | 扒开女人下面使劲桶视频 | 亚洲精品一二三 | 99视频在线看观免费 | 色狠狠AV老熟女 | 1000视频在线播放 | 天天看片视频免费观看 | 一个人看的www视频动漫版 | 色欲AV久久综合人妻蜜桃 | 寂寞少妇直播 | 乌克兰内射私拍 | 国产精品人妻无码久久久2022 | 少妇系列之白嫩人妻 | 亚洲VA欧美VA天堂V国产综合 | 四虎永久在线精品国产免费 | 野花香在线观看免费观看大全动漫 | 久久婷五月综合色啪网 | 午夜国产羞羞视频免费网站 | 午夜阳光影院在线观看视频 | 少妇内射视频播放舔大片 | 欧美日韩亚洲第一区在线 | 男人的天堂色 | 国产色无码精品视频国产 |