国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

??
你好
? php教程 php手冊(cè) 比較詳細(xì)PHP生成靜態(tài)頁(yè)面教程

比較詳細(xì)PHP生成靜態(tài)頁(yè)面教程

Jun 13, 2016 pm 12:03 PM
php 。 ?? ??? ?? ?? ?? ? ??? ?? ???? ???? ???? ? ?? ??? ?? ???

一,PHP腳本與動(dòng)態(tài)頁(yè)面。
  PHP腳本是一種服務(wù)器端腳本程序,可通過(guò)嵌入等方法與HTML文件混合,也可以類,函數(shù)封裝等形式,以模板的方式對(duì)用戶請(qǐng)求進(jìn)行處理。無(wú)論以何種方式,它的基本原理是這樣的。由客戶端提出請(qǐng)求,請(qǐng)求某一頁(yè)面 -----> WEB服務(wù)器引入指定相應(yīng)腳本進(jìn)行處理 -----> 腳本被載入服務(wù)器 -----> 由服務(wù)器指定的PHP解析器對(duì)腳本進(jìn)行解析形成HTML語(yǔ)言形式 ----> 將解析后的HTML語(yǔ)句以包的方式傳回給瀏覽器。由此不難看出,在頁(yè)面發(fā)送到瀏覽器后,PHP就不存在了,已被轉(zhuǎn)化解析為HTML語(yǔ)句。客戶請(qǐng)求為一動(dòng)態(tài)文件,事實(shí)上并沒(méi)有真正的文件存在在那里,是PHP解析而成相對(duì)應(yīng)的頁(yè)面,然后發(fā)送回瀏覽器。這種頁(yè)面處理方式被稱為“動(dòng)態(tài)頁(yè)面”。
二,靜態(tài)頁(yè)面。
  靜態(tài)頁(yè)面是指在服務(wù)器端確實(shí)存在的僅含HTML以及JS,CSS等客戶端運(yùn)行腳本的頁(yè)面。它的處理方式是。由客戶端提出請(qǐng)求,請(qǐng)求某一頁(yè)面 ----> WEB服務(wù)器確認(rèn)并載入某一頁(yè)面 ----> WEB服務(wù)器將該頁(yè)面以包的形式傳遞回瀏覽器。由這一過(guò)程,我們對(duì)比一下動(dòng)態(tài)頁(yè)面,即可方現(xiàn)。動(dòng)態(tài)頁(yè)面需由WEB服務(wù)器的PHP解析器進(jìn)行解析,而且通常還需連接數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)庫(kù)存取操作,然后才能形成HTML語(yǔ)言信息包;而靜態(tài)頁(yè)面,無(wú)須解析,無(wú)須連接數(shù)據(jù)庫(kù),直接發(fā)送,可大大減輕服務(wù)器壓力,提高服務(wù)器負(fù)載能力,大幅提供頁(yè)面打開(kāi)速度和網(wǎng)站整體打開(kāi)速度。但其缺點(diǎn)是,不能動(dòng)態(tài)地對(duì)請(qǐng)求進(jìn)行處理,服務(wù)器上必須確實(shí)存在該文件。
三,模板及模板解析。
  模板即尚未填充內(nèi)容html文件。例如:
 temp.html
Code:

復(fù)制代碼 代碼如下:



{ title }

this is a { file } file's templets


PHP處理:
 templetest.php
Code:
$title = "拓邁國(guó)際測(cè)試模板";
$file = "TwoMax Inter test templet,
author:Matrix@Two_Max";
 $fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$content .= str_replace ("{ file }",$file,$content);
