成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

1.4.2 入口文件(1)

云計算
《Yii框架深度剖析》第1章初識PHP框架技術,本章首先介紹PHP語言發展歷史及其適合的應用領域,然后講解PHP框架技術的概念并仿照Yii框架源碼自定義一個框架,其中包括MVC框架模式、單入口模式和應用(前端控制器模式)的實現。讀者在充分了解了這部分內容后,將正式進入到Yii框架的學習。本節為大家介紹入口文件。

1.4.2 入口文件(1)

本節首先介紹系統多個請求入口設計帶來的不便,然后介紹單一請求入口設計模式實現原理。本節的學習目標是明確單一入口文件設計模式的優點,避免在以后的開發項目中出現多入口。

1.入口文件設計

系統中凡是能夠被訪問的PHP文件稱為入口文件。如果用戶的不同請求直接對應到Web服務器中的不同PHP文件,即系統是多入口設計。在剛開始學習PHP的時候,通常一個項目都會這樣做:

index.php ——網站首頁

list.php?page=5 ——內容列表頁

info.php?id=12 ——內容詳細頁

login.php ——用戶登錄頁

又或者在1.4.1節實現MVC框架模式后,訪問不同的控制器類文件,如DefaultController. php或SiteController.php。

對于這些項目來說,都有多個入口文件,隨著項目規模的不斷擴大,多入口的設計缺陷會越來越明顯,如系統目錄結構混亂,后期維護困難,容易暴露程序漏洞,不便于系統的統一管理等。為了避免多入口設計帶來的諸多問題,可以使用單一入口設計模式。單一入口設計模式就是一個文件處理所有的HTTP請求,也就是說,訪問任何控制器文件,無論是DefaultController.php、SiteController. php,還是其他控制器類文件。每一次請求都是指向服務器的同一個文件,如入口文件index.php,該文件負責URL解析,最終轉向所要訪問的頁面,如圖1-6所示。

 

PHP單一入口模式可謂是現在一種比較流行的大型Web應用開發模式。當前比較流行的一些PHP開發框架,如Zend、ThinkPHP和Yii等都是采用單一入口模式。

使用單一入口文件模式的優點如下。

更加安全。單一入口模式給用戶提供了單一的請求入口,在入口文件可以對請求進行過濾,加入安全處理代碼,而傳統的多請求入口模式需要為每個文件都加入安全處理程序塊。

模塊化程度高。開發人員只需關注自己所開發的模塊,開發人員之間不需考慮程序是否正常運行,因為這一切全部交給入口文件來協調。

便于統一管理,定制性強。系統的所有模塊都由入口文件進行統一管理,任何一個模塊可以不經模塊本身啟用或禁用。

2.入口文件中實現URL的解析

在上文中提到入口文件的URL解析,即入口文件會將原始請求轉發給相應的處理控制器,完成具體的業務處理。例如,有以下URL地址:
 

  1. http://<hostname>/  
  2. http://<hostname>/index.php  
  3. http://<hostname>/index.php?r=site 
  4. http://<hostname>/index.php?r=site/index 

自定義框架模仿Yii框架采用路徑(PATH)URL模式訪問規則。路徑URL模式采用目錄分層的思想,路徑格式簡潔,URL解析效率高,此URL格式為:http://<hostname>/appname/index.php?r= controllerID/actionID

我們希望上面所有URL被解析后都會訪問SiteController控制器的actionIndex()方法。URL解析執行流程如圖1-7所示,首先訪問入口文件,在其中分析請求URL的參數,在沒有“r”參數的情況下默認訪問SiteController的actionIndex()方法,否則依據“r”參數訪問SiteController的actionIndex()方法,即所有的訪問由URL的參數來統一解析和調度。
 

入口文件index.php中代碼實現如下。
 

  1. <?php 
  2. //默認控制器是SiteController  
  3. $defaultController="site";  
  4. //默認動作actionIndex  
  5. $defaultAction="index";  
  6. //如URL 為http://hostname/index.php?r=controllerid/actionid  
  7. //得到controllerid/actionid  
  8. if(!empty($_GET['r']))  
  9. {  
  10. $route=$_GET['r'];  
  11. //得到controllerid 賦值給成員變量  
  12. $pos=strpos($route,'/');  
  13. $defaultController=substr($route,0,$pos);  
  14. $defaultController=strtolower($defaultController);  
  15. //得到actionid 賦值給成員變量  
  16. $defaultAction=(string)substr($route,$pos+1);  
  17. }  
  18. //得到控制器類名  
  19. $className=ucfirst($defaultController).'Controller';  
  20. //獲得控制器文件路徑  
  21. $classFile="./controllers/".$className.'.php';  
  22. //最后一步操作:該類文件存在則導入,該類存在則創建對象并調用acion 方法  
  23. if(is_file($classFile))  
  24. {  
  25. if(!class_exists($className,false))  
  26. {  
  27. require($classFile);  
  28. $classnew $className();  
  29. $functionName="action".ucfirst($defaultAction);  
  30. $class->$functionName();  
  31. }  
  32. }  
  33. ?> 

