php 產生靜態頁面

來源:互聯網
上載者:User

 

PHP產生靜態頁面 緩衝

一、引 言

在速度上,靜態頁面要比動態網頁面的比方php快很多,這是毫無疑問的,但是由於靜態頁面的靈活性較差,如果不藉助資料庫或其他的裝置儲存相關資訊的話,整體的管理上比較繁瑣,比方修改編輯.比方閱讀許可權限制等,但是,對應一些我們經常頻頻使用的檔案,比方說,開發的新聞發布系統,我們不希望很多使用者都讀取資料庫才顯示結果,這樣一方面消耗了伺服器的資源,另一方面佔去了瀏覽者大量可貴的回應時間,所有,有了"靜態頁面話"的做法,當前很多網站都採用這種技術,一般都是由管理後台控制,或者產生html直接顯示,或者xhtml用css控制顯示,或者產生xml用xslt顯示,這些技術都不是難的,在這裡我就淺顯的說說產生html的方法.

二、預備知識  

模板技術:

[PHP]
模板引擎Smarty深入淺出介紹   --2005-12-31
[PHP]
笑談配置,使用Smarty技術         --2006-01-04

緩衝技術:    

有些資訊比方經常不變的,但是還是能變的資訊放在緩衝中以加快顯示速度,這是很有價值的,所謂的緩衝,通俗的理解就是一些儲存在伺服器端的共用資訊.它是於伺服器同生死的,我們在儲存緩衝的時候可以指定下次更新的時間的判斷,比方要在5分鐘更新一次,可以記錄上次更新的時間,和目前時間比較,如果大於 5 分鐘 ,讀取資料庫,更新換成,否則直接讀取快取資料,當然,緩衝需要用戶端使用者啟用的,只需一次.

ob_start()函數:開啟輸出緩衝區.
    函數格式 void ob_start(void)
    說明:當緩衝區啟用時,所有來自PHP程式的非檔案頭資訊均不會發送,而是儲存在內部緩衝區。為了輸出緩衝區的內容,可以使用ob_end_flush()或flush()輸出緩衝區的內容。

Flush:重新整理緩衝區的內容,輸出。
    函數格式:flush()
    說明:這個函數經常使用,效率很高。

ob_get_contents :返回內部緩衝區的內容。
    函數格式:string ob_get_contents(void)
    說明:這個函數會返回當前緩衝區中的內容,如果輸出緩衝區沒有啟用,則返回 FALSE.

ob_get_length:返回內部緩衝區的長度。
    函數格式:int ob_get_length(void)
    說明:這個函數會返回當前緩衝區中的長度;和ob_get_contents一樣,如果輸出緩衝區沒有啟用,則返回 FALSE.

ob_end_clean:刪除內部緩衝區的內容,並且關閉內部緩衝區
    函數格式:void ob_end_clean(void)
    說明:這個函數不會輸出內部緩衝區的內容而是把它刪除

ob_end_flush:發送內部緩衝區的內容到瀏覽器,並且關閉輸出緩衝區
    函數格式:void ob_end_flush(void)
    說明:這個函數發送輸出緩衝區的內容(如果有的話)

ob_implicit_flush:開啟或關閉絕對重新整理
    函數格式:void ob_implicit_flush ([int flag])
    說明:預設為關閉緩衝區,開啟絕對輸出後,每個指令碼輸出都直接發送到瀏覽器,不再需要調用 flush()    

檔案寫入:    

int fwrite ( resource handle, string string [, int length] )
fwrite() 把 string 的內容寫入 檔案指標 handle 處。 如果指定了 length,當寫入了 length 個位元組或者寫完了 string 以後,寫入就會停止,視乎先碰到哪種情況。

fwrite() 返回寫入的字元數,出現錯誤時則返回 FALSE 。
相關參考官方網站: 檔案參考

三、解決方案

思路: 開啟 ob_start緩衝,當已經調出資料的時候擷取 ob_get_contents,然後產生靜態頁,ob_end_clean清除緩衝.ok,就這麼來,來看一個例子(php+mysql的結合):

建立資料庫:

PHP代碼
  1. Create TABLE `bihtml` (   
  2.   `id` int(11) NOT NULL auto_increment,   
  3.   `szdtitle` varchar(16) NOT NULL,   
  4.   `szdcontent` text NOT NULL,   
  5.   PRIMARY KEY  (`id`)     
  6. ) TYPE  

擷取當前的ID,並匯入模板:

PHP代碼
  1. ob_start();   
  2. $id =_POST[ 'id'
    ]   
  3. if (!isset(
    $id )& is_integer (
    $id ))   
  4. {   
  5.  @ $db =
    new  mysqli( 'localhost' ,
    'root' , 'admin'
    , 'bihtml' );   
  6.   $result =
    $db ->fetch_one_array( "select  * from szd_bi where id='$id'"
    );   
  7.     if (!
    empty empty (
    $result ))   
  8.    {    
  9.     $tmp ->assign(
    array (   
  10.      "Szdtitle" ,htmlspecialchars(
    $result [ 'titles'
    ]),   
  11.      "Szdcontent"
    , $result [ 'titles'
    ]));    
  12.    }   
  13.   $tpl ->display(
    'default_1.tpl' );   
  14.   $this_my_f = ob_get_contents(); 
    //此處關鍵   
  15.  ob_end_clean();   
  16.   $filename  = 
    "$id.html" ;   
  17.   if (tohtmlfile_cjjer(
    $filename , $this_my_f
    ))   
  18.   echo  
    "產生成功 $filename" ;   
  19.   else   
  20.   echo  
    "產生識別" ;   
  21.  }   
  22. }   
  23.   
  24. //把組建檔案的過程寫出函數   
  25. function  tohtmlfile_cjjer(
    $file_cjjer_name , $file_cjjer_content
    )   
  26. {   
  27.   if  (
    is_file  ( $file_cjjer_name )){   
  28.   @unlink ( $file_cjjer_name );   
  29.  }   
  30. $cjjer_handle  =  fopen
     ( $file_cjjer_name ,
    "w" );   
  31.   if  (!
    is_writable  ( $file_cjjer_name
    )){   
  32.    return  false;   
  33.  }   
  34.   if  (!fwrite (
    $cjjer_handle , $file_cjjer_content
    )){   
  35.    return  false;   
  36.  }    
  37. fclose ( $cjjer_handle
    );  //關閉指標   
  38. return   $file_cjjer_name
    ;   
  39. }   
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.