$content .= str_replace ("{ title }",$title,$content);
echo $content;
?>

  模板解析處理,即將經(jīng)PHP腳本解析處理后得出的結(jié)果填充(content)進(jìn)模板的處理過(guò)程。通常借助于模板類。目前較流行的模板解析類有phplib,smarty,fastsmarty等等。模板解析處理的原理通常為替換。也有些程序員習(xí)慣將判斷,循環(huán)等處理放進(jìn)模板文件中,用解析類處理,典型應(yīng)用為block概念,簡(jiǎn)單來(lái)說(shuō)即為一個(gè)循環(huán)處理。由PHP腳本指定循環(huán)次數(shù),如何循環(huán)代入等,再由模板解析類具體實(shí)施這些操作。
  好了,對(duì)比過(guò)靜態(tài)頁(yè)面與動(dòng)態(tài)頁(yè)面各自的優(yōu)劣,現(xiàn)在我們就來(lái)說(shuō)說(shuō),如何用PHP生成靜態(tài)文件。
  PHP生成靜態(tài)頁(yè)面并不是指PHP的動(dòng)態(tài)解析,輸出HTML頁(yè)面,而是指用PHP創(chuàng)建HTML頁(yè)面。同時(shí)因?yàn)镠TML的不可寫(xiě)性,我們創(chuàng)建的HTML若有修改,則需刪掉重新生成即可。(當(dāng)然你也可以選擇用正則進(jìn)行修改,但個(gè)人認(rèn)為那樣做倒不如刪掉重新生成來(lái)得快捷,有些得不償失。)
  言歸正傳。用過(guò)PHP文件操作函數(shù)的PHP FANS知道,PHP中有一個(gè)文件操作函數(shù)fopen,即打開(kāi)文件。若文件不存在,則嘗試創(chuàng)建。這即是PHP可以用來(lái)創(chuàng)建HTML文件的理論基礎(chǔ)。只要用來(lái)存放HTML文件的文件夾有寫(xiě)權(quán)限(即權(quán)限定義0777),即可創(chuàng)建文件。(針對(duì)UNIX系統(tǒng)而言,Win系統(tǒng)無(wú)須考慮。)仍以上例為例,若我們修改最后一句,并指定在test目錄下生成一個(gè)名為test.html的靜態(tài)文件:
Code:

復(fù)制代碼 代碼如下:


$title = "拓邁國(guó)際測(cè)試模板";
$file = "TwoMax Inter test templet,
author:Matrix@Two_Max";
 $fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$content .= str_replace ("{ file }",$file,$content);
$content .= str_replace ("{ title }",$title,$content);
// echo $content;
$filename = "test/test.html";
$handle = fopen ($filename,"w"); //打開(kāi)文件指針,創(chuàng)建文件
/*
 檢查文件是否被創(chuàng)建且可寫(xiě)
*/
if (!is_writable ($filename)){
die ("文件:".$filename."不可寫(xiě),請(qǐng)檢查其屬性后重試!");
}
if (!fwrite ($handle,$content)){ //將信息寫(xiě)入文件
die ("生成文件".$filename."失敗!");
}
fclose ($handle); //關(guān)閉指針
die ("創(chuàng)建文件".$filename."成功!");
?>


  實(shí)際應(yīng)用中常見(jiàn)問(wèn)題解決方案參考:
  一,文章列表問(wèn)題:
  
  在數(shù)據(jù)庫(kù)中創(chuàng)建字段,記錄文件名,每生成一個(gè)文件,將自動(dòng)生成的文件名存入數(shù)據(jù)庫(kù),對(duì)于推薦文章,只需指向存放靜態(tài)文件的指定文件夾中的該頁(yè)面即可。利用PHP操作處理文章列表,存為字符串,生成頁(yè)面時(shí)替換此字符串即可。如,在頁(yè)面中放置文章列表的表格加入標(biāo)記{ articletable },而在PHP處理文件中:
Code:

復(fù)制代碼 代碼如下:


$title = "拓邁國(guó)際測(cè)試模板";
$file = "TwoMax Inter test templet,
author:Matrix@Two_Max";
 $fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$content .= str_replace ("{ file }",$file,$content);
