真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

用php生成靜態(tài)html頁面-創(chuàng)新互聯(lián)

因?yàn)槊看斡脩酎c(diǎn)擊動(dòng)態(tài)鏈接的時(shí)候都會(huì)對(duì)服務(wù)器發(fā)送數(shù)據(jù)查詢的要求用php生成靜態(tài)html頁面

對(duì)于一個(gè)訪問量可能達(dá)百萬千萬級(jí)別的網(wǎng)站來說 這無疑是服務(wù)器一個(gè)大大的負(fù)擔(dān)

成都服務(wù)器托管,創(chuàng)新互聯(lián)建站提供包括服務(wù)器租用、綿陽服務(wù)器托管、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、主機(jī)域名等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:18982081108

所以把動(dòng)態(tài)數(shù)據(jù)轉(zhuǎn)換成靜態(tài)html頁面就成了節(jié)省人力物力的選

因?yàn)榇饲皼]有相應(yīng)的經(jīng)驗(yàn) 剛開始的時(shí)候覺得這個(gè)技術(shù)很神秘

但在看了一些例子以后發(fā)現(xiàn)并不是那么復(fù)雜(不過網(wǎng)上的資料并不是特別詳細(xì))

經(jīng)過一個(gè)上午加中下午的試驗(yàn) 終于把該做的任務(wù)完成了 下面是一些心得和一個(gè)簡單的例子

希望大蝦們不要笑話

一般來說 用php轉(zhuǎn)換輸出html頁面有兩種辦法 引用大蝦的文章如下:

第一種:利用模板。目前PHP的模板可以說是很多了,有功能強(qiáng)大的smarty,還有簡單易用的smarttemplate等。它們每一種模板,都有一個(gè)獲取輸出內(nèi)容的函數(shù)。我們生成靜態(tài)頁面的方法,就是利用了這個(gè)函數(shù)。用這個(gè)方法的優(yōu)點(diǎn)是,代碼比較清晰,可讀性好。

這里我用smarty做例子,說明如何生成靜態(tài)頁:

  1. require("smarty/Smarty.class.php");
  2. $t = new Smarty;
  3. $t->assign("title","Hello World!");
  4. $content = $t->fetch("templates/index.htm");
  5. //這里的 fetch() 就是獲取輸出內(nèi)容的函數(shù),現(xiàn)在$content變量里面,就是要顯示的內(nèi)容了
  6. $fp = fopen("archives/2005/05/19/0001.html", "w");
  7. fwrite($fp, $content);
  8. fclose($fp);
  9. ?>

第二種方法:利用ob系列的函數(shù)。這里用到的函數(shù)主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打開瀏覽器緩沖區(qū)的意思,打開緩沖后,所有來自PHP程序的非文件頭信息均不會(huì)發(fā)送,而是保存在內(nèi)部緩沖區(qū),直到你使用了ob_end_flush().而這里最重要的一個(gè)函數(shù),就是ob_get_contents(),這個(gè)函數(shù)的作用是獲取緩沖區(qū)的內(nèi)容,相當(dāng)于上面的那個(gè)fetch(),道理一樣的。

  1. ob_start();
  2. echo "Hello World!";
  3. $content = ob_get_contents();//取得php頁面輸出的全部內(nèi)容
  4. $fp = fopen("archives/2005/05/19/0001.html", "w");
  5. fwrite($fp, $content);
  6. fclose($fp);
  7. ?>

我選用的第2種方法 也就是用ob系列的函數(shù)

我剛開始看這個(gè)的時(shí)候有點(diǎn)不太明白 后來才知道ob是output buffering的意思 也就是輸出緩存

當(dāng)你準(zhǔn)備輸出的時(shí)候 所有的數(shù)據(jù)都保存在ob里面 服務(wù)器解析完php以后 把所有要輸出到客戶端的html代碼都存放在ob里面 如果我們要輸出html靜態(tài)頁面 只要把緩存取出來寫入一個(gè)html頁面即可

所以原理其實(shí)是很簡單的

這里用到了幾個(gè)函數(shù) 由于我初學(xué)php 很多函數(shù)我還不了解 所以這里也說明一下 希望可以幫助大家

ob_start():開始“捕捉”緩存 也就是從這里開始 打開瀏覽器的緩存

ob_end_flush():關(guān)閉瀏覽器緩存

ob_get_content():讀取緩存內(nèi)容

fopen(”文件路徑”,”打開模式”)打開文件 這個(gè)函數(shù)的打開模式有好幾種 下面介紹幾種主要的模式:

“r” 只讀方式打開,將文件指針指向文件頭。

