真靜態(tài)實現(xiàn)

真靜態(tài)實現(xiàn) 靜態(tài)化: 靜態(tài)化是解決減輕網(wǎng)站壓力,提高網(wǎng)站訪問速度的常用方案.包括:純靜態(tài)和偽靜態(tài)。 純靜態(tài): 將PHP程序生成靜態(tài)的HTML文件嗽冒,保存到服務器的磁盤中。 原理: 在用戶訪問PHP程序時补履,首先檢測靜態(tài)的HTML文件是否存在添坊,如果存在直接輸出靜態(tài)文件,如果靜態(tài)文件不存在箫锤,查詢數(shù)據(jù)庫贬蛙,生成靜態(tài)文件,并輸出谚攒。 優(yōu)勢: 減少PHP程序編譯和對數(shù)據(jù)庫的查詢阳准。 數(shù)據(jù)緩沖區(qū): 數(shù)據(jù)緩沖區(qū)是用戶前端用來存儲、操縱數(shù)據(jù)的對象馏臭。 通過輸出控制函數(shù)實現(xiàn)純靜態(tài)化: ob_start() :打開輸出控制緩沖 返回值:成功時返回 TRUE野蝇, 或者在失敗時返回 FALSE. ob_get_contents() :返回輸出緩沖區(qū)的內(nèi)容 返回值:輸出緩沖區(qū)的內(nèi)容,或者如果輸出緩沖區(qū)無效將返回FALSE ob_clean() :清空(擦掉)輸出緩沖區(qū)的內(nèi)容括儒。 沒有返回值 ob_end_clean:刪除內(nèi)部緩沖區(qū)的內(nèi)容绕沈,并且關閉內(nèi)部緩沖區(qū) 返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE ob_flush() :沖刷出(送出)輸出緩沖區(qū)中的內(nèi)容帮寻。 沒有返回值 ob_end_flush :發(fā)送內(nèi)部緩沖區(qū)的內(nèi)容到瀏覽器乍狐,并且關閉輸出緩沖區(qū)。 返回值:成功時返回 TRUE固逗, 或者在失敗時返回 FALSE 【實現(xiàn)例子】 (1)在MYSQL里新建一數(shù)據(jù)庫澜躺,命名為 database (可自定義)蝉稳,新建一表,命名為 news(因為是新聞發(fā)布嘛掘鄙,取個好記的名字即可耘戚,可自定義),然后建立這幾個字段名: id (自動遞增操漠,這是關鍵收津,類型:INT) title (顧名思義,新聞標題浊伙,類型可取 TEXT) content (新聞內(nèi)容撞秋,類型可取 TEXT) path (HTML文件路徑,類型可取 TEXT) (2)建立 conn.php 這是連接數(shù)據(jù)庫的PHP文件嚣鄙,你可以把連接數(shù)據(jù)的語句單獨放在這一文件里吻贿,以后多個需要連接數(shù)據(jù)庫的文件直接引用這個文件即可。(3)設計添加新聞的表格 add.form 簡單的源代碼如下:
//提交至 add.php 新聞標題:
新聞內(nèi)容:

(4)建立一個 HTML 的模板,另存為model.htm,和 add.php可以在同一目錄下哑子。示例源代碼:
7.真靜態(tài)實現(xiàn)

靜態(tài)化:
靜態(tài)化是解決減輕網(wǎng)站壓力,提高網(wǎng)站訪問速度的常用方案.包括:純靜態(tài)和偽靜態(tài)舅列。

純靜態(tài):

將PHP程序生成靜態(tài)的HTML文件,保存到服務器的磁盤中卧蜓。

原理:

在用戶訪問PHP程序時帐要,首先檢測靜態(tài)的HTML文件是否存在,如果存在直接輸出靜態(tài)文件弥奸,如果靜態(tài)文件不存在榨惠,查詢數(shù)據(jù)庫,生成靜態(tài)文件盛霎,并輸出赠橙。

優(yōu)勢:
減少PHP程序編譯和對數(shù)據(jù)庫的查詢。

數(shù)據(jù)緩沖區(qū):
數(shù)據(jù)緩沖區(qū)是用戶前端用來存儲愤炸、操縱數(shù)據(jù)的對象简烤。

通過輸出控制函數(shù)實現(xiàn)純靜態(tài)化:

ob_start()
:打開輸出控制緩沖
返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE.

ob_get_contents()
:返回輸出緩沖區(qū)的內(nèi)容
返回值:輸出緩沖區(qū)的內(nèi)容摇幻,或者如果輸出緩沖區(qū)無效將返回FALSE

ob_clean()
:清空(擦掉)輸出緩沖區(qū)的內(nèi)容横侦。 沒有返回值