$content .= str_replace ("{ title }",$title,$content);
// 生成列表開(kāi)始
$list = '';
$sql = "select id,title,filename from article";
$query = mysql_query ($sql);
while ($result = mysql_fetch_array ($query)){
$list .= ''.$result['title'].'';
}
$content .= str_replace ("{ articletable }",$list,$content);
//生成列表結(jié)束
// echo $content;
$filename = "test/test.html";
$handle = fopen ($filename,"w"); //打開(kāi)文件指針,創(chuàng)建文件
/*
 檢查文件是否被創(chuàng)建且可寫(xiě)
*/
if (!is_writable ($filename)){
die ("文件:".$filename."不可寫(xiě),請(qǐng)檢查其屬性后重試!");
}
if (!fwrite ($handle,$content)){ //將信息寫(xiě)入文件
die ("生成文件".$filename."失?。?);
}
fclose ($handle); //關(guān)閉指針
die ("創(chuàng)建文件".$filename."成功!");
?>


  二,分頁(yè)問(wèn)題。
  如我們指定分頁(yè)時(shí),每頁(yè)20篇。某子頻道列表內(nèi)文章經(jīng)數(shù)據(jù)庫(kù)查詢?yōu)?5條,則,首先我們通過(guò)查詢得到如下參數(shù):1,總頁(yè)數(shù);2,每頁(yè)篇數(shù)。第二步,for ($i = 0; $i Code:

復(fù)制代碼 代碼如下:


$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$onepage = '20';
$sql = "select id from article where channel='$channelid'";
$query = mysql_query ($sql);
$num = mysql_num_rows ($query);
$allpages = ceil ($num / $onepage);
for ($i = 0;$iif ($i == 0){
$indexpath = "index.html";
} else {
$indexpath = "index_".$i."html";
}
$start = $i * $onepage;
$list = '';
$sql_for_page = "select name,filename,title from article where channel='$channelid' limit $start,$onepage";
$query_for_page = mysql_query ($sql_for_page);
while ($result = $query_for_page){
$list .= ''.$title.'';
}
$content = str_replace ("{ articletable }",$list,$content);
if (is_file ($indexpath)){
@unlink ($indexpath); //若文件已存在,則刪除
}
$handle = fopen ($indexpath,"w"); //打開(kāi)文件指針,創(chuàng)建文件
/*
  檢查文件是否被創(chuàng)建且可寫(xiě)
*/
if (!is_writable ($indexpath)){
echo "文件:".$indexpath."不可寫(xiě),請(qǐng)檢查其屬性后重試!"; //修改為echo
}
if (!fwrite ($handle,$content)){ //將信息寫(xiě)入文件
echo "生成文件".$indexpath."失?。?; //修改為echo
}
fclose ($handle); //關(guān)閉指針
}
fclose ($fp);
die ("生成分頁(yè)文件完成,如生成不完全,請(qǐng)檢查文件權(quán)限系統(tǒng)后重新生成!");
?>


  大致思路如此,其中如其它數(shù)據(jù)生成,數(shù)據(jù)輸入輸出檢查,分頁(yè)內(nèi)容指向等可酌情在頁(yè)面中加入。
  在實(shí)際文章系統(tǒng)處理過(guò)程當(dāng)中,還有許多問(wèn)題有待考慮,與動(dòng)態(tài)頁(yè)面不同之處,需注意的地方還有很多。但大致思路即是如此,其它方面可舉一反三而得。
用PHP制作靜態(tài)網(wǎng)站的模板框架
 模板能夠改善網(wǎng)站的結(jié)構(gòu)。本文闡述如何通過(guò)PHP 4的一個(gè)新功能和模板類,在由大量靜態(tài)HTML頁(yè)面構(gòu)成的網(wǎng)站中巧妙地運(yùn)用模板控制頁(yè)面布局。
提綱:
===================================
分離功能和布局
避免頁(yè)面元素重復(fù)
靜態(tài)網(wǎng)站的模板框架
===================================
分離功能和布局
   首先我們來(lái)看看應(yīng)用模板的兩個(gè)主要目的:
分離功能(PHP)和布局(HTML)
避免頁(yè)面元素重復(fù)
   第一個(gè)目的是談?wù)摰米疃嗟哪康?,它設(shè)想的情形是:一組程序員編寫(xiě)用于生成頁(yè)面內(nèi)容的PHP腳本,同時(shí)另一組設(shè)計(jì)人員設(shè)計(jì)HTML和圖形以控制頁(yè)面的最終外觀。分離功能和布局的基本思想就是使得這兩組人能夠各自編寫(xiě)和使用獨(dú)立的一組文件:程序員只需關(guān)心那些只包含PHP代碼的文件,無(wú)需關(guān)心頁(yè)面的外觀
