Web應(yīng)用開(kāi)發(fā)技術(shù)是網(wǎng)站、App等互聯(lián)網(wǎng)產(chǎn)品開(kāi)發(fā)中不可或缺的后端組成部分。本書(shū)基于以高性能著稱的PHP Phalcon框架,介紹后端開(kāi)發(fā)涉及的關(guān)鍵技術(shù)。全書(shū)共分12章:第1章介紹開(kāi)發(fā)部署并預(yù)覽后端項(xiàng)目結(jié)構(gòu);第2章介紹后端開(kāi)發(fā)所需的網(wǎng)絡(luò)原理基礎(chǔ)知識(shí);第3章介紹Phalcon框架依賴注入和事件驅(qū)動(dòng)設(shè)計(jì)思想;第4~9章為后端開(kāi)發(fā)核心,包含應(yīng)用入口、路由原理、MVC以及權(quán)限控制;第10~12章介紹安全、緩存和多人合作等優(yōu)化技術(shù)。每章配有習(xí)題,以便有興趣的讀者拓展思考。本書(shū)適合作為高等院校數(shù)字媒體技術(shù)、軟件、計(jì)算機(jī)相關(guān)專業(yè)的本科生進(jìn)階教材,也適合作為感興趣的開(kāi)發(fā)人員的實(shí)踐參考用書(shū)。
Web應(yīng)用開(kāi)發(fā)技術(shù)是實(shí)現(xiàn)網(wǎng)站、App等互聯(lián)網(wǎng)產(chǎn)品開(kāi)發(fā)的后端技術(shù),提供數(shù)據(jù)請(qǐng)求、處理、存儲(chǔ)等業(yè)務(wù)。絕大多數(shù)主流的編程語(yǔ)言都可以用于Web應(yīng)用開(kāi)發(fā),然而PHP仍然是熱門(mén)選擇之一。它的突出優(yōu)勢(shì)在于:快速入門(mén)、直觀調(diào)試、無(wú)須編譯、社區(qū)活躍、資源豐富、開(kāi)發(fā)高效,可用于小型創(chuàng)業(yè)項(xiàng)目,亦可用于大型企業(yè)級(jí)項(xiàng)目。眾多優(yōu)秀的開(kāi)發(fā)框架使PHP完全具備大型項(xiàng)目開(kāi)發(fā)的需求。開(kāi)發(fā)框架在提供開(kāi)發(fā)便利的同時(shí)也一定程度上損失了運(yùn)行效率,雖然這種損失微乎其微,但對(duì)于高并發(fā)的項(xiàng)目,優(yōu)化運(yùn)行效率是重中之重。因此,尋找一個(gè)合適的框架來(lái)解決Web項(xiàng)目開(kāi)發(fā)中的MVC分離、路由分發(fā)、權(quán)限控制、數(shù)據(jù)緩存等基礎(chǔ)問(wèn)題,一直是項(xiàng)目組考慮的重點(diǎn)。衡量一個(gè)框架的優(yōu)劣,有很多因素,如性能、開(kāi)發(fā)效率、架構(gòu)思想、社區(qū)文檔成熟度、團(tuán)隊(duì)成員知識(shí)組成、開(kāi)源貢獻(xiàn)者質(zhì)量等。多項(xiàng)測(cè)評(píng)表明,Phalcon因?yàn)槠銫語(yǔ)言的底層優(yōu)勢(shì),在性能方面一直是佼佼者。然而讓我們?cè)诙鄠(gè)線上項(xiàng)目選擇它的原因卻不是性能,而是它的架構(gòu)思想。其核心的依賴注入的服務(wù)管理思想能夠讓我們?cè)陧?xiàng)目的任何位置高效調(diào)用各類(lèi)服務(wù),其事件驅(qū)動(dòng)的插件機(jī)制提供了在框架中自由擴(kuò)展的可能,以及其繼承和發(fā)揚(yáng)了Zend Framework的代碼結(jié)構(gòu)讓我們倍感親切。
本書(shū)是在哈爾濱工業(yè)大學(xué)ComingX團(tuán)隊(duì)多位成員共同努力下完成的,由景東任主編。參與本書(shū)編寫(xiě)的還有:胡明明、陳文忠、謝佳宏、羅煒杰、卓興良、郭巧馳。在本書(shū)的編寫(xiě)過(guò)程中,我們深度閱讀了Phalcon的源碼,從源碼層面解釋各組件功能背后的原理,并配合流程圖將原理直觀化。我們希望本書(shū)能為讀者的開(kāi)發(fā)實(shí)踐提供參考,因此著重結(jié)合以往的開(kāi)發(fā)經(jīng)驗(yàn)來(lái)組織內(nèi)容編寫(xiě),并配合實(shí)際代碼支撐功能講解。
書(shū)中難免謬誤,若蒙讀者諸君不吝賜教,將不勝感激。歡迎發(fā)送郵件至jingdongemail@ gmail.com。本書(shū)相關(guān)的勘誤表可通過(guò)訪問(wèn)網(wǎng)址查閱:https://github.com/comingx/phalcon-book/
blob/master/corrigenda。
感謝李松林老師、王占清編輯對(duì)本書(shū)出版工作的付出。感謝我的家人在編寫(xiě)過(guò)程中給我的支持,特別感謝我的五歲的阿杰給我?guī)?lái)的歡樂(lè)和幸福,激勵(lì)我更加努力地工作。
景東,哈爾濱工業(yè)大學(xué)媒體技術(shù)與藝術(shù)系教師,美國(guó)亞利桑那大學(xué)MIS訪問(wèn)學(xué)者,主講計(jì)算機(jī)網(wǎng)絡(luò)、移動(dòng)應(yīng)用開(kāi)發(fā)和數(shù)據(jù)分析等課程,主持了國(guó)家社科基金、教育部人文社科基金、省社科基金項(xiàng)目,研究方向?yàn)樯鐣?huì)媒體分析。在哈工大組織的可明ComingX開(kāi)發(fā)團(tuán)隊(duì),有十余年的開(kāi)發(fā)經(jīng)驗(yàn),開(kāi)發(fā)并運(yùn)營(yíng)著許多線上創(chuàng)業(yè)項(xiàng)目,曾獲得谷歌頒發(fā)的2017年Android全國(guó)大學(xué)生移動(dòng)互聯(lián)網(wǎng)創(chuàng)新挑戰(zhàn)賽總決賽金獎(jiǎng)、教育部頒發(fā)的全國(guó)大學(xué)生廣告藝術(shù)大賽交互廣告組一等獎(jiǎng),團(tuán)隊(duì)畢業(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開(kāi)發(fā)環(huán)境的配置 3
1.2.2
第一個(gè)Phalcon項(xiàng)目 6
1.3
Phalcon開(kāi)發(fā)工具 14
1.4
PhpStorm配置 16
小結(jié) 16
習(xí)題 16
第2章 網(wǎng)絡(luò)通信與HTTP協(xié)議 17
2.1 計(jì)算機(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請(qǐng)求報(bào)文 28
2.3.2
HTTP響應(yīng)報(bào)文 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è)計(jì)思想 37
3.1
Phalcon框架結(jié)構(gòu) 37
3.2 依賴注入 38
3.2.1
依賴注入的原理和簡(jiǎn)易
實(shí)現(xiàn) 38
3.2.2
Phalcon中的DI 42
3.3 事件驅(qū)動(dòng) 45
3.3.1
何為事件驅(qū)動(dòng)架構(gòu) 45
3.3.2
事件驅(qū)動(dòng)架構(gòu)的實(shí)現(xiàn)原理 46
3.3.3
Phalcon事件驅(qū)動(dòng)機(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 注冊(cè)視圖服務(wù) 77
7.2 視圖渲染級(jí)別 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類(lèi) 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連接多個(gè)數(shù)據(jù)庫(kù) 112
8.10
分析SQL語(yǔ)句的執(zhí)行時(shí)間 113
8.11
Model獲取DI容器內(nèi)的服務(wù) 114
小結(jié) 114
習(xí)題 115
第9章 訪問(wèn)控制列表 116
9.1
ACL實(shí)現(xiàn)原理 116
9.2
Phalcon\ACL的基本方法 117
9.3 靜態(tài)ACL的實(shí)現(xiàn) 119
9.4 動(dòng)態(tài)ACL的實(shí)現(xiàn) 123
小結(jié) 124
習(xí)題 125
第10章 網(wǎng)站安全 126
10.1
使用HTTPS 126
10.2
跨站請(qǐng)求偽造 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
緩存的場(chǎng)景分析 139
11.2
Phalcon緩存 139
11.2.1
Phalcon緩存簡(jiǎn)介 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章 多人合作的開(kāi)發(fā)架構(gòu) 152
12.1
多模塊的開(kāi)發(fā)模式 152
12.1.1
如何分割模塊 152
12.1.2
Phalcon多模塊項(xiàng)目 153
12.1.3
Phalcon模塊之間調(diào)用 156
12.1.4
多模塊的ACL實(shí)現(xiàn) 157
12.2
多站點(diǎn)跨語(yǔ)言的開(kāi)發(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