ob_end_clean:刪除內(nèi)部緩沖區(qū)的內(nèi)容,并且關閉內(nèi)部緩沖區(qū)
返回值:成功時返回 TRUE绰姻, 或者在失敗時返回 FALSE

ob_flush()
:沖刷出(送出)輸出緩沖區(qū)中的內(nèi)容枉侧。 沒有返回值

ob_end_flush :發(fā)送內(nèi)部緩沖區(qū)的內(nèi)容到瀏覽器,并且關閉輸出緩沖區(qū)狂芋。
返回值:成功時返回 TRUE榨馁, 或者在失敗時返回 FALSE

【實現(xiàn)例子】

(1)在MYSQL里新建一數(shù)據(jù)庫,命名為 database (可自定義)帜矾,新建一表翼虫,命名為 news(因為是新聞發(fā)布嘛屑柔,取個好記的名字即可,可自定
義)珍剑,然后建立這幾個字段名:
id (自動遞增掸宛,這是關鍵,類型:INT)
title (顧名思義招拙,新聞標題唧瘾,類型可取 TEXT)
content (新聞內(nèi)容,類型可取 TEXT)
path (HTML文件路徑别凤,類型可取 TEXT)
(2)建立 conn.php
這是連接數(shù)據(jù)庫的PHP文件饰序,你可以把連接數(shù)據(jù)的語句單獨放在這一文件里,以后多個需要連接數(shù)據(jù)庫的文件直接引用這個文件即可规哪。
(3)設計添加新聞的表格 add.form 簡單的源代碼如下:
<form method=”post” action=”add.php”> //提交至 add.php
新聞標題:<input type=”text” name=”title” size=”20”>

新聞內(nèi)容:<textarea name=”content” cols=”10” rows=”25”></textarea>

<input type=”submit” name=”提交”>
</form>
(4)建立一個 HTML 的模板,另存為model.htm,和 add.php可以在同一目錄下求豫。
示例源代碼:
<html>
<body>
此新聞的標題:{title}
此新聞的內(nèi)容:{content}
</body>
</html>
{ }大括號內(nèi)的內(nèi)容即是要被替換的內(nèi)容,整個靜態(tài)模板的設計可以根據(jù)自己的思路诉稍,但{ }內(nèi)被替換的內(nèi)容必須包含在內(nèi)蝠嘉,如上面的{title},
{content}均唉;咔咔~簡單地說,設計好一個很好看的新聞模板后肚菠,把要被替換的如{title},{content}等標記放到需要的地方就可以了撒舔箭。
(5)詳解 add.php 源碼
<?php
require_once("conn.php"); //引用conn.php,連接數(shù)據(jù)庫
$title=$_POST["title"];
$content=$_POST["content"]; //獲得表單變量
//以下建立一文本文檔蚊逢,其值自動計數(shù)
$countfile="count.txt";
if(!file_exists($countfile))
{
fopen($countfile,"w"); //如果此文件不存在层扶,則自動建立一個
}
$fp=fopen($countfile,"r");
$num=fgets($fp,20);
$num=$num+1; //每次其值自動加一
fclose($fp);
$fp=fopen($countfile,"w");
fwrite($fp,$num); //更新其值
fclose($fp);
//利用上面自動計數(shù)的值獲得HTML的路徑$path
$houzui=”.html”;
$path=$num.$houzui;
//這樣形成的路徑是自動增長的,如1.html,2.html,3.html……….添加一條新聞便自動加上1
//以下用SQL語句添加數(shù)據(jù)至表 news
$sql=”insert into news (title,content,path) values (‘”.$title.”’,’”.$content.”’,’”.$path.”’)”;
$query=mysql_query($sql);

//以下為關鍵之處烙荷,把從表單獲得的數(shù)據(jù)替換模板中的{title},{content}標記
$fp=fopen("model.htm","r"); //只讀打開模板
$str=fread($fp,filesize("mode.htm"));//讀取模板中內(nèi)容
$str=str_replace("{title}",$title,$str);
$str=str_replace("{content}",$content,$str);//替換內(nèi)容
fclose($fp);
$handle=fopen($path,"w"); //寫入方式打開新聞路徑
fwrite($handle,$str); //把剛才替換的內(nèi)容寫進生成的HTML文件
fclose($handle);
//收尾工作:
echo "<a href=$path target=_blank>查看剛才添加的新聞</a>";