;而頁(yè)面設(shè)計(jì)人員可以用自己最熟悉的可視化編輯器設(shè)計(jì)頁(yè)面布局,無(wú)需擔(dān)心破壞任何嵌入到頁(yè)面的PHP代碼。
   如果你曾經(jīng)看過(guò)幾個(gè)關(guān)于PHP模板的教程,那么你應(yīng)該已經(jīng)明白模板的工作機(jī)制。考慮一個(gè)簡(jiǎn)單的頁(yè)面局部:頁(yè)面的上方是頁(yè)頭,左邊是導(dǎo)航條,其余部分是內(nèi)容區(qū)域。這種網(wǎng)站可以擁有如下模板文件:

復(fù)制代碼 代碼如下:




模板示例



{HEADER}
{LEFTNAV} {CONTENT}




比較詳細(xì)PHP生成靜態(tài)頁(yè)面教程


Foo

Bar
   可以看出頁(yè)面如何由這些模板構(gòu)造而成:main模板控制著整個(gè)頁(yè)面的布局;header模板和leftnav模板控制著頁(yè)面的公共元素?;ɡㄌ?hào)“{}”里面的標(biāo)識(shí)符是內(nèi)容占位符。使用模板最主要的好處在于界面設(shè)計(jì)者能夠按照自己的意愿編輯這些文件,比如設(shè)置字體、修改顏色和圖形,或者完全地改變頁(yè)面的布局。界面設(shè)計(jì)者可以用任何普通HTML編輯器或者可視化工具編輯這些頁(yè)面,因?yàn)檫@些文件都只包含HTML代碼,沒(méi)有任何PHP代碼。
  PHP代碼全部保存到單獨(dú)的文件中,這個(gè)文件也就是由頁(yè)面URL實(shí)際調(diào)用的文件。Web服務(wù)器通過(guò)PHP引擎解析該文件,然后把結(jié)果返回給瀏覽器。一般地,PHP代碼總是動(dòng)態(tài)地生成頁(yè)面內(nèi)容,比如查詢數(shù)據(jù)庫(kù)或者執(zhí)行某種計(jì)算等。下面是一個(gè)例子:

復(fù)制代碼 代碼如下:


// example.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );
// 此處的PHP代碼設(shè)置$content使其包含合適的頁(yè)面內(nèi)容
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
?>


   這里我們使用的是流行的FastTemplate模板類,但其基本思路對(duì)于其他許多模板類來(lái)說(shuō)都一樣。首先你實(shí)例化一個(gè)類,告訴它到哪里去尋找模板文件以及哪一個(gè)模板文件與頁(yè)面的哪部分對(duì)應(yīng);接下來(lái)是生成頁(yè)面內(nèi)容,把結(jié)果賦予內(nèi)容的標(biāo)識(shí)符;然后,依次解析各個(gè)模板文件,模板類將執(zhí)行必要的替換操作;最后把解析結(jié)果輸出到瀏覽器。
   這個(gè)文件完全由PHP代碼構(gòu)成,不包含任何HTML代碼,這是它最大的優(yōu)點(diǎn)?,F(xiàn)在,PHP程序員可以集中精力編寫(xiě)生成頁(yè)面內(nèi)容的代碼,而不必為了如何生成HTML去正確地格式化最終頁(yè)面而擔(dān)心。
   你可以使用這種方法和上面的文件構(gòu)造出一個(gè)完整的網(wǎng)站。如果PHP代碼是以URL中的查詢字符串為基礎(chǔ)生成頁(yè)面內(nèi)容,例如http://www.foo.com/example.php?article=099,你可以據(jù)此構(gòu)造出一個(gè)完整的雜志網(wǎng)站。
   很容易看出采用模板還有第二個(gè)好處。如上例所示,頁(yè)面左邊的導(dǎo)航條單獨(dú)保存為一個(gè)文件,我們只需編輯這一個(gè)模板文件就可以改變網(wǎng)站所有頁(yè)面左邊的導(dǎo)航條。
