首頁  >  文章  >  後端開發  >  http://www.56.com/m2v/?magic=1 PHP產生靜態頁面詳解

http://www.56.com/m2v/?magic=1 PHP產生靜態頁面詳解

WBOY
WBOY原創
2016-07-29 08:35:251188瀏覽

我們先回顧一些基本的概念。
  一,PHP腳本與動態頁。
  PHP腳本是一種伺服器端腳本程序,可透過嵌入等方法與HTML檔案混合,也可以類,函數封裝等形式,以範本的方式對使用者請求進行處理。無論以何種方式,它的基本原理是這樣的。由客戶端提出請求,請求某一頁面-----> WEB伺服器引入指定對應腳本進行處理-----> 腳本被載入伺服器-----> 由伺服器指定的PHP解析器對腳本進行解析形成HTML語言形式----> 將解析後的HTML語句以包的方式傳回給瀏覽器。由此不難看出,在頁面傳送到瀏覽器後,PHP就不存在了,已轉換解析為HTML語句。客戶請求為一動態文件,事實上並沒有真正的文件存在在那裡,是PHP解析而成相對應的頁面,然後發送回瀏覽器。這種頁面處理方式稱為「動態頁面」。
  二,靜態頁。
  靜態頁面是指在伺服器端確實存在的僅含HTML以及JS,CSS等客戶端執行腳本的頁面。它的處理方式是。由客戶端提出請求,請求某一頁面 ----> WEB伺服器確認並載入某一頁面 ----> WEB伺服器將該頁面以包的形式傳回瀏覽器。由此過程,我們比較一下動態頁面,即可方現。動態頁面需由WEB伺服器的PHP解析器進行解析,而且通常還需連接資料庫,進行資料庫存取操作,然後才能形成HTML語言資訊包;而靜態頁面,無須解析,無須連接資料庫,直接傳送,可大大減輕伺服器壓力,提高伺服器負載能力,大幅提供頁面開啟速度和網站整體開啟速度。但其缺點是,不能動態地對請求進行處理,伺服器上必須確實存在該文件。
  三,模板及模板解析。
  範本即尚未填入內容html檔案。例如:
 temp.html

  

