日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php生成首页 教程,简单静态页生成 过程_PHP教程

發布時間:2024/4/18 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php生成首页 教程,简单静态页生成 过程_PHP教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一直用smarty的cache,但感覺還是要自己做一個,才有感覺。網上有很多牛人的功能比較完備,打算先自己搞簡單的再慢慢豐滿。這兩天做了一個比較簡單的,在hi.baidu.net/alex_wang58記錄一下。

一、用到的相關技術關鍵詞:PHP, Apache,

mod_rewrite (RewriteCond,RewriteRule)地址重寫,

ob系列函數緩沖

file_put_contents生成html

二、流程:用戶發出請求url?id=x ,判斷文章是否存在

(1)存在則直接轉到對應的Html頁面。

(2)不存在通過php讀取數據庫數據,然后生成html文件,并存放到指定目錄。

三、實現方法:

(1)地址重寫用Apahce的mod_rewrite模塊中的RewriteRule指令實現重寫(mod_rewrite的開啟和簡單規則見本博另一篇http://hi.baidu.com/alex%5Fwang5 … 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 %{REQUEST_FILENAME} !-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] 實現

news.php =============================> news.php將列出文章標題鏈接。

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) ){

echo “$row[title]

“;

}

?>

比如生成了php靜態頁實現

當點擊鏈接發出對 http://localhost/Test/html/news_3.html 的請求時

Apache將會判斷 news_3.html 是否存在,由 .htaccess中的第三句

RewriteCond %{REQUEST_FILENAME} !-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’]) ){

$id = & $_GET[‘id’];

}else{

header(“Location: [url]http://127.0.0.1/lean/Test/html/news_failed.html[/url]”);

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 目錄下產生以 news_文章ID.html 命名的html文件。

PS: 一開始在判斷是否存在相應html頁面時采用的是 php 內置的 file_exists() 判斷,而不用Apache的 RewriteCond,也即沒有 RewriteCond %{REQUEST_FILENAME} !-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倍左右。

www.bkjia.comtrueTechArticle一直用smarty的cache,但感覺還是要自己做一個,才有感覺。網上有很多牛人的功能比較完備,打算先自己搞簡單的再慢慢豐滿。這兩天做了…

總結

以上是生活随笔為你收集整理的php生成首页 教程,简单静态页生成 过程_PHP教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。