因為每次用戶點擊動態連結的時候都會對伺服器發送資料查詢的要求
對於一個訪問量可能達百萬千萬級別的網站來說這無疑是伺服器一個大大的負擔
所以把動態資料轉換成靜態html頁面就成了節省人力物力的首選
因為此前沒有相應的經驗剛開始的時候覺得這個技術很神秘
但在看了一些例子以後發現並不是那麼複雜(不過網上的資料並不是那麼特別詳細)
經過一個上午加中下午的試驗終於把該做的任務完成了下面是一些心得和一個簡單的例子
希望大蝦們不要笑話
一般來說用php轉換輸出html頁面有兩種辦法引用大蝦的文章如下:
第一種:利用模板。目前PHP的模板可以說是很多了,有功能強大的smarty,還有簡單易用的smarttemplate等。它們每一種模板,都有一個獲取輸出內容的函數。我們產生靜態頁面的方法,就是利用了這個函數。用這個方法的優點是,程式碼比較清晰,可讀性好。
這裡我用smarty做例子,說明如何產生靜態頁:
- require("smarty/Smarty.class.php");
- $t = new Smarty-a
>assign("title","Hello World!");- $content = $t->fetch("templates/index.htm");
- //這裡的fetch() 就是取得輸出內容的函數,現在$content變數裡面,就是要顯示的內容了
- $fp = fopen("archives/2005/05/19/0001.html", "w");
- fwrite($fp, $content);
-
fclose($fp);- ?>
-
第二種方法:利用ob系列的函數。這裡用到的函數主要是ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是開啟瀏覽器緩衝區的意思,開啟緩衝後,所有來自PHP程式的非檔案頭資訊不會傳送,而是保存在內緩衝區,直到你使用了ob_end_flush().而這裡最重要的一個函數,就是ob_get_contents(),這個函數的作用是獲取緩衝區的內容,相當於上面的那個fetch(),道理一樣的。
ob_start();- echo "Hello World!";
- $content = ob_get_contents();//取得php頁面輸出的全部內容
- $content = ob_get_contents();//獲取2005/05/19/0001.html", "w");
- fwrite($fp, $content);
- fclose($fp);
- ?>
- 我選用的第一個方法也選用的第一個方法也選用就是用ob系列的函數
我剛開始看這個的時候有點不太明白後來才知道ob是output buffering的意思也就是輸出快取
當你準備輸出的時候所有的資料都保存在ob裡面伺服器解析完php以後把所有要輸出到客戶端的html程式碼都存放在ob裡面如果我們要輸出html靜態頁面只要把快取取出來寫入一個html頁面即可
所以原理其實是很簡單的
這裡用到了幾個函數由於我初學php 很多函數我還不了解所以這裡也說明一下希望可以幫助大家
ob_start():開始「捕捉」快取也就是從這裡開始開啟瀏覽器的快取
ob_end_flush():關閉瀏覽器快取
ob_get_content():讀取快取內容
fopen(」檔案路徑」,」開啟模式」)開啟檔案這個函數的開啟模式有好幾種下面介紹幾種主要的模式:
「 r” 只讀方式打開,將檔案指標指向檔案頭。
“r+” 讀寫方式打開,將文件指標指向檔案頭。
「w」 寫入方式打開,將檔案指標指向檔案頭並將檔案大小截為零。如果文件不存在則嘗試建立之。
「w+」 讀寫方式打開,將檔案指標指向檔案頭並將檔案大小截為零。如果文件不存在則嘗試建立之。
fwrite(”檔案名稱」,」寫入內容」) 寫入檔案
fclose() 關閉檔案
由於我要轉換的html檔案非常多可能有幾百個所以這裡不能靜態指定fopen的路徑大家可以設定一個路徑變數裡面可以儲存使用者傳來的id等資訊方便進行html檔命名下面是我結合上次php讀取xml資料的一個簡單範例
- ob_start();//開啟瀏覽器快取
-
- //下面是讀取xml資料
- $parser = xml_parser_create(); parser, "startElement", "endElement");//設立標籤觸發時的對應函數這裡分別為startElement和endElenment
- xml_set_character_data_handler($parser, "characterData");//設立資料讀取時的對應函數
- $xml_file="1.xml";//指定要讀取的xml檔,可以是url
- $filehandler = fopen($xml_file, "r");//開啟檔案
-
-
- while data = fread($filehandler, 4096))
- {
- xml_parse($parser, $data, feof($filehandler));
- }//每次取出4096個位元組進行處理
$filehandler);- xml_parser_free($parser);//關閉和釋放parser解析器
-
-
- $name=false;
- $position
- $name=false;
- . attrs) //起始標籤事件的函數
- {
- global $name,$position;
- if($element_name=="NAME")
- {
- $name=true;
- ;
- echo "名字:";
- }
- if($element_name=="POSITION")
- {$name=false;
- $position=true;{$name=false;
- $position=true;
- }
-
- function characterData($parser_instance, $xml_data) //讀取資料時的函數
- {
- globalfcom
";
- if($name)
- echo $xml_data."
";
- }
-
- function endElementnce($parser_instance)
{- global $name,$position;
- $name=false;
- $position=false;
- }
- //xml0. ";//$id可以自己定義這裡代表使用者傳來的id
- $htmlpath="archives/".$htmlname; //設定路徑變數
- $content = ob_get_contents();//取得php頁面輸出的全部內容
- $fp = fopen($htmlpath, "w");
- fwrite($fp, $content);
- fclose($fp);
- /www.cnblogs.com/awinlei/archive/2013/03/04/2942962.html
-
以上就介紹了用php產生靜態html頁面通用2種方法,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。 -
-