php 特有,PHP单一入口的特有作用
在說單一入口之前,先說說多入口。Discuz!, PHPCMS 2008, DedeCMS 都是采用多入口的結構。
多入口,即通過訪問不同的 php 文件運行對應的功能。如:
/index.php - 網站首頁
/show.php?id=1 - 內容頁
/list.php?page=2 - 列表頁
/login.php - 用戶登錄頁
……
多入口都是通過包含頭文件統一運行環境,即初始化系統。如:
/include/common.inc.php - 頭文件,PHP 文件 include 它后便完成了初始化工作,例如可以使用系統的基礎函數。
php /index.php
include './include/common.inc.php' // 包含頭文件,基本是每個入口 php 文件的首行代碼。
……
?>
拿 PHPCMS 2008 的頭文件來舉例, PHPCMS 2008 在頭文件中完成了基礎函數的加載,常量的定義,系統配置的載入,POST,GET 數據的過濾,數據庫類的實例化,保持用戶登錄等等等等一系列操作。
反正就是個 php 文件嘛,想做什么直接往里加就是了。
所以,所謂的安全檢查,統一檢查,權限控制等,用頭文件同樣可以實現,所謂“單一入口”只不過是換了一種形式,并無實質性的變化。
以前我就是這樣認為的。
現在,假設用 CMS 為客戶建一個站( CMS 是多入口的):建欄目,配網站,卡拉卡拉一段忙碌后,網站可以上線了,放在這個地址下:
localhost/gz/
沒錯,這次建的是 gz 這個地區的地區站,客戶認為網站做得不錯,希望做多一個 bj 地區的地區站。 bj 站的欄目結構,內容,功能模塊等都與 gz 站有所不同。
好,現在問題來了,上面提到的三個多入口的系統,都設計成一套程序一個環境,即一套程序只對應一個數據庫。對于上面的需求( bj 站),除非修改整套程序的結構(這是不切實際的),否則就只能復制多一份源代碼,指向另一個數據庫。
于是,我便復制多一份源代碼,指向 bj 數據庫( gz 站則指向 gz 數據庫),建欄目,配網站,卡拉卡拉一優忙碌后,網站又可以上線了,放在這個地址下:
localhost/bj/
所以,現在有兩套一樣的程序在運行。
然后,客戶想改一改 gz 站的功能,于是我修改了 gz 的代碼。然后,客戶想改一改 bj 站的功能,于是我修改了 bj 的代碼。然后,客戶想在 bj 站上做與 gz 同樣的修改,于是我得把 gz 的修改復制到 bj 中,然后……
于是,我不得不維護兩份實際上是“一樣”的代碼。
假如網站運營得不錯,客戶又建了若干個地區站,我維護的便是若干份“一樣”的代碼——這根本就是惡夢。
現在到單一入口登場了。
單一入口,就是訪問同一個文件加不同參數運行不同的功能。如:
/index.php - 單一入口,默認顯示首頁
/index.php?action=show&id=1 - 用 action 參數指明顯示內容頁
/index.php?action=list&page=2 - 顯示列表頁
/index.php?action=login - 用戶登錄頁
……
index.php 這個入口做的便是頭文件做的初始化操作(外加一些調度),包括加載網站的配置。
現在我們來假設建站用的 CMS 是單一入口的設計,在完成 gz 站后,面對同樣的需求( bj 站),我只需要在 /bj/ 目錄入多建一個入口文件,加載指向 bj 數據庫的配置,再配配數據卡拉卡拉什么的,就完事了!
于是,我只需要維護一份源代碼。
這便是單一入口特有的作用——構造環境。
使用哪個數據庫就是環境的一種,類似的還有:用內存緩存還是文件緩存,用 mysql 還是 mssql 等。
除非在設計階段特別留意,否則,頭文件的結構都會被寫成“一套程序一個環境”的結構。而采用單一入口結構,無論是否留意,都可以輕易實現“一套程序多個環境”。這才是使用單一入口的真正理由。
總結
以上是生活随笔為你收集整理的php 特有,PHP单一入口的特有作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个html有几个css,几个CSS的黑
- 下一篇: Hero