由上面的程序可知,默認的控制器是SiteController,默認的執行方法是actionIndex()方法。控制器的類名首字母大寫,以“Controller”結尾,而且控制器類文件必須保存在controllers文件夾中;動作方法名必須以“action”為前綴,acitonID首字母大寫。從這段程序中也可以了解到代碼規范的重要性,因為文件名或類名等都會在程序中使用。同樣的道理,在將要學習的Yii框架開發過程中,也要遵守一定的編碼規范。例如,命名類時,使用駝峰風格,即每個單詞的首字母大寫并連在一起,中間無空格;變量名和方法名應該使它們的第一個單詞全部小寫,其余單詞首字母大寫,以使其區別于類名,如$basePath、runController();對私有類成員變量來說,推薦以下畫線作為其名字前綴,如$_actionList。

提示:

為了使PHP語言開發的框架能夠遵循共同的編碼風格,在2009年由幾個框架的開發者組成了PHP-FIG(PHP Framework Interoperability Group)小組,一直擴展到現在已經擁有20多位成員。

實現入口文件后,框架執行流程如圖1-8所示。
 

1.用戶發出了訪問URL的請求,Web服務器通過執行入口文件index.php處理此請求。

2.入口文件負責完成URL的解析,根據URL請求創建控制器并調用動作處理用戶請求。

3.控制器調用模型實例對象從數據庫中讀取數據。

4.渲染視圖。

5.視圖讀取并顯示模型的數據。

6.動作完成視圖渲染并將其返回給用戶。

3.單一入口模式服務器環境配置

實現單一入口模式之后,需要確保應用根目錄下,除入口文件外的PHP文件(所有安全敏感的PHP文件)都不允許訪問。通過實踐證明,使用Apache服務器的目錄級配置文件.htaccess文件保護目錄比使用其他方式更為有效和安全。更重要的是,使用.htaccess的方式進行設置,不需要編寫程序就可以實現,具體操作比較容易。

(1)目錄級配置文件.htaccess

.htaccess是一個純文本文件,其中存放著Apache服務器配置相關的一些指令,它類似于Apache的站點配置文件,如httpd.conf文件。.htaccess與httpd.conf配置文件不同的是,它只作用于此目錄及其所有子目錄。另外,httpd.conf是在Apache服務啟動的時候就加載的,而.htaccess只有在用戶訪問目錄時加載,其中,修改.htaccess文件不需要重啟Apache服務器。.htaccess的功能包括設置網頁密碼、設置發生錯誤時出現的文件、禁止讀取文件、重新定向文件等。

在需要針對目錄改變服務器的配置,而對服務器系統沒有root權限時,應該使用.htaccess文件。如果服務器管理員不愿意頻繁修改配置,則可以允許用戶通過.htaccess文件自己修改配置,尤其是在一臺機器上提供多個用戶站點,而又期望用戶可以自己改變配置的情況下,一般會開放部分.htaccess的功能給使用者自行設置。

注意:

.htaccess是一個完整的文件名,不是***.htaccess或其他格式。

如何允許用戶使用.htaccess文件呢?在Apache服務器的配置文件httpd.conf中,查找服務器的根目錄的配置信息:
 

  1. <Directory "e:/wamp/www/"> 
  2. ……  
  3. AllowOverride None  
  4. ……  
  5. </Directory> 

 

喜歡的朋友可以添加我們的微信賬號:

51CTO讀書頻道二維碼


51CTO讀書頻道活動討論群:365934973

責任編輯:book 來源: 人民郵電出版社
相關推薦

2017-11-23 17:26:15

Yii框架IntelYii框架深度剖析

2009-07-26 09:20:48

CentOSJDK1.4java

2022-08-02 09:56:47

入口文件代碼

2020-09-23 12:42:08

Linux

2021-02-18 22:07:08

Python項目文件

2013-12-13 10:53:48

2023-09-06 14:05:14

2013-06-04 10:11:31

Windows 8.1

2015-03-09 09:45:39

微信微信WIFI入口

2017-05-24 17:56:44

停服通知51CTO學院

2021-05-31 18:47:04

環形鏈表哈希

2021-09-28 07:12:09

Linux內核入口

2022-08-16 08:13:08

數據安全數據安全治理管理能力

2009-05-25 10:25:12

1

2016-11-09 17:19:22

1

2021-06-11 09:00:13

物聯網邊緣計算IOT

2014-06-19 09:22:08

2011-03-10 13:18:54

SQLwhere

2012-11-15 15:12:43

云服務Dropbox云存儲

2010-09-27 10:20:09

JVMLinux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美专区在线 | 欧美亚洲视频在线观看 | 日本精品一区二区三区在线观看视频 | 日韩av在线播 | 九九激情视频 | 亚洲在线观看视频 | se婷婷| www.国产一区 | 超碰国产在线 | 日韩在线视频免费观看 | 美女在线一区二区 | 国产在线精品一区二区 | 日韩欧美成人一区二区三区 | av手机免费在线观看 | 欧美日韩视频一区二区 | 99久久久无码国产精品 | 亚洲欧美日韩久久久 | 国产欧美日韩精品在线观看 | 久久久久久av | 日韩在线免费播放 | 日韩欧美中文在线 | 亚洲激精日韩激精欧美精品 | 午夜成人在线视频 | 欧美午夜影院 | 精品国产18久久久久久二百 | 欧美激情国产精品 | 亚洲国产午夜 | 日韩成人免费 | 岛国在线免费观看 | 国产一区视频在线 | 日韩伦理一区二区 | 成人在线观看免费 | 男女啪啪高潮无遮挡免费动态 | 国产精品福利网 | 夜夜艹 | 久久久久久久一区二区 | 最新av在线网址 | 中文字幕一区二区三区乱码图片 | 电影在线 | 久久久精品一区二区 | 日韩一区二区三区av |