“r+” 讀寫方式打開,將文件指針指向文件頭。

“w” 寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。

“w+” 讀寫方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。

fwrite(”文件名稱”,”寫入內(nèi)容”) 寫入文件

fclose() 關(guān)閉文件

由于我要轉(zhuǎn)換的html文件非常多 可能有幾百個(gè) 所以這里不能靜態(tài)指定fopen的路徑 大家可以設(shè)置一個(gè)路徑變量 里面可以保存用戶傳來的id等信息 方便進(jìn)行html文件命名 下面是我結(jié)合上次php讀取xml數(shù)據(jù)的一個(gè)簡單例子

  1. ob_start();//打開瀏覽器緩存
  2. //下面是讀取xml數(shù)據(jù)
  3. $parser = xml_parser_create(); //創(chuàng)建一個(gè)parser編輯器
  4. xml_set_element_handler($parser, "startElement", "endElement");//設(shè)立標(biāo)簽觸發(fā)時(shí)的相應(yīng)函數(shù) 這里分別為startElement和endElenment
  5. xml_set_character_data_handler($parser, "characterData");//設(shè)立數(shù)據(jù)讀取時(shí)的相應(yīng)函數(shù)
  6. $xml_file="1.xml";//指定所要讀取的xml文件,可以是url
  7. $filehandler = fopen($xml_file, "r");//打開文件
  8. while ($data = fread($filehandler, 4096))
  9. {
  10. xml_parse($parser, $data, feof($filehandler));
  11. }//每次取出4096個(gè)字節(jié)進(jìn)行處理
  12. fclose($filehandler);
  13. xml_parser_free($parser);//關(guān)閉和釋放parser解析器
  14. $name=false;
  15. $position=false;
  16. function startElement($parser_instance, $element_name, $attrs) //起始標(biāo)簽事件的函數(shù)
  17. {
  18. global $name,$position;
  19. if($element_name=="NAME")
  20. {
  21. $name=true;
  22. $position=false;
  23. echo "名字:";
  24. }
  25. if($element_name=="POSITION")
  26. {$name=false;
  27. $position=true;
  28. echo "職位:";
  29. }
  30. }
  31. function characterData($parser_instance, $xml_data) //讀取數(shù)據(jù)時(shí)的函數(shù)
  32. {
  33. global $name,$position;
  34. if($position)
  35. echo $xml_data."
    ";
  36. if($name)
  37. echo $xml_data."
    ";
  38. }
  39. function endElement($parser_instance, $element_name) //結(jié)束標(biāo)簽事件的函數(shù)
  40. {
  41. global $name,$position;
  42. $name=false;
  43. $position=false;
  44. }
  45. //xml數(shù)據(jù)讀取完畢
  46. $htmlname=$id.".html";//$id可以自己定義 這里代表用戶傳來的id
  47. $htmlpath="archives/".$htmlname; //設(shè)置路徑變量
  48. $content = ob_get_contents();//取得php頁面輸出的全部內(nèi)容
  49. $fp = fopen($htmlpath, "w");
  50. fwrite($fp, $content);
  51. fclose($fp);
  52. ?>