{ title }
  
 
PHP處理:
 templetest.php
  $title = "拓邁國際測試範本"; author:Matrix@Two_Max";
 $fp          = fopen ("temp.html","r");
);
  $content .= str_replace ("{ file }",$file,$content);
  $content .= str_replace ("{ title }",$content .= str_replace ("{ title }",$content .= str_replace ("{ title }",$title,$htitle,$; $content;
?> 
 
  模板解析處理,即將經PHP腳本解析處理後得出的結果填入(content)進模板的處理過程。通常藉助於模板類別。目前較流行的模板解析類別有phplib,smarty,fastsmarty等等。模板解析處理的原理通常為替換。也有些程式設計師習慣將判斷,循環等處理放進模板檔案中,用解析類別處理,典型應用為block概念,簡單來說即為一個循環處理。由PHP腳本指定循環次數,如何循環代入等,再由範本解析類別具體實作這些操作。
  好了,對比過靜態頁面與動態頁面各自的優劣,現在我們就來說說,如何用PHP產生靜態檔案。
  PHP產生靜態頁面並不是指PHP的動態解析,輸出HTML頁面,而是指用PHP建立HTML頁面。同時因為HTML的不可寫性,我們所建立的HTML若有修改,則需刪掉重新產生即可。 (當然你也可以選擇用正則進行修改,但個人認為那樣做倒不如刪掉重新生成來得快捷,有些得不償失。)
  言歸正傳。用過PHP檔案運算函數的PHP FANS知道,PHP中有一個檔案運算函數fopen,也就是開啟檔案。若文件不存在,則嘗試建立。這即是PHP可以用來建立HTML檔案的理論基礎。只要用來存放HTML檔案的資料夾有寫入權限(即權限定義0777),即可建立檔案。 (針對UNIX系統而言,Win系統無須考慮。)仍以上例為例,若我們修改最後一句,並指定在test目錄下產生一個名為test.html的靜態檔案:
  $title = "拓邁國際測試模板";
  $file   = "TwoMax Inter test templet,
author:Matrix@Two_Max";
 $fp     ($ fp,filesize ("temp.html"));
  $content .= str_replace ("{ file }",$file,$content);
  title,$content);
  // echo $content;
  $filename = "test/test.html";
   handle   ,建立檔案
  /*
 檢查檔案是否已建立且可寫入
  */
  if (!is_writable ($filename)){   (!is_writable ($filename)){   (!is_writable ($filename)){   「不可寫,請檢查其屬性後重試!");
  }
  if (!fwrite ($handle,$content)){  //將資訊寫入檔案
     ".$filename."失敗! ?>   
  實際應用中常見問題解決方案參考:
  一,文章列表問題:
  在資料庫中建立字段,記錄檔名,每產生一個文件,將自動產生的文件名稱存入資料庫,對於推薦文章,只需指向存放靜態文件的指定資料夾中的該頁面即可。利用PHP操作處理文章列表,存為字串,生成頁面時替換此字串即可。如,在頁面中放置文章清單的表格加入標記{ articletable },而在PHP處理文件中:
  $title = "拓邁國際測試模板";
  $file   "拓邁國際測試模板";
  $file   "拓邁國際測試模板";
  $file   "拓邁國際測試模板";
  $file   TwoMax Inter test templet,
author:Matrix@Two_Max";
 $fp          = fopen ("temp.html html"));
  $content .= str_replace ("{ file }",$file,$content);
  $content .= str_replace ("{ title }",$content,$content); 🎜>  //  產生清單開始
  $list = '';
  $sql = "select id,title,filename from ( $result = mysql_fetch_array ($query)){ 
     $list .= ''.$res '
';
  }
  $content .= str_replace ("{ articletable }",$list,$content);
  //產生清單結束
$content;
  $filename = "test/test.html";
  $handle    = fopen ($filename,"w"); //開啟檔案指標,建立檔案
文件是否已建立且可寫入
  */
  if (!is_writable ($filename)){ 
     die ("檔案:".$filename."不可寫,請檢查其屬性後再試! ");
  }
  if (!fwrite ($handle,$content)){  //將資訊寫入檔案
     die file("產生檔案".$filename."失敗! ");
  } 
  fclose ($handle); //關閉指標
  die ("建立檔案".$filename."成功!");
?> ("建立檔案".$filename."成功!");
?> 
 二,分頁問題。每頁篇數。 ".$filename."成功! ";這句去掉,放到循環後的顯示,因為語句將中止程式執行。例如:
  $fp          = fopen ("temp.html","r");
  $content >  $onepage = '20';
  $sql          = 「以文章選擇id,其中頻道='$channelid'";        = mysql_num_rows ( $query);
  $allpages   = ceil ($num / $onepage);
  for ($i = 0;$i        $indexpath = "index.html";
      } else { 
  }
     $start = $i * $ onepage;
     $list    = '';
     $sql_for_page =「從文章中選擇名稱、檔案名稱、標題,其中頻道='$channel_$ mysql_query ($sql_for_page);
     while ($result = $query_for_page){ 
     .$title.'
';
      }
     $content = str_replace (“{ articletable }”,$list,$content); { 
        @unlink ($indexpath); //若檔案已存在,刪除
      }
  🎜 >     /*

檢查文件是否已且建立可寫入
     */
     ."不可寫,請檢查其屬性後重試! "; //修改為echo
      }
     if (!fwrite ($handle,$content)){  //將資訊寫入檔案寫入檔案編號$ "; //修改為echo
      } 
     fclose ($handle); //關閉遊標
   };未完全,請檢查文件權限系統後重新生成! ");
?>   
大致思路如此,其中如其他數據生成,數據輸入輸出檢查,分頁內容指向頁面中加入等可考慮的情況。
在實際文章系統處理過程中涉及,還有問題有待考慮,與動態頁面不同的地點,需要注意的地方還有很多。
以上就介紹了http://www.56.com/m2v/?magic=1 PHP產生靜態頁面詳解,包括了http://www.56.com/m2v/?magic=1方面的內容,希望對PHP教程有興趣的朋友可以幫忙。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn