1. 程式人生 > >PHP單一入口概述與優缺點分析(轉)

PHP單一入口概述與優缺點分析(轉)

inf 記錄 很難 前臺 接收 pathinfo 效率 www. str

單一入口概述

單一入口的應用程序就是說用一個文件處理所有的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大都為:http://www.nostop.org/index.php?controller=posts&action=index

說實話這樣的URL很難看,最重要的是搜索引擎不認它為正常的URL,這很可怕。如何實現一個好看的且與搜索引擎能攀上親的URL呢。
看這個URL:http://www.nostop.org/index.php/posts/index/

很新奇的URL創意,這也是CakePHP框架的過程中體驗出來的偽靜態,此URL相對於彼URL來說:易記,美觀,最主要的是搜索引擎雖不認它為老爸,起碼不會把它劃為黑名單。

解釋一下上面的URL,"posts":一般稱其為Controller(控制器),由它來決定加載哪個處理文件;"index":一般稱其為 Action(操作),由它來決定要進行什麽操作。所以/posts/index/顧名思義就是posts的主頁了。如果後面需要傳遞參數可以直接加在 Action後面。

如下面這個URL:http://www.nostop.org/index.php/posts/category/1/。列出posts的分類ID為1下的所有內容。

PHP中的一些框架,zend framework,thinkphp,fleaphp,qeephp,還有cakephp 等都是單入口模式,它們都采用了統一的入口,可以根據不同的需要,分前臺入口後臺入口或者其他操作權限入口,這樣的設計模式優點很明顯,比如。權限控制,url重寫,結 合MVC清晰地目錄結構。這些都是單入口模式所帶來的便利,當然這樣的也會帶來執行效率的疑問。

PHP單一入口概述與優缺點分析(轉)