通用PHP動(dòng)態(tài)生成靜態(tài)HTML網(wǎng)頁(yè)的代碼
更新時(shí)間:2010年03月04日 18:50:41 作者:
最近研究PHP的一些開(kāi)發(fā)技術(shù),發(fā)現(xiàn)PHP有很多ASP所沒(méi)有的優(yōu)秀功能,可以完成一些以前無(wú)法完成的功能,例如動(dòng)態(tài)生成HTML靜態(tài)頁(yè)面,以減少服務(wù)器CPU的負(fù)載,提高用戶訪問(wèn)的速度。
我們知道,PHP讀取MYSQL動(dòng)態(tài)顯示,在訪問(wèn)量大的情況下,會(huì)有很多性能問(wèn)題,如果租用別人的虛擬主機(jī),則會(huì)因?yàn)镃PU消耗過(guò)多而被限制CPU,導(dǎo)致網(wǎng)頁(yè)無(wú)法訪問(wèn)。我這里給出一個(gè)PHP動(dòng)態(tài)生成HTML的方法,可以極大降低服務(wù)器CPU負(fù)荷。
首先設(shè)置.htaccess文件,將動(dòng)態(tài)調(diào)用的參數(shù)轉(zhuǎn)換為靜態(tài)的HTML的URL地址,例如將在post目錄下的文件,轉(zhuǎn)發(fā)到根目錄的wp-post.php文件中,加入的語(yǔ)句類似:
RewriteRule ^post/([a-z0-9\-]+\.html)$ wp-post.php?$1$2
然后修改wp-post.php文件,在文件的開(kāi)頭加入以下PHP代碼:
ob_start();
$qstring = isset($_SERVER[%26quot;QUERY_STRING%26quot;]) ? $_SERVER[%26quot;QUERY_STRING%26quot;] : %26quot;%26quot;;
define(%26quot;HTML_FILE%26quot;, $_SERVER['DOCUMENT_ROOT'].%26quot;/post/%26quot;.$qstring);
if (file_exists(HTML_FILE))
{
$lcft = filemtime(HTML_FILE);
if (($lcft + 3600) %26gt; time()) //判斷上次生成HTML文件是否超過(guò)1小時(shí),若沒(méi)有才直接輸出文件內(nèi)容
{
echo(file_get_contents(HTML_FILE));
exit(0);
}
}
之后是現(xiàn)有的PHP的代碼,然后在當(dāng)前代碼的最后面加上如下的PHP代碼:
define(%26quot;HTMLMETA%26quot;,%26quot;%26lt;!-- this is a real static html file created at %26quot;.date(%26quot;Y-m-d H:i:s%26quot;).%26quot; --%26gt;%26quot;);
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, %26quot;w%26quot;);
if ($fp)
{
fwrite($fp, $buffer.HTMLMETA);
fclose($fp);
}
好了,然后查看你的靜態(tài)HTML頁(yè)面,如果頁(yè)面尾部出現(xiàn)了注釋行,說(shuō)明已經(jīng)成功的創(chuàng)建了靜態(tài)HTML文件。
這個(gè)方法的一個(gè)應(yīng)用就是我先前寫的那個(gè)%26ldquo;WordPress年度博客統(tǒng)計(jì)插件%26rdquo;,這個(gè)統(tǒng)計(jì)插件由于查詢十多次數(shù)據(jù)庫(kù),很多人訪問(wèn)的時(shí)候會(huì)有很大性能問(wèn)題,使用我介紹的這種動(dòng)態(tài)生成HTML技術(shù)后,一天就查詢一次,生成一次統(tǒng)計(jì)排行,完美解決了查詢數(shù)據(jù)庫(kù)的性能問(wèn)題。
首先設(shè)置.htaccess文件,將動(dòng)態(tài)調(diào)用的參數(shù)轉(zhuǎn)換為靜態(tài)的HTML的URL地址,例如將在post目錄下的文件,轉(zhuǎn)發(fā)到根目錄的wp-post.php文件中,加入的語(yǔ)句類似:
RewriteRule ^post/([a-z0-9\-]+\.html)$ wp-post.php?$1$2
然后修改wp-post.php文件,在文件的開(kāi)頭加入以下PHP代碼:
復(fù)制代碼 代碼如下:
ob_start();
$qstring = isset($_SERVER[%26quot;QUERY_STRING%26quot;]) ? $_SERVER[%26quot;QUERY_STRING%26quot;] : %26quot;%26quot;;
define(%26quot;HTML_FILE%26quot;, $_SERVER['DOCUMENT_ROOT'].%26quot;/post/%26quot;.$qstring);
if (file_exists(HTML_FILE))
{
$lcft = filemtime(HTML_FILE);
if (($lcft + 3600) %26gt; time()) //判斷上次生成HTML文件是否超過(guò)1小時(shí),若沒(méi)有才直接輸出文件內(nèi)容
{
echo(file_get_contents(HTML_FILE));
exit(0);
}
}
之后是現(xiàn)有的PHP的代碼,然后在當(dāng)前代碼的最后面加上如下的PHP代碼:
復(fù)制代碼 代碼如下:
define(%26quot;HTMLMETA%26quot;,%26quot;%26lt;!-- this is a real static html file created at %26quot;.date(%26quot;Y-m-d H:i:s%26quot;).%26quot; --%26gt;%26quot;);
$buffer = ob_get_flush();
$fp = fopen(HTML_FILE, %26quot;w%26quot;);
if ($fp)
{
fwrite($fp, $buffer.HTMLMETA);
fclose($fp);
}
好了,然后查看你的靜態(tài)HTML頁(yè)面,如果頁(yè)面尾部出現(xiàn)了注釋行,說(shuō)明已經(jīng)成功的創(chuàng)建了靜態(tài)HTML文件。
這個(gè)方法的一個(gè)應(yīng)用就是我先前寫的那個(gè)%26ldquo;WordPress年度博客統(tǒng)計(jì)插件%26rdquo;,這個(gè)統(tǒng)計(jì)插件由于查詢十多次數(shù)據(jù)庫(kù),很多人訪問(wèn)的時(shí)候會(huì)有很大性能問(wèn)題,使用我介紹的這種動(dòng)態(tài)生成HTML技術(shù)后,一天就查詢一次,生成一次統(tǒng)計(jì)排行,完美解決了查詢數(shù)據(jù)庫(kù)的性能問(wèn)題。
您可能感興趣的文章:
- PHP生成HTML靜態(tài)頁(yè)面實(shí)例代碼
- 采用thinkphp自帶方法生成靜態(tài)html文件詳解
- 用PHP生成靜態(tài)HTML速度快類庫(kù)
- PHP批量生成靜態(tài)HTML的簡(jiǎn)單原理和方法
- PHP定時(shí)自動(dòng)生成靜態(tài)HTML的實(shí)現(xiàn)代碼
- PHP 動(dòng)態(tài)生成靜態(tài)HTML頁(yè)面示例代碼
- PHP將整個(gè)網(wǎng)站生成HTML純靜態(tài)網(wǎng)頁(yè)的方法總結(jié)
- php將數(shù)據(jù)庫(kù)中所有內(nèi)容生成靜態(tài)html文檔的代碼
- php添加文章時(shí)生成靜態(tài)HTML文章的實(shí)現(xiàn)代碼
- 利用PHP生成靜態(tài)html頁(yè)面的原理
相關(guān)文章
PHP實(shí)現(xiàn)將優(yōu)酷土豆騰訊視頻html地址轉(zhuǎn)換成flash swf地址的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將優(yōu)酷土豆騰訊視頻html地址轉(zhuǎn)換成flash swf地址的方法,涉及php根據(jù)各個(gè)網(wǎng)站的網(wǎng)址規(guī)則針對(duì)URL地址的正則匹配與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
PHP7實(shí)現(xiàn)和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
這篇文章主要介紹了PHP7實(shí)現(xiàn)和CryptoJS的AES加密方式互通操作,結(jié)合實(shí)例形式分析了PHP AES-128-ECB加密算法相關(guān)使用技巧,需要的朋友可以參考下2019-06-06
PHP 和 MySQL 開(kāi)發(fā)的 8 個(gè)技巧
PHP 和 MySQL 開(kāi)發(fā)的 8 個(gè)技巧...2007-01-01
php中通過(guò)eval實(shí)現(xiàn)字符串格式的計(jì)算公式
有時(shí)候我們對(duì)每一種產(chǎn)品都有一個(gè)提成公式,而這個(gè)計(jì)算提成的公式是以字符串格式存在表中的,當(dāng)我們用這個(gè)計(jì)算公式時(shí),他并不像我們寫的:$a=2+3*5;這樣簡(jiǎn)單的能計(jì)算出結(jié)果,而它是個(gè)字符串,所以,我們就必須把字符串轉(zhuǎn)化為我們能夠處理的結(jié)果2017-03-03