避免頁(yè)面元素重復(fù)
   “這確實(shí)不錯(cuò)”,你也許會(huì)想,“我的網(wǎng)站主要就是由大量的靜態(tài)頁(yè)面構(gòu)成?,F(xiàn)在我可以從所有頁(yè)面中刪除它們的公共部分,要更新這些公共部分實(shí)在太麻煩了。以后我就可以用模板制作出很容易維護(hù)的統(tǒng)一頁(yè)面布局?!钡虑椴⒎沁@么簡(jiǎn)單,“大量的靜態(tài)頁(yè)面”道出了問(wèn)題的所在。
   請(qǐng)考慮上面的例子。這個(gè)例子實(shí)際上只有一個(gè)example.php頁(yè)面,它之所以能夠生成整個(gè)網(wǎng)站的所有頁(yè)面,是因?yàn)樗昧薝RL中的查詢字符串從數(shù)據(jù)庫(kù)之類的信息源動(dòng)態(tài)地構(gòu)造出頁(yè)面。
   我們之中的大多數(shù)人所運(yùn)行的網(wǎng)站并不一定都有數(shù)據(jù)庫(kù)支持。我們的網(wǎng)站大多數(shù)由靜態(tài)頁(yè)面構(gòu)成,然后用PHP在這里、那里加上一些動(dòng)態(tài)功能,比如搜索引擎、反饋表單等。那么,如何在這種網(wǎng)站上應(yīng)用模板呢?
   最簡(jiǎn)單的方法是為每一個(gè)頁(yè)面復(fù)制一份PHP文件,
然后在每一個(gè)頁(yè)面中把PHP代碼里代表內(nèi)容的變量設(shè)置成合適的頁(yè)面內(nèi)容。例如,假設(shè)有三個(gè)頁(yè)面,它們分別是主頁(yè)(home)、關(guān)于(about)和產(chǎn)品(product),我們可以用三個(gè)文件分別生成它們。這三個(gè)文件的內(nèi)容都類如:

復(fù)制代碼 代碼如下:


// home.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );
$content = "

歡迎訪問(wèn)


比較詳細(xì)PHP生成靜態(tài)頁(yè)面教程

希望你能夠喜歡本網(wǎng)站

";
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
?>

   顯然,這種方法有三個(gè)問(wèn)題:我們必須為每一個(gè)頁(yè)面復(fù)制這些復(fù)雜的、牽涉到模板的PHP代碼,這與重復(fù)公共頁(yè)面元素一樣使得頁(yè)面難以維護(hù);現(xiàn)在文件又混合了HTML和PHP代碼;為內(nèi)容變量賦值將變得非常困難,因?yàn)槲覀儽仨毺幚砗么罅康奶厥庾址?
   解決這個(gè)問(wèn)題的關(guān)鍵就在于分離PHP代碼和HTML內(nèi)容,雖然我們不能從文件中刪除所有的HTML內(nèi)容,但可以移出絕大多數(shù)PHP代碼。
靜態(tài)網(wǎng)站的模板框架
   首先,我們象前面一樣為所有的頁(yè)面公用元素以及頁(yè)面整體布局編寫(xiě)模板文件;然后從所有的頁(yè)面刪除公共部分,只留下頁(yè)面內(nèi)容;接下來(lái)再在每個(gè)頁(yè)面中加上三行PHP代碼,如下所示:

復(fù)制代碼 代碼如下:





你好


歡迎訪問(wèn)


比較詳細(xì)PHP生成靜態(tài)頁(yè)面教程

希望你能夠喜歡本網(wǎng)站



?>

   這種方法基本上解決了前面提到的各種問(wèn)題?,F(xiàn)在文件里只有三行PHP代碼,而且沒(méi)有任何一行代碼直接涉及到模板,因此要改動(dòng)這些代碼的可能性極小。此外,由于HTML內(nèi)容位于PHP標(biāo)記之外,所以也不存在特殊字符的處理問(wèn)題。我們可以很容易地將這三行PHP代碼加入到所有靜態(tài)HTML頁(yè)面中。
   require函數(shù)引入了一個(gè)PHP文件,這個(gè)文件包含了所有必需的與模板相關(guān)的PHP代碼。其中pageStart函數(shù)設(shè)置模板對(duì)象以及頁(yè)面標(biāo)題,pageFinish函數(shù)解析模板然后生成結(jié)果發(fā)送給瀏覽器。
   這是如何實(shí)現(xiàn)的呢?為什么在調(diào)用pageFinish函數(shù)之前文件中的HTML不會(huì)發(fā)送給瀏覽器?答案就在于PHP 4的一個(gè)新功能,這個(gè)功能允許把輸出到瀏覽器的內(nèi)容截獲到緩沖區(qū)之中。讓我們來(lái)看看prepend.php的具體代碼:

