單一入口概述
單一入口的應用程式就是說用乙個檔案處理所有的http請求,例如不管是列表頁還是文章頁,都是從瀏覽器訪問index.php檔案,這個檔案就是這個應用程式的單一入口。
打個比方,大家都要上wc,都是男生進乙個門,女生進乙個門,這兩個門就是wc的兩個入口。而現在去乙個公園裡面的wc,外面還有乙個門,不管男女都從最外面的門進入,交了錢以後才進入裡面的男廁所門或女廁所門,而這個最外面的門就是這個wc的單一入口。
實現方式
很簡單,可以在訪問index.php時限上乙個特定的引數。例如index.php?action=list就是訪問列表頁,而index.php?action=single則訪問文章頁。
實現**:
$action=$_get['action']==''?'index':$_get['action'];//從url中取出action引數,如果沒有提供action引數,就設定乙個預設的'index'作為引數
include('files/'.$action.'.php');//根據$action引數呼叫不同的**檔案,從而滿足單一入口實現對應的不同的功能。
單一入口應用程式的優勢
單一入口應用程式的所有http請求都是通過index.php接收並**到功能**去的,所以在index.php裡面就能完成許多實際工作。
由於所有的http請求都由index.php接收,所以可以進行集中的安全性檢查,如果不是單一入口,那麼開發者就必須記得在每乙個檔案的開始加上安全性檢查**
(當然,安全性檢查可以寫到另乙個檔案中,只需要include就可以了。)
與安全性檢查類似。在入口裡,我們還可以對url引數和post進行必要的檢查和特殊字元過濾、記錄日誌、訪問統計等等各種可以集中處理的任務。
這樣就可以看出,由於這些工作都被集中到了index.php來完成,可以減輕我們維護其他功能**的難度。
單一入口應用程式的缺點
任何事情都有兩面性,單一入口應用程式也不例外。由於所有http請求都是針對index.php,所以程式的url看起來確實不那麼美觀,特別是對搜尋引擎來說很不友好。
要解決這個問題,可以採用url重寫、pathinfo等方式,但也可以在前台頁面不使用單一入口方式,而是保持多個檔案入口。或者兩者混用。
對於單入口(訪問**必需首先通過某一檔案,一般都是index.php來實現其它功能的專案)程式來說:
常見的url大都為:
說實話這樣的url很難看,最重要的是搜尋引擎不認它為正常的url,這很可怕。如何實現乙個好看的且與搜尋引擎能攀上親的url呢。
看這個url:
很新奇的url創意,這也是cakephp框架的過程中體驗出來的偽靜態,此url相對於彼url來說:易記,美觀,最主要的是搜尋引擎雖不認它為老爸,起碼不會把它劃為黑名單。
解釋一下上面的url,"posts":一般稱其為controller(控制器),由它來決定載入哪個處理檔案;"index":一般稱其為 action(操作),由它來決定要進行什麼操作。所以/posts/index/顧名思義就是posts的主頁了。如果後面需要傳遞引數可以直接加在 action後面。
如下面這個url:列出posts的分類id為1下的所有內容。
php中的一些框架,zend framework,thinkphp,fleaphp,qeephp,還有cakephp 等都是單入口模式,它們都採用了統一的入口,可以根據不同的需要,分前台入口後台入口或者其他操作許可權入口,這樣的設計模式優點很明顯,比如。許可權控制,url重寫,結 合mvc清晰地目錄結構。這些都是單入口模式所帶來的便利,當然這樣的也會帶來執行效率的疑問。
PHP 單一入口的特有作用
在說單一入口之前,先說說多入口。discuz phpcms 2008,dedecms 都是採用多入口的結構。多入口,即通過訪問不同的 php 檔案執行對應的功能。如 index.php 首頁 show.php?id 1 內容頁 list.php?page 2 列表頁 login.php 使用者登入頁...
轉php單一入口框架設計
說到php單入口模式,很快想到關於php的一些框架,zend,thinkphp,qeephp,還有cakephp 等,它們都採用了統一的入口,可以根據不同的需要,分前台入口後台入口或者其他操作許可權入口,這樣的設計模式優點很明顯,比如。許可權控制,url重寫,結 合mvc清晰地目錄結構。這些都是單入...
php函式偽靜態 MVC單一入口與檔案上傳安全漏洞
php中有乙個讓人不解的特性,那就是,如果檔名中有 php 則會自動呼叫php引擎,當成php指令碼處理。php的函式偽靜態也是這樣做出來的。以下是函式偽靜態所用的函式 function makeurl arr tmpurl implode url return tmpurl.htm functio...