Web應(yīng)用開發(fā)技術(shù)是網(wǎng)站、App等互聯(lián)網(wǎng)產(chǎn)品開發(fā)中不可或缺的后端組成部分。本書基于以高性能著稱的PHP Phalcon框架,介紹后端開發(fā)涉及的關(guān)鍵技術(shù)。全書共分12章:第1章介紹開發(fā)部署并預(yù)覽后端項目結(jié)構(gòu);第2章介紹后端開發(fā)所需的網(wǎng)絡(luò)原理基礎(chǔ)知識;第3章介紹Phalcon框架依賴注入和事件驅(qū)動設(shè)計思想;第4~9章為后端開發(fā)核心,包含應(yīng)用入口、路由原理、MVC以及權(quán)限控制;第10~12章介紹安全、緩存和多人合作等優(yōu)化技術(shù)。每章配有習(xí)題,以便有興趣的讀者拓展思考。本書適合作為高等院校數(shù)字媒體技術(shù)、軟件、計算機(jī)相關(guān)專業(yè)的本科生進(jìn)階教材,也適合作為感興趣的開發(fā)人員的實踐參考用書。
Web應(yīng)用開發(fā)技術(shù)是實現(xiàn)網(wǎng)站、App等互聯(lián)網(wǎng)產(chǎn)品開發(fā)的后端技術(shù),提供數(shù)據(jù)請求、處理、存儲等業(yè)務(wù)。絕大多數(shù)主流的編程語言都可以用于Web應(yīng)用開發(fā),然而PHP仍然是熱門選擇之一。它的突出優(yōu)勢在于:快速入門、直觀調(diào)試、無須編譯、社區(qū)活躍、資源豐富、開發(fā)高效,可用于小型創(chuàng)業(yè)項目,亦可用于大型企業(yè)級項目。眾多優(yōu)秀的開發(fā)框架使PHP完全具備大型項目開發(fā)的需求。開發(fā)框架在提供開發(fā)便利的同時也一定程度上損失了運(yùn)行效率,雖然這種損失微乎其微,但對于高并發(fā)的項目,優(yōu)化運(yùn)行效率是重中之重。因此,尋找一個合適的框架來解決Web項目開發(fā)中的MVC分離、路由分發(fā)、權(quán)限控制、數(shù)據(jù)緩存等基礎(chǔ)問題,一直是項目組考慮的重點。衡量一個框架的優(yōu)劣,有很多因素,如性能、開發(fā)效率、架構(gòu)思想、社區(qū)文檔成熟度、團(tuán)隊成員知識組成、開源貢獻(xiàn)者質(zhì)量等。多項測評表明,Phalcon因為其C語言的底層優(yōu)勢,在性能方面一直是佼佼者。然而讓我們在多個線上項目選擇它的原因卻不是性能,而是它的架構(gòu)思想。其核心的依賴注入的服務(wù)管理思想能夠讓我們在項目的任何位置高效調(diào)用各類服務(wù),其事件驅(qū)動的插件機(jī)制提供了在框架中自由擴(kuò)展的可能,以及其繼承和發(fā)揚(yáng)了Zend Framework的代碼結(jié)構(gòu)讓我們倍感親切。
本書是在哈爾濱工業(yè)大學(xué)ComingX團(tuán)隊多位成員共同努力下完成的,由景東任主編。參與本書編寫的還有:胡明明、陳文忠、謝佳宏、羅煒杰、卓興良、郭巧馳。在本書的編寫過程中,我們深度閱讀了Phalcon的源碼,從源碼層面解釋各組件功能背后的原理,并配合流程圖將原理直觀化。我們希望本書能為讀者的開發(fā)實踐提供參考,因此著重結(jié)合以往的開發(fā)經(jīng)驗來組織內(nèi)容編寫,并配合實際代碼支撐功能講解。
書中難免謬誤,若蒙讀者諸君不吝賜教,將不勝感激。歡迎發(fā)送郵件至jingdongemail@ gmail.com。本書相關(guān)的勘誤表可通過訪問網(wǎng)址查閱:https://github.com/comingx/phalcon-book/
blob/master/corrigenda。
感謝李松林老師、王占清編輯對本書出版工作的付出。感謝我的家人在編寫過程中給我的支持,特別感謝我的五歲的阿杰給我?guī)淼臍g樂和幸福,激勵我更加努力地工作。
景東,哈爾濱工業(yè)大學(xué)媒體技術(shù)與藝術(shù)系教師,美國亞利桑那大學(xué)MIS訪問學(xué)者,主講計算機(jī)網(wǎng)絡(luò)、移動應(yīng)用開發(fā)和數(shù)據(jù)分析等課程,主持了國家社科基金、教育部人文社科基金、省社科基金項目,研究方向為社會媒體分析。在哈工大組織的可明ComingX開發(fā)團(tuán)隊,有十余年的開發(fā)經(jīng)驗,開發(fā)并運(yùn)營著許多線上創(chuàng)業(yè)項目,曾獲得谷歌頒發(fā)的2017年Android全國大學(xué)生移動互聯(lián)網(wǎng)創(chuàng)新挑戰(zhàn)賽總決賽金獎、教育部頒發(fā)的全國大學(xué)生廣告藝術(shù)大賽交互廣告組一等獎,團(tuán)隊畢業(yè)的學(xué)生主要就職于阿里、百度、騰訊等一線互聯(lián)網(wǎng)公司。
第1章 Phalcon框架起步 1
1.1 框架之談 1
1.1.1
是否需要框架 1
1.1.2
為什么選擇Phalcon 2
1.2 快速起步 3
1.2.1
Phalcon開發(fā)環(huán)境的配置 3
1.2.2
第一個Phalcon項目 6
1.3
Phalcon開發(fā)工具 14
1.4
PhpStorm配置 16
小結(jié) 16
習(xí)題 16
第2章 網(wǎng)絡(luò)通信與HTTP協(xié)議 17
2.1 計算機(jī)網(wǎng)絡(luò)體系 17
2.1.1
OSI參考模型 18
2.1.2
TCP/IP模型 19
2.1.3
TCP/IP模型的封裝與解封 21
2.2
TCP協(xié)議 23
2.2.1
TCP段格式 23
2.2.2
TCP Socket 25
2.2.3
TCP傳輸 26
2.3
HTTP協(xié)議 28
2.3.1
HTTP請求報文 28
2.3.2
HTTP響應(yīng)報文 30
2.4
Cookie與Session 31
2.5
HTTPS 32
2.5.1
HTTPS的相關(guān)概念 33
2.5.2
TLS協(xié)議的原理 34
小結(jié) 36
習(xí)題 36
第3章 理解Phalcon的設(shè)計思想 37
3.1
Phalcon框架結(jié)構(gòu) 37
3.2 依賴注入 38
3.2.1
依賴注入的原理和簡易
實現(xiàn) 38
3.2.2
Phalcon中的DI 42
3.3 事件驅(qū)動 45
3.3.1
何為事件驅(qū)動架構(gòu) 45
3.3.2
事件驅(qū)動架構(gòu)的實現(xiàn)原理 46
3.3.3
Phalcon事件驅(qū)動機(jī)制
的應(yīng)用 47
3.3.4
自定義可觸發(fā)事件的組件 50
小結(jié) 52
習(xí)題 53
第4章 應(yīng)用 54
4.1 引導(dǎo)程序Bootstrap
54
4.2
Application工作流 58
小結(jié) 60
習(xí)題 60
第5章 路由與URL 61
5.1 路由工作原理 61
5.2 定義路由 63
5.3
URL 67
小結(jié) 68
習(xí)題 68
第6章 調(diào)度器與控制器 69
6.1 循環(huán)調(diào)度 69
6.2 控制器基本用法 69
6.3 調(diào)度器插件 73
小結(jié) 75
習(xí)題 75
第7章 視圖 77
7.1 注冊視圖服務(wù) 77
7.2 視圖渲染級別 78
7.3 視圖路徑 79
7.4 控制器向視圖傳值 80
7.5 視圖中獲取服務(wù) 81
7.6 視圖工作原理 81
7.7
Volt引擎 83
小結(jié) 88
習(xí)題 89
第8章 模型 90
8.1 數(shù)據(jù)表與Model類 90
8.2
Model數(shù)據(jù)查詢 91
8.2.1
Model基本數(shù)據(jù)查詢 91
8.2.2
Model查詢參數(shù) 92
8.2.3
Model面向?qū)ο蟛樵?94
8.3
Model數(shù)據(jù)創(chuàng)建和更新 95
8.4
Model數(shù)據(jù)刪除 97
8.5 原生SQL和PHQL 97
8.5.1
使用原生SQL 97
8.5.2
使用PHQL 98
8.6
Model事務(wù)機(jī)制 99
8.6.1
自定義事務(wù) 100
8.6.2
模型的事務(wù) 100
8.7
Model關(guān)系 103
8.7.1
三大關(guān)聯(lián)關(guān)系 103
8.7.2
關(guān)聯(lián)模型數(shù)據(jù)查詢 108
8.7.3
關(guān)聯(lián)模型數(shù)據(jù)創(chuàng)建和更新 109
8.7.4
關(guān)聯(lián)模型數(shù)據(jù)刪除 109
8.8
Model事件和事件管理器 110
8.8.1
Model事件 110
8.8.2
使用自定義的事件管理器 111
8.9
Model連接多個數(shù)據(jù)庫 112
8.10
分析SQL語句的執(zhí)行時間 113
8.11
Model獲取DI容器內(nèi)的服務(wù) 114
小結(jié) 114
習(xí)題 115
第9章 訪問控制列表 116
9.1
ACL實現(xiàn)原理 116
9.2
Phalcon\ACL的基本方法 117
9.3 靜態(tài)ACL的實現(xiàn) 119
9.4 動態(tài)ACL的實現(xiàn) 123
小結(jié) 124
習(xí)題 125
第10章 網(wǎng)站安全 126
10.1
使用HTTPS 126
10.2
跨站請求偽造 128
10.2.1
攻擊原理 128
10.2.2
防御 129
10.3
XSS攻擊 129
10.3.1
XSS攻擊原理 130
10.3.2
防御 130
10.4
SQL注入 131
10.4.1
SQL注入原理 131
10.4.2
防御 132
10.5
拒絕服務(wù)攻擊 133
10.6
服務(wù)器文件權(quán)限管理 134
10.6.1
文件權(quán)限管理的目的和原理 134
10.6.2
Linux文件權(quán)限操作方法 135
10.7
資源ID保護(hù) 136
10.8
文件上傳安全 136
10.8.1
文件上傳漏洞 136
10.8.2
防御 137
小結(jié) 137
習(xí)題 138
第11章 緩存 139
11.1
緩存的場景分析 139
11.2
Phalcon緩存 139
11.2.1
Phalcon緩存簡介 139
11.2.2
Phalcon緩存的使用 141
11.2.3
Phalcon緩存操作 143
11.3
模型層緩存 145
11.4
控制層緩存 146
11.5
視圖層緩存 148
11.5.1
視圖層緩存 148
11.5.2
全站靜態(tài) 149
11.6
緩存清除 149
小結(jié) 151
習(xí)題 151
第12章 多人合作的開發(fā)架構(gòu) 152
12.1
多模塊的開發(fā)模式 152
12.1.1
如何分割模塊 152
12.1.2
Phalcon多模塊項目 153
12.1.3
Phalcon模塊之間調(diào)用 156
12.1.4
多模塊的ACL實現(xiàn) 157
12.2
多站點跨語言的開發(fā)模式 158
12.3
基于Git的代碼管理 161
12.3.1
Git的常用操作 161
12.3.2
分支的創(chuàng)建與管理 164
12.3.3
GitHub的使用 165
12.4
核心代碼保護(hù) 168
小結(jié) 169
習(xí)題 170