復(fù)制代碼 代碼如下:


require('class.FastTemplate.php');
function pageStart($title = '') {
GLOBAL $tpl;
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav'=> 'leftnav.htm' ) );
$tpl->assign('TITLE', $title);
ob_start();
}
function pageFinish() {
GLOBAL $tpl;
$content = ob_get_contents();
ob_end_clean();
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
}
?>


  pageStart函數(shù)首先創(chuàng)建并設(shè)置了一個(gè)模板實(shí)例,然后啟用輸出緩存。此后,所有來(lái)自頁(yè)面本身的HTML內(nèi)容都將進(jìn)入緩存。pageFinish函數(shù)取出緩存中的內(nèi)容,然后在模板對(duì)象中指定這些內(nèi)容,最后解析模板并輸出完成后的頁(yè)面。
   這就是整個(gè)模板框架全部的工作過(guò)程了。首先編寫(xiě)包含了網(wǎng)站各個(gè)頁(yè)面公共元素的模板,然后從所有頁(yè)面中刪除全部公共的頁(yè)面布局代碼,代之以三行永遠(yuǎn)無(wú)需改動(dòng)的PHP代碼;再把FastTemplate類文件和prepend.php加入到包含路徑,這樣你就得到了一個(gè)頁(yè)面布局可以集中控制的網(wǎng)站,它有著更好的可靠性和可維護(hù)性,而且網(wǎng)站級(jí)的大范圍修改也變得相當(dāng)容易。
   本文下載包包含
了一個(gè)可運(yùn)行的示例網(wǎng)站,它的代碼注釋要比前面的代碼注釋更詳細(xì)一些。FastTemplate類可以在http://www.thewebmasters.net/找到,最新的版本號(hào)是1.1.0,那里還有一個(gè)用于保證該類在PHP 4中正確運(yùn)行的小補(bǔ)丁。本文下載代碼中的類已經(jīng)經(jīng)過(guò)該補(bǔ)丁的修正。
PHP簡(jiǎn)易生成靜態(tài)頁(yè)面

復(fù)制代碼 代碼如下:


/*
* 文件名:index.php
*/
require "conn.php";
$query = "select * from news order by datetime desc";
$result = mysql_query($query);
?>



NEWS








while($re = mysql_fetch_array($result)){
?>





}
?>




標(biāo)題 發(fā)布時(shí)間
">= $re["title"]?> = $re["datetime"]?>
? 添加新聞




復(fù)制代碼 代碼如下:


/*
文件名:AddNews.php
簡(jiǎn)易動(dòng)態(tài)添加生成靜態(tài)新聞頁(yè)面
#
# 表的結(jié)構(gòu) `news`
#
CREATE TABLE `news` (
`newsid` int(11) NOT NULL auto_increment,
`title` varchar(100) NOT NULL default '',
`content` text NOT NULL,
`datetime` datetime NOT NULL default '0000-00-00 00:00:00',
KEY `newsid` (`newsid`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;
*/
?>



用PHP生成靜態(tài)網(wǎng)頁(yè)的兩個(gè)函數(shù)
在最近幾年,萬(wàn)維網(wǎng)(也稱環(huán)球信息網(wǎng),即WWW)不斷改變信息處理技術(shù)的面貌。WEB已經(jīng)快速地成為一種有效的媒介,并適合人們和商業(yè)溝通和協(xié)作。幾乎所有的信息技術(shù)領(lǐng)域都普遍受到WEB的影響。Web訪問(wèn)帶來(lái)更多用戶和更多數(shù)據(jù),這意味著給服務(wù)器和數(shù)據(jù)庫(kù)更多壓力和最終用戶得到越來(lái)越慢的響應(yīng)速度。與不斷靠增加CPU,磁盤(pán)驅(qū)動(dòng)器及內(nèi)存來(lái)跟上這種增長(zhǎng)的需求相比, WEB動(dòng)態(tài)網(wǎng)頁(yè)面靜態(tài)化應(yīng)該是一個(gè)更實(shí)用,更經(jīng)濟(jì)的選擇。