?>
OK,整個生成HTML的示例源碼就到這里镜会,其關鍵是用了替換的方法。
$str=str_replace("{被替換的內(nèi)容}",$替換的內(nèi)容,$str);
因此终抽,總結一下以上的做法:先設計好新聞模板戳表,把需要被替換的內(nèi)容用{ }放到模板中相應的位置,然后設計表單昼伴,再是最后的表單處理程序
匾旭,把從表單中獲取的變量替換模板中相應的內(nèi)容即可,這樣每次都會生成不同的HTML圃郊;如果需要修改HTML的內(nèi)容也是一樣的价涝,獲得修改后的表
單內(nèi)容后,先用 update 語句更新數(shù)據(jù)庫持舆,再重新替換一下模板中的內(nèi)容即可色瘩;刪除的話伪窖,先delete表中要刪除的內(nèi)容,再用unlink($path)
來刪除HTML的物理文件即可居兆。本文講的只是最簡單的思路而已覆山,要投入使用還有待完善。

{ }大括號內(nèi)的內(nèi)容即是要被替換的內(nèi)容史辙,整個靜態(tài)模板的設計可以根據(jù)自己的思路汹买,但{ }內(nèi)被替換的內(nèi)容必須包含在內(nèi),如上面的{title}聊倔, {content}晦毙;咔咔~簡單地說,設計好一個很好看的新聞模板后耙蔑,把要被替換的如{title},{content}等標記放到需要的地方就可以了撒见妒。(5)詳解 add.php 源碼 OK,整個生成HTML的示例源碼就到這里,其關鍵是用了替換的方法甸陌。 $str=str_replace("{被替換的內(nèi)容}",$替換的內(nèi)容,$str); 因此须揣,總結一下以上的做法:先設計好新聞模板,把需要被替換的內(nèi)容用{ }放到模板中相應的位置钱豁,然后設計表單耻卡,再是最后的表單處理程序,把從表單中獲取的變量替換模板中相應的內(nèi)容即可牲尺,這樣每次都會生成不同的HTML卵酪;如果需要修改HTML的內(nèi)容也是一樣的,獲得修改后的表單內(nèi)容后谤碳,先用 update 語句更新數(shù)據(jù)庫溃卡,再重新替換一下模板中的內(nèi)容即可;刪除的話蜒简,先delete表中要刪除的內(nèi)容瘸羡,再用unlink($path) 來刪除HTML的物理文件即可。本文講的只是最簡單的思路而已搓茬,要投入使用還有待完善犹赖。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卷仑,隨后出現(xiàn)的幾起案子冷尉,更是在濱河造成了極大的恐慌,老刑警劉巖系枪,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雀哨,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機雾棺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門膊夹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捌浩,你說我怎么就攤上這事放刨。” “怎么了尸饺?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵进统,是天一觀的道長。 經(jīng)常有香客問我浪听,道長螟碎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任迹栓,我火速辦了婚禮掉分,結果婚禮上,老公的妹妹穿的比我還像新娘克伊。我一直安慰自己酥郭,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布愿吹。 她就那樣靜靜地躺著不从,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犁跪。 梳的紋絲不亂的頭發(fā)上椿息,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音耘拇,去河邊找鬼撵颊。 笑死宇攻,一個胖子當著我的面吹牛惫叛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逞刷,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼嘉涌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夸浅?” 一聲冷哼從身側響起仑最,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帆喇,沒想到半個月后警医,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年预皇,在試婚紗的時候發(fā)現(xiàn)自己被綠了侈玄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡吟温,死狀恐怖序仙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鲁豪,我是刑警寧澤潘悼,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站爬橡,受9級特大地震影響治唤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堤尾,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一肝劲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧郭宝,春花似錦辞槐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衔统,卻和暖如春鹿榜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锦爵。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工舱殿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人险掀。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓沪袭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親樟氢。 傳聞我的和親對象是個殘疾皇子冈绊,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • ob的基本原則:如果ob緩存打開,則echo的數(shù)據(jù)首先放在ob緩存埠啃。如果是header信息死宣,直接放在程序緩存。當頁...
    金星show閱讀 995評論 0 1
  • PHP的輸出緩沖區(qū) 什么是緩沖區(qū)?簡單而言,緩沖區(qū)的作用就是,把輸入或者輸出的內(nèi)容先放進內(nèi)存,而不顯示或者讀取.至...
    桖辶殤閱讀 2,015評論 3 12
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理碴开,服務發(fā)現(xiàn)毅该,斷路器博秫,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 最近就是在練習ndk開發(fā),剛好遇到android增量更新的話題眶掌,主要是工具的運用台盯,略帶使用第三方so庫的流程~~~...
    紅黑軍團號閱讀 548評論 1 3
  • 因為都很盡心盡力,這次合作自然很是成功畏线,這讓每一個想看熱鬧的人感到了失望静盅,也讓葉子堅更加堅定了追求子晴的決心。 談...
    冒牌文人閱讀 212評論 2 0