❶ php技術生成靜態頁面的實現
我們先回顧一些基本的概念。
一、PHP腳本與動態頁面。
PHP腳本是一種伺服器端腳吵旅扒本程序,可通過嵌入等方法與HTML文件混合,也可以類,函數封裝等形式,以模板的方式對用戶請求進行處理。無論以何種方式,它的基本原理是這樣的。由客戶端提出請求,請求某一頁面-----Web伺服器引入指定相應腳本進行處理-----腳本被載入伺服器-----由伺服器指定的PHP解析器對腳本進行解析形成HTML語言形式----將解析後的HTML語句以包的方式傳回給瀏覽器。由此不難看出,在頁面發送到瀏覽器後, PHP就不存在了,已被轉化解析為HTML語句。客戶請求為一動態文件,事實上並沒有真正的文件存在在那裡,是PHP解析而成相升昌對應的頁面,然後發送回瀏覽器。這種頁面處理方式被稱為「動態頁面」。
二、靜態頁面。
靜態頁面是指在伺服器端確實存在的僅含HTML以及JS,CSS等客戶端運行腳本的頁面。它的處理方式是。由客戶端提出請求,請求某一頁面- ---
WEB伺服器確認並載入某一頁面----WEB伺服器將該頁面以包的形式傳遞回瀏覽器。由這一過程,我們對比一下動態頁面,即可方現。動態頁面需由Web伺服器的PHP解析器進行解析,而且通常還需連接資料庫,進行資料庫存取操作,然後才能形成HTML語言信息鎮知包;而靜態頁面,無須解析,無須連接資料庫,直接發送,可大大減輕伺服器壓力,提高伺服器負載能力,大幅提供頁面打開速度和網站整體打開速度。但其缺點是,不能動態地對請求進行處理,伺服器上必須確實存在該文件。
三、模板及模板解析。
模板即尚未填充內容html文件。例如:
temp.html
Code:
以下是引用片段:
HTML
TITLE{ title }/TITLE
BODY
this is a { file } file''''s templets
/BODY
/HTML
PHP處理:
以下是引用片段:
templetest.php
Code:
$title = "HP愛好者測試模板";
$file = "TwoMax Inter test templet,
author:Sheyi";
$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;
?
模板解析處理,即將經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的靜態文件:
Code:
以下是引用片段:
$title = "拓邁國際測試模板";
$file = "TwoMax Inter test templet,
author:_Max"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"); //打開文件指針,創建文件
/*
檢查文件是否被創建且可寫
*/
if (!is_writable ($filename)){
die ("文件:".$filename."不可寫,請檢查其屬性後重試!");
}
if (!fwrite ($handle,$content)){ //將信息寫入文件
die ("生成文件".$filename."失敗!");
}
fclose ($handle); //關閉指針
die ("創建文件".$filename."成功!");
?
實際應用中常見問題解決方案參考:
一、文章列表問題:
在資料庫中創建欄位,記錄文件名,每生成一個文件,將自動生成的文件名存入資料庫,對於推薦文章,只需指向存放靜態文件的指定文件夾中的該頁面即可。利用PHP操作處理文章列表,存為字元串,生成頁面時替換此字元串即可。如,在頁面中放置文章列表的表格加入標記{ articletable },而在PHP處理文件中:
Code:
以下是引用片段:
$title = "拓邁國際測試模板";
$file = "TwoMax Inter test templet,
author:_Max"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);
// 生成列表開始
$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);
//生成列表結束
// echo $content;
$filename = "test/test.html";
$handle = fopen ($filename,"w"); //打開文件指針,創建文件
/*
檢查文件是否被創建且可寫
*/
if (!is_writable ($filename)){
die ("文件:".$filename."不可寫,請檢查其屬性後重試!");
}
if (!fwrite ($handle,$content)){ //將信息寫入文件
die ("生成文件".$filename."失敗!");
}
fclose ($handle); //關閉指針
die ("創建文件".$filename."成功!");
?
二、分頁問題。
如我們指定分頁時,每頁20篇。某子頻道列表內文章經資料庫查詢為45條,則,首先我們通過查詢得到如下參數:1,總頁數;2,每頁篇數。第二步, for ($i = 0; $i
allpages; $i++),頁面元素獲取,分析,文章生成,都在此循環中執行。不同的是,die ("創建文件".$filename."成功!";這句去掉,放到循環後的顯示,因為該語句將中止程序執行。例:
Code:
以下是引用片段:
$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$onepage = '''ཐ''''
$sql = "select id from article where channel=''''$channelid''''";
$query = mysql_query ($sql);
$num = mysql_num_rows ($query);
$allpages = ceil ($num / $onepage);
for ($i = 0;$i$allpages; $i++){
if ($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"); //打開文件指針,創建文件
/*
檢查文件是否被創建且可寫
*/
if (!is_writable ($indexpath)){
echo "文件:".$indexpath."不可寫,請檢查其屬性後重試!"; //修改為echo
}
if (!fwrite ($handle,$content)){ //將信息寫入文件
echo "生成文件".$indexpath."失敗!"; //修改為echo
}
fclose ($handle); //關閉指針
}
fclose ($fp);
die ("生成分頁文件完成,如生成不完全,請檢查文件許可權系統後重新生成!");
?
大致思路如此,其中如其它數據生成,數據輸入輸出檢查,分頁內容指向等可酌情在頁面中加入。
在實際文章系統處理過程當中,還有許多問題有待考慮,與動態頁面不同之處,需注意的地方還有很多。但大致思路即是如此,其它方面可舉一反三而得。
❷ php模板與框架區別問題
smarty主要是模板引擎,功能是將MVC中view層的php和html代碼分離,並不算框架,比如將<?php echo $var;?>替換為<!--{$var}-->,以便讓美工可以更好的閱讀html布局,不過老實說在這點上有點脫褲子放P的感覺。現在一般主流的框架都直接用php來當模板語言了,不太建議使用smarty,當然這東西比較簡單,隨便看下語法也就夠了
而現在php主流的框架一般都是MVC的,同時,會提供比較豐富的功能組件,比如許可權控制,比如將smarty也內置進來,等等。當然,個人認為對於團隊來說,框架最主要的功能,就是統一規范上,遵循一定得規范的話,對整個項目的開發及日後的維護相當關鍵。zend framework、cakephp、symfony國外大框架中比較好的。zend framework是官方框架,想學的話建議直接zend吧,用的人應該也是最多的。國內的thinkphp、qeephp也相當不錯,畢竟是國內的,學習起來也很方便
❸ PHP 各種框架能簡述一下嗎
這些框架都是大同小異的,都是基於mvc標准來做的,區別在於是不是oop(面向對象)的思想來做的。
框架說白就是將一些常用到的函數進行封裝,讓別人更好的調用,並且在安全性上有比較大的提高,同時在建站的時候速度也能更快,前提是你要熟悉這門框架技術。
你上面列舉到的都是一些php常見的框架技術,你可以只學其中一種或2種,沒有必要都要去學的,當然你全部學了也是可以的。
你只要對php的基礎有較深入的理解,那麼這些框架你用起來基本上不會太難的。
❹ PHP框架的PHP開發框架
一直以來php框架被廣泛利用,多半都是基於mvc架構模式的,還有基於事件驅動模式的,大致列舉幾個。ThinkPHP是一個性能卓越並且功能豐富的輕量級PHP開發框架,本身具有很多的原創特性,並且倡導大道至簡,開發由我的開發理念,用最少的代碼完成更多的功能,宗旨就是讓WEB應用開發更簡單、更快速。從1.*版本開始就放棄了對PHP4的兼容,因此整個框架的架構和實現能夠得以更加靈活和簡單。2.0版本更是在之前的基礎上,經過全新的重構和無數次的完善以及改進,達到了一個新的階段,足以達到企業級和門戶級的開發標准。國人開發的PHP框架,目前最新版本為3.2.3版本。
Canphp是一個中國開源的php框架,主要的設計理念就是為了追求簡單,減少php初學者的學習成本,而且追求高效率,模版類不提供其他標簽,直接應用php的源代碼,還有它是微內核設計,移植性強,鬆散耦合等特點,能集成到你任何一個系統裡面。其中集成的http類相當的強大,採集圖片速度相當的快,為什麼這樣呢?因為適用了模擬非同步多進程的原理。
KYPHP是一個中國開源的PHP框架,kyphp嚴格遵守OOP和MVC的理念,具有控制項化、可擴展性強。kyphp設計彎虧理念是自由、簡單。既可以用php源碼編程,也可以使用標簽,支持多語言,多陸鬧鏈資料庫,多皮膚,多模型部署等,為程序員節省更多的時間。
InitPHP是一款輕量級的php開發框架,採用分層體系架構,適合大中型網站架構。提供豐富的library類庫,以及簡單的框架擴展機制。InitPHP還提供詳細的開發文檔,可以讓您在使用該框架的時候更加簡單實用。InitPHP實現了抽象DB層、分層體系架構、緩存無縫切換機制、簡單模板機制、多模型部署機制、強大的安全體系,是您快速開發php應用的利器!
SpeedPHP是一款全功能的國產PHP應用框架系統。她以「快速開發、快速學習、快速運行」為理念,在提高團隊開發效率、容易學習及使用、輕量級架構以增加執行速度等方面有著突出的表現。SpeedPHP框架是從實際運行的商業系統中取其精華而成的,在穩定性和運行速度上都非常出色;同時有著清晰的架構,更有利於提高團隊開發效率,教程眾多,入門容易,號稱最適合初學者的PHP框架,快速帶你進入PHP高手的行列。
CdvPHP一款簡單開源PHP框架,靈感來源於DX,根據實際開發總結匯成快捷方便的輕量級框架。沒有太多的硬性要求,也沒有一本超厚的幫助手冊。快速開發、部署、學習必備利器。KPHP即(kphp開源框架)是為了提高PHP開發效率而研發php開源框架,其核心簡單精煉,代碼安全並易於理解,功能更符合php學習開發的的需要,而且易於學習不改變程序員的開發習慣。ZendFramework在開發社區中有大量的追隨者,它致力於Web2.0風格的程序。因為它眾多的追隨者組成的活躍用戶開發的擴展支持,Zend被稱為「ThePHPCompany」。Zend是一個(也可能不是)今天可用的最受歡迎的PHP開發框架。它有健壯的特徵能夠支持協作開發,它需要一些PHP的額外知識。
Codelgniter以它的簡單易用,性能和速度而聞名。與Symphony不同,這款PHP開發框架對於共享主機的用戶而言很理想,如果你想有一個小型覆蓋面的框架。它提供了簡單的解決方案,還有擴展的知識庫,通過視頻教程,用戶指南和wiki來提供支持。
CakePHP無論對於初學者還是職業PHP開發者都是很好的選擇。它基於與RubyonRails同樣的原則而設計,它十分注重快速開發——這使得它成為一個非常好的用於RAD的開發框架。它快速增長的支持系統,簡潔性和可測量性使得CakePHP成為今天可用的最受歡迎的PHP開發框架之早孫一。
Symfony是為那些更加職業的主要開發企業級程序的開發者而准備的——特別是Askeet和Yahoo!Bookmarks。這款開源PHP開發框架有著豐富的特性,做起這些來綽綽有餘,它主要的缺點是比其他的框架略微慢一些。
Yii是一個基於組件、用於開發大型Web應用的高性能PHP框架。它將Web編程中的可重用性發揮到極致,能夠顯著加速開發進程。Yii(讀作「易」),代表簡單(easy)、高效(efficient)、可擴展(extensible)。
Seagull是一個良好的PHP開發框架,可以用來開發Web,命令行和GUI程序。這是一款無論對初學者還是職業程序員而言都及其簡單的開發框架。對於初學者,Seagull提供一套包含樣常式序的庫,經過簡單修改就能符合你的要求,而對於專家級程序員,Seagull提供了一整套設置選項——包括最佳練習,標準的和模塊化的代碼庫——來快速簡單地構建Web程序。Seagull有一個活躍的用戶社區以及豐富的支持文檔。
Laravel是一套簡潔、優雅的PHPWeb開發框架(PHPWebFramework)。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網路APP,而且每行代碼都可以簡潔、富於表達力。E是一款非常簡潔優秀開源的超輕量級PHP框架,致力於追求簡潔,安全,自由,高效,是中小型項目首選框架。框架構架合理,一鍵生成完全合乎規范的大型網站文件夾架構,網站架構一目瞭然。強大的外部類庫支持,分布式存儲,強大的緩存系統,內置smarty模板引擎,單入口MVC模式,面向對象編程,具有微內核設計,移植性強,鬆散耦合等特點,能集成到你任何一個系統裡面。無論您是一個NewPHPer還是OLDPHPER,那麼E框架是您的首選。學習完E框架後您可以快速並且輕松的駕馭其他框架,步入php高手之列。
DuoLamPHP是一款超輕量級的PHP框架,命名是按照多啦A夢動漫給改成的拼音形式。DP是一個簡單、高效、上手容易的PHP框架,遵循apache開源協議。可以快速搭建出一個項目,作為一個超輕量級的PHP框架,完美支持MVC,完全面向對象。
Difeye框架是一款超輕量級PHP框架,由Kohana框架精簡而來,主要特點有:資料庫連接自動主從讀寫分離配置,適合單機和分布式站點部署;支持Smarty模板機制;支持mysql、nosql類的mongodb等第三方資料庫模塊;完全分離頁面和動作,自動執行Page_Load入口函數,支持二級路由,將頁面模塊和頁面上的動作完全分離,使站點升級遷移更簡單;框架簡單易學容易部署;
GalaxixPhp是一套專業的php建站框架,主要用於讓用戶在網上的建站,開發人員使用用GalaxixPhp可以大大的縮小中型甚至大型網站的開發周期。GalaxixPhp兼容JavaScript,可以無縫地與Javascript,flash,PHP等程序集成,適合構建展示、CMS、商城、論壇、博客、Wiki、等各種網站。並且官網上學習和說明文檔以及視頻教程齊全。是針對專業開發的人員的收費框架。並且官方正在不斷推出更新更實用的框架插件。
PhpPeanuts是一個用以開發資料庫後端應用的PHP框架,包含一個可擴展的動態腳手架用來創建一個完整的web應用,提供用戶界面和ORM,包括CRUD操作、關聯關系以及一些示例查詢。phpPeanuts2.0完全支持PHP5,遵循ESTRICT標准,不再使用變數引用來傳遞對象;提升了靈活性;更獨立的模塊,以及迭代的對象復制等等。
RongFramework是一個國產的基於php5的面向對象開發框架,開發的主要目的是簡化開發、高性能開發。支持資料庫文件緩存、資料庫通用操作及封裝。簡化CRUD代碼編寫。支持在線生成CRUD代碼,只要選中數據表名稱,就可以生成CRUD代碼。不懂編程的人也可以做到。rongframework分為php代碼模板(classRong_View_PHP)和Rong_View_Wudimei(無敵美模板引擎,類似smarty)兩種模板機制。擁有良好的MVC機制和url美化方式、可以在代碼中實現URL重寫(由Rong_Countroller_Route實現)。
OpenbizFramework是為搭建企業應用而設計的PHP的基於面向對象的快速開發框架。它可以幫助專業軟體開發人員和技術咨詢專家來構建用於網路上的企業級應用。OpenbizFramework的設計目標是節省構建復雜應用系統的開發投入和縮短開發時間。藉助於Openbiz的幫助,應用程序的開發將基於完善的MVC架構建立,以Metadata驅動為核心描述業務邏輯,支持多種ORM邏輯,並且有OpenbizAppbuilder作為圖形化集成開發環境的快速開發平台。
❺ 求大神 解釋smarty和thinkphp的區別
====ThinkPHP是mvc框架 主要用於後台語言開發
====Smarty是模板引擎 用於前台模板更改
ThinkPHP是一個快速、兼容而且簡單的輕量級國產PHP開發框架,誕生於2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開源協議發布,從Struts結構移植過來並做了改進和完善,同時也借鑒了國外很多優秀的框架和模式,使用面向對象的開發結構和MVC模式,融合了Struts的思想和TagLib(標簽庫)、RoR的ORM映射和ActiveRecord模式
Smarty是一個使用PHP寫出來的模板引擎,是目前業界最著名的PHP模板引擎之一。它分離了邏輯代碼和外在的內容,提供了一種易於管理和使用的方法,用來將原本與HTML代碼混雜在一起PHP代碼邏輯分離。簡單的講,目的就是要使PHP程序員同前端人員分離,使程序員改變程序的邏輯內容不會影響到前端人員的頁面設計,前端人員重新修改頁面不會影響到程序的程序邏輯,這在多人合作的項目中顯的尤為重要。
❻ php 的框架與模板
樓主的認知不對哦,以下為樓主解惑:
框架:在php源碼的基礎上,開發者將常用的功能進行二次封裝形成的代碼集合,其本身往往不具備任何可用的功能,其目的僅僅是使開發人員可以基於框架更快的開發出符合要求的應用。例如,不使用框架開發一個用戶管理功能可能需要5天,使用框架可以將這個時間縮短到2天。實際上,對於任何一個項目,訪問控制、資料庫訪問、文件處理等功能都是必備的,框架就是將這些常用功能進行了更易用的封裝,避免開發人員在通用組件上重復開發,浪費時間。
模板:為了將PHP內容和html內容更好的分離為目的產生的一種應用,其主要目的是為了網頁製作人員可以不去學習PHP就能修改頁面的內容(可惜不學PHP還要學smarty,因此我個人並不覺得模板真的能帶來什麼實際的好處)
另外,如dede,DZ,PHPCMS等是基於PHP的產品,本身已經具備了大量的功能,安裝之後就能使用,當然,因為需求的不同可能需要在該產品的基礎上進行二次開發。
綜述,模板沒有太大的價值,完全可以在非用不可的時候再去學習,對於PHP開發人員來說,smarty可以立刻上手。它可以(也只能)被框架或PHP產品使用。框架是必須掌握的,定製性很強的項目必然都是基於框架開發的。PHP產品,如果你要開發的項目和某個PHP產品的功能達到80%以上的契合,那麼應該考慮基於該產品進行開發。
一些網站提供簡單的博客,留言板等的源碼,不基於框架的小項目實際上只能稱為練習,只有參考價值。
註:不是說不使用框架的項目就不算項目,事實上如果一個項目如果沒有使用某某框架,其項目的一部分代碼也必然的會具有框架的特徵,即自定義框架也是框架。