用PHP實(shí)現(xiàn)WEB動(dòng)態(tài)網(wǎng)頁(yè)靜態(tài)化的具體實(shí)現(xiàn)函數(shù)如function gen_static_file()所示

復(fù)制代碼 代碼如下:


function gen_static_file($program, $filename)
{
$program 1= "/usr/local/apache/htdocs/php/" . $program;
$filename1 = "/usr/local/apache/htdocs/ static_html/" . $filename;
$cmd_str = "/usr/local/php4/bin/php " . $program1 . " } " . $filename1 . " ";
system($cmd_str);
echo $filename . " generated.〈br〉";
}



這個(gè)函數(shù)是實(shí)現(xiàn)靜態(tài)化的關(guān)鍵,即PHP動(dòng)態(tài)頁(yè)面程序不是被送到瀏覽器中,而是輸入到名為$filename的文件中去(如圖2)。兩個(gè)參數(shù)中$program是PHP動(dòng)態(tài)頁(yè)面程序,$filename是生成的靜態(tài)頁(yè)面的名字(可根據(jù)需要自己制定命名規(guī)則,這一點(diǎn)很重要,見(jiàn)下文),/usr/local/php4/bin/php是PHP中具有把程序輸入文件功能的部分,System是PHP中執(zhí)行外部命令的函數(shù)。我們還可以看出所有生成動(dòng)態(tài)頁(yè)面的php程序需放在/php/目錄下,所有新產(chǎn)生的靜態(tài)頁(yè)面則會(huì)出現(xiàn)在/static_html/目錄下(這些路徑可以根據(jù)具體需要設(shè)置)。

下面讓我們舉個(gè)具體例子,看一下college_static.php的靜態(tài)頁(yè)面是怎樣生成的。

復(fù)制代碼 代碼如下:


function gen_college_static ()
{
for ($i = 0; $i 〈= 32; $i++〉
{
putenv("province_id=" . $i); //*.php文件從數(shù)據(jù)庫(kù)取數(shù)據(jù)時(shí)要用到。
$filename = " college_static". $i . ".html";
gen_static_file("college_static.php", $filename);
}



從這個(gè)函數(shù)我們可以看到通過(guò)調(diào)用函數(shù)gen_static_file(), college_static.php經(jīng)過(guò)靜態(tài)化,變成了33個(gè)靜態(tài)頁(yè)面college.static0.html~college.static33.html,其中$filename會(huì)隨著$I的變化而變化。當(dāng)然也可以從數(shù)據(jù)庫(kù)中直接取值,來(lái)控制生成的靜態(tài)頁(yè)面的個(gè)數(shù)和名字,其他程序?qū)ι傻撵o態(tài)頁(yè)面的調(diào)用應(yīng)和靜態(tài)頁(yè)面的命名規(guī)則一致。
? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

?? ????
1784
16
Cakephp ????
1729
56
??? ????
1580
28
PHP ????
1445
31
???
??? ??? ?? ?? : PHP ??? ??? ??? ?? ?? : PHP ??? Jul 15, 2025 am 02:48 AM

phphasthreecommentstyles : //, #forsingle-lineand/.../formulti-lline.usecommentstoexplainwhycodeexists, notwhatitdoes.marktodo/fixMeitemsandDisableCodeTemporlinlyDuingDeBugging.aVoidOver-commentingsimplOgic.writeCoCoCoCoCoConcomeCOCOCOCONCOCOCOCOCOCOCOCOCISE

Windows? PHP? ???? ?? Windows? PHP? ???? ?? Jul 15, 2025 am 02:46 AM

Windows? PHP? ???? ?? ???? ??? ?????. 1. ??? PHP ??? ?????? ?? ??????. Apache? ?? ThreadSafe ??? ????? Nginx??? ThreadSafe ??? ???? ?? ????. 2. php.ini ??? ???? php.ini-development ?? php.ini-production? php.ini? ?????. 3. ?? ? ??? ?? ??? ?? ?? ??? PHP ??? ??????. 4. PHP? ????? ?????? ??? ????? ?? ?? ?? PHP-V? ???? ?? ??? ???? ?? ?? ??? ??????. 5. Apache? ???? ?? httpd.conf?? p? ???????.

PHP ?? : ?? PHP ?? : ?? Jul 15, 2025 am 02:46 AM

PHP? ?? ???? 4 ?? ?? ??? ?????. 1. PHP ??? ?????? ??? ??? ???? ?? ?????. 2. Echo ? Print? ????? ?? ???? ????, ??? Echo? ?? ?? ??? ?????? ??????. 3. ?? ???? ?? ???? ??????? //, # ? //; 4. ? ??? ?????? ????? ??? ?? ????? ??? ??? ??? ?? ???? ??? ????. ??? ?? ??? ????? ???? ???? PHP ??? ???? ? ??? ? ? ????.

? ?? PHP ???? : ???? ?? ? ?? PHP ???? : ???? ?? Jul 16, 2025 am 03:42 AM

? ?? PHP ???? ??? ???? ??? ?????? ?? ?? ?? ??? ???? XAMPP/MAMP/LAMP? ?? ? ?? ??? ???? ???? ??? ???? ??? ?????. ??, hello.php?? ??? ??? ?? ??? ???? ???? ??????. ??, PHP ? HTML? ???? ?? ??? ??? ???? ?? ????. ?????, ???? ??, ?? ?? ? ?? ?? ??? ?? ???? ?????? ???? ???? ?? ????? ???????.

PHP ? ???? ??? ?????? PHP ? ???? ??? ?????? Jul 16, 2025 am 03:45 AM

phpisaserver-sideScriptingLanguageUsedForWebDevelopment, ?? ProcessesData, InteractSwithDatabases ? SendShtmlTobrowsers.commonusesincludeusera-sectentication, e-commerceplatforms

PHP 8 ?? ??? PHP 8 ?? ??? Jul 16, 2025 am 03:41 AM

???? PHP8? ???? ??? ??? ????. 1. ????? ??? ?? ????; 2. PHP8 ? ?? ?? ??? ??????. 3. ??? ????? ????? ??? ??????. 4. ??? ?? ?? ??? ??????. Windows ???? Zip ???? ?????? ?? ?? ? ?? ?? ??? ???? ???? ????? ?? ??? ??? ?? ? ? ????. MACOS ???? Homebrew? ???? ? ??, PHP8 ??, ?? ?? ?? ? ?? ??? ?? ??? ???? ?? ????. ?? ??? ?? ????? ???? ????? ????? ??? ?? ??? ??? ??? ? ????.

PHP?? ?? ?? (??/??)? ??? ?????? PHP?? ?? ?? (??/??)? ??? ?????? Jul 16, 2025 am 03:48 AM

ToHandleFileOperationsInphp, useAppreptFunctionsandModes.1.TOREADAFILE, USEFILE_GET_CONTENTS () FORSMALLFILESORFGETS () inALOOPFORLE-by-lineProcessing.2.TOWRITETOAFILE, USEFILE_PUTE_CONTENTS () USEFILE_PUTE_CONTENTS () FORSIMPLEWRITE () FORSIMPLAGFILE (ORFENDFLAG)

?? ??? ?? ??? ?? ??? ?? ??? Jul 15, 2025 am 02:55 AM

Python? Ifelse ??? ???? ??? ??? ??? ?? ??? ???? ????. 1. ???? ??? ???? ??? ???? ????. ??? ??? ?? ??? ???? ?? ?????. 2. ?? ?? ??? ELIF? ?? ????, ????? ???? ?? ???? ?????. 3. ?? ?? ??? ???? ?? ?? ? ?? ? ?? ???? ?? ?? ????. 4. 3 ?? ??? ??? ?????? ??? ifelse? ???? ? ??? ? ????. ?? ??, ??? ?? ? ??? ??????? ?????? ??? ???? ???? ?? ??? ??? ? ????.

See all articles