目 錄 Contents
本書贊譽
譯者序
前言
作者簡介
第一篇 使用PHP
第1章 PHP快速入門教程2
1.1 開始之前:瞭解PHP3
1.2 創建示例Web應用:Bob汽車零部件商店3
1.2.1 創建訂單錶單3
1.2.2 錶單處理 5
1.3 在HTML中嵌入PHP5
1.3.1 PHP標記6
1.3.2 PHP語句7
1.3.3 空格7
1.3.4 注釋 8
1.4 添加動態內容8
1.4.1 調用函數9
1.4.2 使用date()函數 9
1.5 訪問錶單變量10
1.5.1 錶單變量 10
1.5.2 字符串連接12
1.5.3 變量和字麵量12
1.6 理解標識符 13
1.7 檢查變量類型 14
1.7.1 PHP的數據類型 14
1.7.2 類型強度 14
1.7.3 類型轉換 15
1.7.4 可變變量 15
1.8 聲明和使用常量 16
1.9 理解變量作用域 16
1.10 使用操作符 17
1.10.1 算術操作符 18
1.10.2 字符串操作符18
1.10.3 賦值操作符 19
1.10.4 比較操作符 21
1.10.5 邏輯操作符 22
1.10.6 位操作符 22
1.10.7 其他操作符 23
1.11 計算錶單總金額 25
1.12 理解操作符優先級和結閤性 26
1.13 使用變量處理函數27
1.13.1 測試和設置變量類型 27
1.13.2 測試變量狀態 28
1.13.3 變量的重解釋 29
1.14 根據條件進行決策 29
1.14.1 if語句 29
1.14.2 代碼塊 30
1.14.3 else語句 30
1.14.4 elseif語句 31
1.14.5 switch語句 32
1.14.6 比較不同條件 33
1.15 通過迭代實現重復動作 34
1.15.1 while循環 35
1.15.2 for循環和foreach循環 36
1.15.3 do...while循環 37
1.16 從控製結構或腳本中跳齣 38
1.17 使用其他控製結構語法 38
1.18 使用declare 39
1.19 下一章 39
第2章 數據存儲和讀取40
2.1 保存數據以便後期使用 40
2.2 存儲和獲取Bob的訂單 41
2.3 文件處理 41
2.4 打開文件 42
2.4.1 選擇文件模式 42
2.4.2 使用fopen()打開文件 42
2.4.3 通過FTP或HTTP打開文件 44
2.4.4 解決打開文件時可能遇到的問題 45
2.5 寫文件 47
2.5.1 fwrite()的參數 47
2.5.2 文件格式 47
2.6 關閉文件 48
2.7 讀文件 50
2.7.1 以隻讀模式打開文件:fopen()51
2.7.2 知道何時讀完文件:feof()51
2.7.3 每次讀取一行數據:fgets()、fgetss()和fgetcsv() 52
2.7.4 讀取整個文件:readfile()、fpassthru()、file()以及file_get_contents()53
2.7.5 讀取一個字符:fgetc() 53
2.7.6 讀取任意長度:fread()54
2.8 使用其他文件函數 54
2.8.1 查看文件是否存在:file_exists() 54
2.8.2 確定文件大小:filesize() 55
2.8.3 刪除一個文件:unlink()55
2.8.4 在文件中定位:rewind()、fseek()和ftell() 55
2.9 文件鎖定 56
2.10 更好的方式:數據庫管理係統 57
2.10.1 使用普通文件的幾個問題 58
2.10.2 RDBMS是如何解決這些問題的 58
2.11 進一步學習 59
2.12 下一章 59
第3章 使用數組60
3.1 什麼是數組 60
3.2 數字索引數組 61
3.2.1 數字索引數組的初始化 61
3.2.2 訪問數組內容 62
3.2.3 使用循環訪問數組 63
3.3 使用不同索引的數組 64
3.3.1 初始化數組 64
3.3.2 訪問數組元素 64
3.3.3 使用循環語句 64
3.4 數組操作符 66
3.5 多維數組 66
3.6 數組排序 69
3.6.1 使用sort()函數 69
3.6.2 使用asort()函數和ksort()函數對數組排序 70
3.6.3 反嚮排序 70
3.7 多維數組排序 70
3.7.1 使用array_multisort()函數71
3.7.2 用戶定義排序 71
3.7.3 自定義排序函數的反序 73
3.8 對數組進行重新排序 73
3.8.1 使用shuffle()函數 73
3.8.2 逆序數組內容75
3.9 從文件載入數組 75
3.10 執行其他數組操作 79
3.10.1 在數組中瀏覽:each()、current()、reset()、end()、next()、pos()和prev()79
3.10.2 對數組每一個元素應用函數:array_walk() 80
3.10.3 統計數組元素個數:count()、sizeof()和array_count_values() 81
3.10.4 將數組轉換成標量變量:extract() 81
3.11 進一步學習 83
3.12 下一章 83
第4章 字符串操作與正則錶達式84
4.1 創建一個示例應用:智能錶單郵件 84
4.2 字符串的格式化86
4.2.1 字符串截斷:chop()、ltrim()和trim() 87
4.2.2 格式化字符串以便輸齣 87
4.3 使用字符串函數連接和分割字符串93
4.3.1 使用函數explode()、implode()和join() 93
4.3.2 使用strtok()函數 94
4.3.3 使用substr()函數 95
4.4 字符串比較 96
4.4.1 字符串的排序:strcmp()、strcasecmp()和strnatcmp() 96
4.4.2 使用strlen()函數判斷字符串長度 96
4.5 使用字符串函數匹配和替換子字符串 97
4.5.1 在字符串中查找字符串:strstr()、strchr()、strrchr()和stristr() 97
4.5.2 查找子字符串的位置:strpos()和strrpos() 98
4.5.3 替換子字符串:str_replace()和substr_replace() 99
4.6 正則錶達式的介紹 100
4.6.1 基礎知識 100
4.6.2 分隔符101
4.6.3 字符類和類型 101
4.6.4 重復 102
4.6.5 子錶達式 102
4.6.6 子錶達式計數 103
4.6.7 定位到字符串的開始或末尾 103
4.6.8 分支103
4.6.9 匹配特殊字符 103
4.6.10 元字符一覽 104
4.6.11 轉義序列104
4.6.12 迴溯引用105
4.6.13 斷言105
4.6.14 在智能錶單中應用 106
4.7 用正則錶達式查找子字符串 107
4.8 用正則錶達式替換子字符串 107
4.9 使用正則錶達式分割字符串 108
4.10 進一步學習 109
4.11 下一章 109
第5章 代碼重用與函數編寫110
5.1 代碼重用的好處 110
5.1.1 成本111
5.1.2 可靠性 111
5.1.3 一緻性 111
5.2 使用require()和include()函數 111
5.2.1 使用require()函數引入代碼112
5.2.2 使用require()製作Web站點模闆113
5.2.3 使用auto_prepend_file和 auto_append_file 118
5.3 使用PHP函數 119
5.3.1 調用函數 119
5.3.2 調用未定義函數 120
5.3.3 理解大小寫和函數名稱121
5.4 自定義函數121
5.5 瞭解函數基本結構 122
5.6 參數使用 123
5.7 理解作用域126
5.8 引用傳遞和值傳遞128
5.9 使用return關鍵字 129
5.10 遞歸實現 131
5.11 進一步學習 134
5.12 下一章 134
第6章 麵嚮對象特性135
6.1 理解麵嚮對象概念 135
6.1.1 類和對象 136
6.1.2 多態性 137
6.1.3 繼承 137
6.2 在PHP中創建類、屬性和操作 138
6.2.1 類結構 138
6.2.2 構造函數 138
6.2.3 析構函數139
6.3 類的實例化139
6.4 使用類屬性 140
6.5 調用類操作141
6.6 使用private和public關鍵字控製訪問 141
6.7 編寫訪問器函數142
6.8 在PHP中實現繼承 143
6.8.1 通過繼承使用private和protected控製可見性 144
6.8.2 覆蓋145
6.8.3 使用final關鍵字禁止繼承和覆蓋 147
6.8.4 理解多重繼承 147
6.8.5 實現接口 148
6.9 使用Trait149
6.10 類設計 151
6.11 編寫自定義類代碼 151
6.12 理解PHP麵嚮對象高級功能 158
6.12.1 使用類級彆常量 159
6.12.2 實現靜態方法 159
6.12.3 檢查類類型和類型提示 159
6.12.4 延遲靜態綁定160
6.12.5 對象剋隆 161
6.12.6 使用抽象類 161
6.12.7 使用__call()重載方法 162
6.12.8 使用__autoload()方法 163
6.12.9 實現迭代器和迭代 163
6.12.10 生成器165
6.12.11 將類轉換成字符串 166
6.12.12 使用反射API 166
6.12.13 名稱空間168
6.12.14 使用子名稱空間169
6.12.15 理解全局名稱空間169
6.12.16 名稱空間的導入和彆名170
6.13 下一章 170
第7章 錯誤和異常處理 171
7.1 異常處理的概念 171
7.2 Exception類173
7.3 用戶自定義異常 174
7.4 Bob汽車零部件商店應用的異常 176
7.5 異常和PHP的其他錯誤處理機製 179
7.6 進一步學習 180
7.7 下一章 180
第二篇 使用MySQL
第8章 Web數據庫設計182
8.1 關係型數據庫的概念 183
8.1.1 錶183
8.1.2 列183
8.1.3 行183
8.1.4 值184
8.1.5 鍵184
8.1.6 模式185
8.1.7 關係185
8.2 設計Web數據庫185
8.2.1 考慮真實建模對象186
8.2.2 避免保存冗餘數據187
8.2.3 使用原子列值188
8.2.4 選擇有意義的鍵188
8.2.5 思考需要從數據庫獲得的數據189
8.2.6 避免多個空屬性的設計189
8.2.7 錶類型總結190
8.3 Web數據庫架構190
8.4 進一步學習191
8.5 下一章191
第9章 Web數據庫創建192
9.1 使用MySQL監視程序193
9.2 登錄MySQL194
9.3 創建數據庫和用戶195
9.4 設置用戶與權限195
9.5 MySQL權限係統介紹196
9.5.1 最少權限原則196
9.5.2 創建用戶和設置權限:CREATEUSER和GRANT命令196
9.5.3 權限的類型和級彆198
9.5.4 REVOKE命令200
9.5.5 使用GRANT和REVOKE示例200
9.6 設置Web用戶201
9.7 使用正確的數據庫202
9.8 創建數據庫錶202
9.8.1 理解其他關鍵字204
9.8.2 理解列類型205
9.8.3 使用SHOW和DESCRIBE來查看數據庫207
9.8.4 創建索引207
9.9 理解MySQL標識符208
9.10 選擇列數據類型209
9.10.1 數字類型210
9.10.2 日期和時間類型211
9.10.3 字符串類型212
9.11 進一步學習213
9.12 下一章213
第10章 使用MySQL數據庫214
10.1 什麼是SQL214
10.2 在數據庫中插入數據215
10.3 從數據庫讀取數據217
10.3.1 讀取滿足特定條件的數據218
10.3.2 多錶數據讀取220
10.3.3 以特定順序讀取數據224
10.3.4 數據分組和聚閤225
10.3.5 選擇要返迴的數據行227
10.3.6 使用子查詢227
10.4 更新數據庫記錄229
10.5 創建後修改錶230
10.6 刪除數據庫記錄232
10.7 刪除錶233
10.8 刪除數據庫233
10.9 進一步學習233
10.10 下一章233
第11章 使用PHP從Web訪問MySQL數據庫234
11.1 Web數據庫架構及工作原理234
11.2 從Web查詢數據庫238
11.2.1 檢查並過濾輸入數據238
11.2.2 設置連接239
11.2.3 選擇要使用的數據庫240
11.2.4 查詢數據庫240
11.2.5 使用prepared statement241
11.2.6 讀取查詢結果242
11.2.7 斷開數據庫連接243
11.3 嚮數據庫寫入數據243
11.4 使用其他PHP與數據庫交互接口247
11.5 進一步學習250
11.6 下一章250
第12章 MySQL高級管理251
12.1 深入理解權限係統251
12.1.1 user錶253
12.1.2 db錶254
12.1.3 tables_priv、columns_priv、procs_priv以及proxies_priv錶254
12.1.4 訪問控製:MySQL如何使用Grant錶256
12.1.5 更新權限:更新結果何時生效256
12.2 提升MySQL數據庫安全257
12.2.1 從操作係統視角看MySQL257
12.2.2 密碼257
12.2.3 用戶權限258
12.2.4 Web問題258
12.3 獲取數據庫的更多信息259
12.3.1 使用SHOW獲取信息259
12.3.2 使用DESCRIBE獲取列信息261
12.3.3 使用EXPLAIN瞭解查詢的執行過程261
12.4 優化數據庫265
12.4.1 設計優化265
12.4.2 權限265
12.4.3 錶優化265
12.4.4 使用索引266
12.4.5 使用默認值266
12.4.6 其他技巧266
12.5 MySQL數據庫備份266
12.6 MySQL數據庫恢復267
12.7 實現復製267
12.7.1 設置主服務器268
12.7.2 執行初始數據傳輸268
12.7.3 設置從服務器269
12.8 進一步學習269
12.9 下一章269
第13章 MySQL高級編程270
13.1 LOAD DATA INFILE語句270
13.2 存儲引擎271
13.3 事務272
13.3.1 理解事務定義272
13.3.2 使用InnoDB 事務272
13.4 外鍵273
13.5 存儲過程274
13.5.1 基礎示例274
13.5.2 本地變量277
13.5.3 遊標和控製結構278
13.6 觸發器281
13.7 進一步學習283
13.8 下一章283
第三篇 Web應用安全性
第14章 Web應用安全風險286
14.1 識彆麵臨的安全威脅286
14.1.1 訪問敏感數據286
14.1.2 數據篡改288
14.1.3 數據丟失或破壞289
14.1.4 拒絕服務289
14.1.5 惡意代碼注入291
14.1.6 被攻破服務器291
14.1.7 否認292
14.2 瞭解對手292
14.2.1 攻擊者和破解者292
14.2.2 受影響機器的無意識用戶293
14.2.3 不滿的員工293
14.2.4 硬件竊賊293
14.2.5 我們自己293
14.3 下一章293
第15章 構建安全的Web應用294
15.1 安全策略294
15.1.1 從正確心態開始295
15.1.2 安全性和可用性之間的平衡295
15.1.3 安全監控295
15.1.4 基本方法296
15.2 代碼安全296
15.2.1 過濾用戶輸入296
15.2.2 轉義輸齣300
15.2.3 代碼組織結構302
15.2.4 代碼自身問題303
15.2.5 文件係統因素303
15.2.6 代碼穩定性和缺陷304
15.2.7 執行命令305
15.3 Web服務器和PHP的安全306
15.3.1 保持軟件更新306
15.3.2 查看php.ini文件307
15.3.3 Web服務器配置307
15.3.4 Web應用共享主機托管服務308
15.4 數據庫服務器的安全308
15.4.1 用戶和權限係統308
15.4.2 發送數據至服務器309
15.4.3 連接服務器309
15.4.4 運行服務器310
15.5 保護網絡310
15.5.1 防火牆310
15.5.2 使用隔離區311
15.5.3 應對DoS和DDoS攻擊311
15.6 計算機和操作係統的安全312
15.6.1 保持操作係統更新312
15.6.2 隻運行必需的軟件312
15.6.3 服務器的物理安全312
15.7 災難計劃313
15.8 下一章313
第16章 使用PHP實現身份驗證方法314
16.1 識彆訪問者314
16.2 實現訪問控製315
16.2.1 保存密碼317
16.2.2 加密密碼318
16.2.3 保護多頁麵319
16.3 使用基本認證320
16.4 在PHP中使用基本認證320
16.5 使用Apache的.htaccess基本認證321
16.6 創建自定義認證324
16.7 進一步學習325
16.8 下一章325
第四篇 PHP高級編程技術
第17章 與文件係統和服務器交互328
17.1 上傳文件328
17.1.1 文件上傳的HTML329
17.1.2 編寫處理文件的PHP腳本330
17.1.3 會話上傳進度334
17.1.4 避免常見上傳問題335
17.2 使用目錄函數336
17.2.1 從目錄讀入336
17.2.2 獲取當前目錄信息340
17.2.3 創建和刪除目錄340
17.3 與文件係統交互341
17.3.1 獲取文件信息341
17.3.2 修改文件屬性343
17.3.3 創建、刪除和移動文件344
17.4 使用程序執行函數344
17.5 與環境交互:getenv()和putenv()347
17.6 進一步學習347
17.7 下一章347
第18章 使用網絡和協議函數348
18.1 瞭解可用協議348
18.2 發送和讀取郵件349
18.3 使用其他站點數據349
18.4 使用網絡查詢函數352
18.5 備份或鏡像文件355
18.5.1 使用FTP備份或鏡像文件356
18.5.2 上傳文件362
18.5.3 避免超時362
18.5.4 使用其他FTP函數362
18.6 進一步學習363
18.7 下一章363
第19章 管理日期和時間364
19.1 在PHP中獲得日期和時間364
19.1.1 理解時區364
19.1.2 使用date()函數365
19.1.3 處理UNIX時間戳366
19.1.4 使用getdate()函數368
19.1.5 使用checkdate()函數驗證日期369
19.1.6 格式化時間戳369
19.2 PHP和MySQL的日期格式互轉371
19.3 在PHP中計算日期372
19.4 在MySQL中計算日期373
19.5 使用微秒374
19.6 使用日曆函數375
19.7 進一步學習375
19.8 下一章376
第20章 國際化與本地化377
20.1 本地化不隻是翻譯377
20.2 理解字符集378
20.2.1 字符集的安全風險379
20.2.2 使用PHP多字節字符串函數379
20.3 創建可本地化頁麵基礎結構380
20.4 在國際化應用中使用gettext()函數383
20.4.1 配置係統使用gettext()383
20.4.2 創建翻譯文件384
20.4.3 使用gettext()在PHP中實現本地化內容385
20.5 進一步學習386
20.6 下一章386
第21章 生成圖像387
21.1 設置PHP圖像支持387
21.2 理解圖像格式388
21.2.1 JPEG388
21.2.2 PNG388
21.2.3 GIF389
21.3 創建圖像389
21.3.1 創建畫布圖像390
21.3.2 在圖像上繪製或打印文本390
21.3.3 最終圖形輸齣392
21.3.4 清理393
21.4 在其他頁麵中使用自動創建的圖像393
21.5 使用文本和字體創建圖像394
21.5.1 設置基礎畫布397
21.5.2 調整按鈕文本大小398
21.5.3 文本定位400
21.5.4 在按鈕上寫入文本401
21.5.5 完成401
21.6 繪製圖形圖像數據401
21.7 使用其他圖像函數409
21.8 下一章409
第22章 使用PHP會話控製410
22.1 什麼是會話控製410
22.2 理解基本會話功能410
22.2.1 什麼是cookie411
22.2.2 通過PHP設置cookie411
22.2.3 在會話中使用cookie412
22.2.4 保存會話ID412
22.3 實現簡單會話412
22.3.1 啓動會話413
22.3.2 注冊會話變量413
22.3.3 使用會話變量413
22.3.4 銷毀變量和會話414
22.4 創建簡單會話示例414
22.5 配置會話控製416
22.6 使用會話控製實現身份驗證417
22.7 下一章423
第23章 JavaScript與PHP集成424
23.1理解AJAX424
23.2 jQuery概述425
23.3 在Web應用中使用jQuery425
23.4 在PHP中使用jQuery和AJAX434
23.4.1 支持AJAX的聊天腳本/服務器434
23.4.2 jQuery AJAX方法437
23.4.3 聊天客戶端/jQuery應用439
23.5 進一步學習445
23.6 下一章445
第24章 PHP的其他有用特性446
24.1 字符串計算函數:eval()446
24.2 終止執行:die()和exit()447
24.3 序列化變量和對象448
24.4 獲取PHP環境信息448
24.4.1 找到已載入的擴展449
24.4.2 識彆腳本屬主450
24.4.3 獲知腳本被修改時間450
24.5 臨時修改運行時環境450
24.6 高亮源代碼451
24.7 在命令行上使用PHP452
24.8 下一章453
第五篇 構建實用的PHP和MySQL項目
第25章 在大型項目中使用PHP和MySQL456
25.1 在Web開發中應用軟件工程技術457
25.2 規劃和運營Web應用項目457
25.3 代碼重用458
25.4 編寫可維護代碼458
25.4.1 代碼標準459
25.4.2 代碼分解461
25.4.3 使用標準目錄結構462
25.4.4 文檔化和共享內部函數462
25.5 實現版本控製462
25.6 選擇開發環境463
25.7 項目文檔化463
25.8 原型定義464
25.9 隔離邏輯和內容464
25.10 代碼優化465
25.11 測試466
25.12 進一步學習466
25.13 下一章467
第26章 調試和日誌468
26.1 編程錯誤468
26.1.1 語法錯誤468
26.1.2 運行時錯誤469
26.1.3 邏輯錯誤474
26.2 變量調試輔助475
26.3 錯誤報告級彆477
26.4 修改錯誤報告設置478
26.5 觸發自定義錯誤479
26.6 錯誤日誌記錄480
26.7 錯誤日誌文件482
26.8 下一章483
第27章 構建用戶身份驗證和個性化484
27.1 解決方案組件484
27.1.1 用戶識彆和個性化485
27.1.2 保存書簽485
27.1.3 推薦書簽485
27.2 解決方案概述486
27.3 實現數據庫487
27.4 實現基本網站488
27.5 實現用戶身份驗證491
27.5.1 用戶注冊491
27.5.2 登錄496
27.5.3 退齣500
27.5.4 修改密碼501
27.5.5 重設密碼502
27.6 實現書簽存儲和讀取507
27.6.1 添加書簽507
27.6.2 顯示書簽509
27.6.3 刪除書簽510
27.7 實現書簽推薦513
27.8 考慮可能的擴展516
第28章 使用Laravel構建基於Web的電子郵件客戶端(第一部分)517
28.1 Laravel 5介紹517
28.1.1 創建Laravel新項目517
28.1.2 Laravel應用結構518
28.1.3 Laravel請求周期與MVC模式519
28.1.4 理解Laravel模型、視圖和控製器類520
第29章 使用Laravel構建基於Web的電子郵件客戶端(第二部分) 536
29.1 使用Laravel構建簡單的IMAP客戶端536
29.1.1 PHP IMAP函數536
29.1.2 為Laravel應用封裝IMAP544
29.2 創建基於Web的電子郵件客戶端561
29.2.1 實現ImapServiceProvider562
29.2.2 Web客戶端認證頁麵563
29.2.3 實現主視圖567
29.2.4 實現刪除和發送郵件576
29.3 小結581
第30章 社交媒體集成分享以及驗證582
30.1 OAuth:Web服務認證582
30.1.1 認證碼授權583
30.1.2 隱式授權584
30.1.3 創建Instagram Web客戶端585
30.1.4 Instagram的點贊照片功能593
30.2 小結594
第31章 構建購物車595
31.1 解決方案組件595
31.1.1 構建在綫類目596
31.1.2 記錄用戶希望購買的商品596
31.1.3 實現支付係統596
31.1.4 構建管理界麵597
31.2 解決方案概述597
31.3 實現數據庫599
31.4 實現在綫類目601
31.4.1 類目列錶603
31.4.2 類目圖書清單605
31.4.3 顯示圖書詳情607
31.5 實現購物車608
31.5.1 使用show_cart.php腳本609
31.5.2 查看購物車612
31.5.3 嚮購物車中添加商品614
31.5.4 保存更新的購物車615
31.5.5 打印標題欄總結信息616
31.5.6 結賬617
31.6 實現支付622
31.7 實現管理界麵624
31.8 擴展項目631
附錄A 安裝Apache、PHP和MySQL632
· · · · · · (
收起)