Related posts:

  1. 一個(gè)用PHP讀取XML數(shù)據(jù)的簡單例子 今天工作上碰到一個(gè)問題 由于我們的項(xiàng)目數(shù)據(jù)太少 所以需要從web search那邊借調(diào)數(shù)據(jù) 他們只給我們提供了一個(gè)xml的接口 因此我們需要把xml的數(shù)據(jù)轉(zhuǎn)化成html呈現(xiàn)給大家 由于項(xiàng)目是基于php的 所以就摒棄了用js來讀取xml選擇了繼續(xù)使用php 不過我以前從來沒有做過此類的嘗試 所以找了很多網(wǎng)上資料...
  2. 用php實(shí)現(xiàn)文件安全下載 最近在研究php實(shí)現(xiàn)文件下載的問題,按道理來說,一般的文件下載很簡單,建立一個(gè)鏈接指向到目標(biāo)文件就可以了,但是這樣就直接暴露了文件所在路徑,給盜鏈者打開了大門,并且可能會(huì)有安全隱患,一般來說,要實(shí)現(xiàn)安全的文件下載,在php下一般是利用header和fread這么來做的: 第一步 假設(shè)你要下載的是一個(gè)torrent的文件,那么先建立一個(gè)動(dòng)態(tài)php文件,用戶點(diǎn)擊下載文件的時(shí)候直接鏈接到這個(gè)php并傳回與文件位置相關(guān)的參數(shù)以幫助這個(gè)php能從數(shù)據(jù)庫中取出文件所在的真實(shí)位置;這樣做的另外一個(gè)好處是,可以通過這個(gè)php來對(duì)下載進(jìn)行統(tǒng)計(jì)計(jì)數(shù);這個(gè)過程并不難,所以就不寫代碼了,主要是對(duì)數(shù)據(jù)庫的查詢,假設(shè)文件的真實(shí)位置是$fileAdd,文件名為$fileName; 第二步 得到文件所在的真實(shí)位置以后,有人會(huì)用header的location直接重定向到這個(gè)文件,但是這樣仍然是不安全的,因?yàn)槟承┫螺d軟件還是可以通過重定向分析獲得你的文件位置信息,因此需要用另外一種方法,就是php的文件處理API函數(shù),這里主要是運(yùn)用fread函數(shù)把文件直接吐給瀏覽器,讓瀏覽器提示用戶下載,所有的這些處理都是在服務(wù)器端完成的,因此用戶是不會(huì)知道文件具體位置信息的,具體代碼如下: Header("content-type:application/octet-stream"); Header("content-disposition:attatchment;filename:".$fileName.".torrent"); if(file_exists($fileAdd) && $file=fopen($fileAdd,"r"))//判斷文件是否存在并打開...
  3. PHP優(yōu)秀的文件訪問功能 這些天和php的親密接觸讓我越來越喜歡這個(gè)語言O(shè)S的語言就是好 很多人為它寫函數(shù) 綜合起大家的力量這樣的語言是最有發(fā)展前途的今天和大家介紹一下php的文件訪問功能: php的文件訪問功能非常強(qiáng)大,當(dāng)然強(qiáng)大并不意味著難,在互聯(lián)網(wǎng)這個(gè)領(lǐng)域,越強(qiáng)大代表越簡單,因?yàn)楹芎糜?。在php里面,涉及到file訪問的函數(shù)有file()、fopen()、readfile()和get_file_content()等等。這里跟大家介紹最簡單實(shí)用的file()函數(shù),其他的函數(shù)運(yùn)用其實(shí)都差不多,大家可以去查php手冊(cè)。 下面是php手冊(cè)當(dāng)中對(duì)file()函數(shù)的簡單介紹: 引用內(nèi)容 file (PHP 3, PHP...
  4. 分享一個(gè)php遍歷目錄的函數(shù) 工作上有需要,自己寫了一個(gè),代碼如下: function outputDirFile($dir) { if ($handle = opendir($dir)) {   while (false...
  5. thebeststuff圖集的生成方法 之前發(fā)表的一個(gè)文章引發(fā)了一些很激烈的討論,事實(shí)上大家誤解了我的意思,我最想知道的是它的生成流程,而不是具體技術(shù)細(xì)節(jié),但是不管如何,在這里謝謝各位熱心留言的朋友了,這個(gè)周末在家我利用空暇時(shí)間把自己的一些想法用php表達(dá)了出來,初步成功地實(shí)現(xiàn)了這種效果,現(xiàn)在放上來和大家分享,下面是我利用GD隨機(jī)挑選位置生成的圖片: 要解決這個(gè)問題的關(guān)鍵在于圖片位置的選擇,具體來說分為兩步: 1. 隨機(jī)選擇一個(gè)位置(x、y坐標(biāo)); 2. 根據(jù)圖片的寬度、高度以及x、y坐標(biāo)判斷此位置是否可以放圖; 第一個(gè)步驟很好做,先用GD生成一張空白圖片(比如300*100),然后在空白圖中隨機(jī)選一個(gè)坐標(biāo)用來放置讀入的新圖片即可; 第二步稍微復(fù)雜一點(diǎn),因?yàn)橐袛嘀暗淖鴺?biāo)是否能夠放置新圖片,這里需要對(duì)之前已經(jīng)有圖片的位置做一個(gè)信息保存,以方便去逐一對(duì)比,我在這里使用了一個(gè)二維數(shù)組來保存之前圖片的位置信息,類似于數(shù)據(jù)庫中的一組數(shù)據(jù),第一維是圖片,第二維是圖片坐標(biāo)信息,包括x1、y1、x2、y2四個(gè)組成部分;有了這個(gè)數(shù)組,我們就可以在程序中循環(huán)判斷哪個(gè)區(qū)域?qū)τ诋?dāng)前圖片來說是可用的,然后遞歸調(diào)用GD的圖片copy生成函數(shù)就可以了。 下面是我的php代碼: 下載:...

分享名稱:用php生成靜態(tài)html頁面-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://weahome.cn/article/dpicii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部