內容簡介
本書將PHP開發與MySQL套用相結合,分別對PHP和MySQL做了深入淺出的分析,不僅介紹PHP和MySQL的一般概念,而且對PHP和MySQL的Web套用做了較全面的闡述,並包括幾個經典且實用的例子。.
本書是第4版,經過了全面的更新、重寫和擴展,包括PHP 5.3最新改進的特性(例如,更好的錯誤和異常處理),MySQL的存儲過程和存儲引擎,Ajax技術與Web 2.0以及Web套用需要注意的安全問題。
作者簡介
Laura Thomson是Mozilla公司的高級軟體工程師。之前,她是OmniTI公司和Tangled WebDesign公司的合伙人。此外,Laura曾經在RMIT大學和波士頓顧問集團工作過。她獲得了套用科學(計算機科學)的學士學位和工程學(計算機系統工程)學士學位。在她的空閒時間,她非常喜歡騎馬,討論免費軟體和開源軟體以及睡覺。.
Luke Welling是OmniTI公司的一位Web架構師,他經常在一些國際會議(例如,OSCON, ZendCon, MySQLUC,HPCon,OSDC以及LinuxTag)中就開源和Web開發的話題發表演講。在加入OmniTI公司。
目錄
讀者反饋
譯者序
前言
作者簡介
第一篇 使用PHP
第1章 PHP快速入門教程 1
1.1 開始之前:了解PHP
1.2 創建一個示例套用:Bob汽車零部件商店 2
1.2.1 創建訂單表單 2
1.2.2 表單處理 4
1.3 在HTML中嵌入PHP 4
1.3.1 使用PHP標記 5
1.3.2 PHP語句 6
1.3.3 空格 6
1.3.4 注釋 7
1.4 添加動態內容 8
1.4.1 調用函式 8
1.4.2 使用date()函式 9
1.5 訪問表單變數 9
1.5.1 簡短、中等以及長風格的表單變數 9
1.5.2 字元串的連線 11
1.5.3變數和文本 12
1.6 理解標識符 13
1.7 檢查變數類型 13
1.7.1 PHP的數據類型
1.7.2 類型強度
1.7.3 類型轉換
1.7.4可變變數
1.8 聲明和使用常量 13
1.9 理解變數的作用域 13
1.10 使用操作符 16
1.10.1 算術操作符 17
1.10.2 字元串操作符 17
1.10.3 賦值操作符 17
1.10.4 比較操作符 19
1.10.5 邏輯操作符 20
1.10.6 位操作符 21
1.10.7 其他操作符 21
1.11 計算表單總金額 23
1.12 理解操作符的優先權和結合性:
1.13 使用可變函式 25
1.13.1 測試和設定變數類型 26
1.13.2 測試變數狀態 26
1.13.3 變數的重解釋 27
1.14 根據條件進行決策 27
1.14.1 if語句 28
1.14.2 代碼塊 28
1.14.3 else語句 28
1.14.4 elseif語句 29
1.14.5 switch語句 30
1.14.6 比較不同的條件 31
1.15 通過疊代實現重複動作 32
1.15.1 while循環 33
1.15.2 for和foreach循環 34
1.15.3 do...while循環 35
1.16 從控制結構或腳本中跳出 35
1.17 使用可替換的控制結構語法 36
1.18 使用declare 36
1.19 下一章 37
第2章 數據的存儲與檢索 38
2.1 保存數據以便後期使用 38
2.2 存儲和檢索Bob的訂單 38
2.3 檔案處理 39
2.4 打開檔案 40
2.4.1 選擇檔案模式 40
2.4.2 使用fopen()打開檔案 40
2.4.3 通過FTP或HTTP打開檔案 42
2.4.4 解決打開檔案時可能遇到的問題 42
2.5 寫檔案 44
2.5.1 fwrite()的參數 44
2.5.2檔案格式45
2.6 關閉檔案 45
2.7 讀檔案 47
2.7.1 以唯讀模式打開檔案:fopen() 48
2.7.2 知道何時讀完檔案:feof() 48
2.7.3 每次讀取一行數據:fgets()、fgetss()和fgetcsv() 49
2.7.4 讀取整個檔案:readfile()、fpassthru()和file() 49
2.7.5 讀取一個字元:fgetc() 50
2.7.6 讀取任意長度:fread() 51
2.8 使用其他有用的檔案函式 51
2.8.1 查看檔案是否存在:file_exists() 51
2.8.2 確定檔案大小:filesize() 51
2.8.3 刪除一個檔案:unlink() 51
2.8.4 在檔案中定位:rewind()、fseek()和ftell() 52
2.9 檔案鎖定 52
2.10 更好的方式:資料庫管理系統53
2.10.1 使用普通檔案的幾個問題 54
2.10.2 RDBMS是如何解決這些問題的 54
2.11 進一步學習 54
2.12 下一章 55
第3章 使用數組 56
3.1 什麼是數組 56
3.2 數字索引數組 57
3.2.1 數字索引數組的初始化 57
3.2.2 訪問數組的內容 57
3.2.3 使用循環訪問數組 58
3.3 使用不同索引的數組 59
3.3.1 初始化相關數組 59
3.3.2 訪問數組元素 59
3.3.3 使用循環語句 59
3.4 數組操作符 60
3.5多維數組61
3.6 數組排序 64
3.6.1 使用sort()函式 64
3.6.2 使用asort()函式和ksort()函式對相關數組排序 64
3.6.3 反向排序 65
3.7 多維數組的排序 65
3.7.1 用戶定義排序 65
3.7.2 反向用戶排序 66
3.8 對數組進行重新排序 67
3.8.1 使用shuffle()函式 67
3.8.2 使用array_reverse()函式 68
3.9 從檔案載入數組 69
3.10 執行其他的數組操作 71
3.10.1 在數組中瀏覽:each()、current()、reset()、end()、next()、pos()和prev() 71
3.10.2 對數組的每一個元素套用任何函式:array_walk() 72
3.10.3 統計數組元素個數:count()、sizeof()和array_count_values() 73
3.10.4 將數組轉換成標量變數:extract() 73
3.11 進一步學習 75
3.12 下一章 75
第4章 字元串操作與正則表達式 76
4.1 創建一個示例應用程式:智慧型表單郵件 76
4.2 字元串的格式化 78
4.2.1 字元串的整理:chop()、ltrim()和trim() 78
4.2.2 格式化字元串以便顯示 78
4.2.3 格式化字元串以便存儲:addslashes()和stripslashes() 81
4.3 用字元串函式連線和分割字元串 82
4.3.1 使用函式explode()、implode()和join() 82
4.3.2 使用strtok()函式 83
4.3.3 使用substr()函式 83
4.4 字元串的比較 84
4.4.1 字元串的排序:strcmp()、strcasecmp()和strnatcmp() 84
4.4.2 使用strlen()函式測試字元串的長度 85
4.5 使用字元串函式匹配和替換子字元串 85
4.5.1 在字元串中查找字元串:strstr()、strchr()、strrchr()和stristr() 85
4.5.2 查找子字元串的位置:strpos()、strrpos() 86
4.5.3 替換子字元串:str_replace()、substr_replace() 87
4.6正則表達式的介紹 88
4.6.1 基礎知識 88
4.6.2 字元集和類 88
4.6.3 重複 89
4.6.4 子表達式 89
4.6.5 子表達式計數 90
4.6.6 定位到字元串的開始或末尾 90
4.6.7 分支 90
4.6.8 匹配特殊字元 90
4.6.9 特殊字元一覽 91
4.6.10 在智慧型表單中套用 91
4.7 用正則表達式查找子字元串 92
4.8使用正則表達式分割字元串 93
4.9 比較字元串函式和正則表達式函式 93
4.10 進一步學習 93
4.11 下一章 93
第5章 代碼重用與函式編寫 94
5.1 代碼重用的好處
5.1.1 成本 94
5.1.2 可靠性 94
5.1.3 一致性 95
5.2 使用require()和include()函式 95
5.2.1 檔案擴展名和require()語句 96
5.2.2 使用require()製作Web站點的模版 96
5.2.3 使用auto_prepend_file和auto_append_file 101
5.3 在PHP中使用函式 101
5.3.1 調用函式 101
5.3.2 調用未定義的函式 103
5.3.3 理解字母大小寫和函式名稱 103
5.4 理解為什麼要定義自己的函式 103
5.5 了解基本的函式結構 104
5.5.1 函式命名
5.6 使用參數 105
5.7 理解作用域 107
5.8 參數的引用傳遞和值傳遞 109
5.9 使用Return關鍵字 110
5.9.1 從函式返回一個值 111
5.10 實現遞歸 113
5.10.1名稱空間
5.11 進一步學習 114
5.12 下一章 114
第6章面向對象的PHP 115
6.1 理解面向對象的概念 115
6.1.1類和對象115
6.1.2 多態性 116
6.1.3 繼承 117
6.2 在PHP中創建類、屬性和操作 117
6.2.1 類的結構 117
6.2.2構造函式118
6.2.3析構函式118
6.3 類的實例化 118
6.4 使用類的屬性 119
6.5 使用private和public關鍵字控制訪問 121
6.6 類操作的調用 121
6.7 在PHP中實現繼承 122
6.7.1 通過繼承使用private和protected訪問修飾符控制可見性 123
6.7.2重載124
6.7.3 使用final關鍵字禁止繼承和重載 125
6.7.4 理解多重繼承 126
6.7.5 實現接口 126
6.8 類的設計 127
6.9 編寫類代碼 128
6.10 理解PHP面向對象新的高級功能 135
6.10.1 使用Per-Class常量 135
6.10.2 實現靜態方法 135
6.10.3 檢查類的類型和類型提示 136
6.10.4 克隆對象 136
6.10.5 使用抽象類 137
6.10.6 使用__call()重載方法 137
6.10.7 使用__autoload()方法 138
6.10.8 實現疊代器和疊代 138
6.10.9 將類轉換成字元串 140
6.10.10 使用Reflection(反射)API 140
6.11 下一章 141
第7章 錯誤和異常處理142
7.1異常處理的概念 142
7.2 Exception類 144
7.3 用戶自定義異常 144
7.4 Bob的汽車零部件商店應用程式的異常 146
7.5 異常和PHP的其他錯誤處理機制 150
7.6 進一步學習 150
7.7 下一章 150
第二篇 使用MySQL
第8章 設計Web資料庫 151
8.1 關係資料庫的概念 152
8.1.1表格152
8.1.2 列 152
8.1.3 行 152
8.1.4 值 152
8.1.5 鍵 152
8.1.6 模式 153
8.1.7 關係 153
8.2 如何設計Web資料庫 154
8.2.1 考慮要建模的實際對象 154
8.2.2 避免保存冗餘數據 154
8.2.3 使用原子列值 155
8.2.4 選擇有意義的鍵 156
8.2.5 考慮需要詢問資料庫的問題 156
8.2.6 避免多個空屬性的設計 156
8.2.7 表格類型的總結 157
8.3 Web資料庫架構 157
8.4 進一步學習 158
8.5 下一章 158
第9章 創建Web資料庫 159
9.1 使用MySQL監視程式 160
9.2 登錄到MySQL 160
9.3 創建資料庫和用戶 161
9.4 設定用戶與許可權 162
9.5 MySQL許可權系統的介紹 162
9.5.1 最少許可權原則 162
9.5.2 創建用戶:GRANT命令 162
9.5.3 許可權的類型和級別 163
9.5.4 REVOKE命令 165
9.5.5 使用GRANT和REVOKE的例子 165
9.6 創建一個Web用戶 166
9.7 使用正確的資料庫 166
9.8 創建資料庫表 167
9.8.1 理解其他關鍵字的意思 168
9.8.2 理解列的類型 169
9.8.3 用SHOW和DESCRIBE來查看資料庫 170
9.8.4 創建索引 171
9.9 理解MySQL的標識符 171
9.10 選擇列數據類型 172
9.10.1 數字類型 173
9.10.2 日期和時間類型 174
9.10.3 字元串類型 174
9.11 進一步學習 176
9.12 下一章 176
第10章 使用MySQL資料庫 177
10.1 SQL是什麼 177
10.2 在資料庫中插入數據 177
10.3 從資料庫中獲取數據 179
10.3.1 獲取滿足特定條件的數據 181
10.3.2 從多個表中獲取數據 182
10.3.3 以特定的順序獲取數據 186
10.3.4 分組與合計數據 186
10.3.5 選擇要返回的行 188
10.3.6 使用子查詢 188
10.4 更新資料庫記錄 190
10.5 創建後修改表 191
10.6 刪除資料庫中的記錄 193
10.7 表的刪除 193
10.8 刪除整個資料庫 193
10.9 進一步學習 194
10.10 下一章 194
第11章 使用PHP從Web訪問MySQL資料庫 195
11.1 Web資料庫架構的工作原理 195
11.2 從Web查詢資料庫的基本步驟 198
11.2.1 檢查與過濾用戶輸入數據 198
11.2.2 建立一個連線 199
11.2.3 選擇使用的資料庫 200
11.2.4 查詢資料庫 200
11.2.5 檢索查詢結果 201
11.2.6 從資料庫下線 202
11.3 將新信息放入資料庫 202
11.4 使用Prepared語句 205
11.5 使用PHP與資料庫互動的其他接口 206
11.5.1 使用常規的資料庫接口:PEAR MDB2 20611.6 進一步學習 209
11.7 下一章 209
第12章 MySQL高級管理 210
12.1 深入理解許可權系統 210
12.1.1 user表 211
12.1.2 db表和host表 212
12.1.3 tables_priv表,columns_priv表和procs_priv表 212
12.1.4訪問控制:MySQL如何使用Grant表 213
12.1.5 更新許可權:修改什麼時候生效 213
12.2 提高MySQL資料庫的安全性 214
12.2.1 從作業系統角度來保護MySQL 214
12.2.2 密碼 214
12.2.3 用戶許可權 215
12.2.4 Web問題 215
12.3 獲取更多關於資料庫的信息 216
12.3.1 使用SHOW獲取信息 216
12.3.2 使用DESCRIBE獲取關於列的信息 218
12.3.3 用EXPLAIN理解查詢操作的工作過程 218
12.4 資料庫的最佳化 221
12.4.1 設計最佳化 222
12.4.2 許可權 222
12.4.3 表的最佳化 222
12.4.4 使用索引 222
12.4.5 使用默認值 222
12.4.6 其他技巧 222
12.5 備份MySQL資料庫 222
12.6 恢復MySQL資料庫 223
12.7 實現複製 223
12.7.1 設定主伺服器 224
12.7.2 執行初始的數據傳輸 224
12.7.3 設定一個/多個從伺服器 225
12.8 進一步學習 225
12.9 下一章 225
第13章 MySQL高級編程 226
13.1 LOAD DATA INFILE語句 226
13.2存儲引擎226
13.3事務227
13.3.1 理解事務的定義 227
13.3.2 通過InnoDB使用事務 228
13.4外鍵229
13.5存儲過程230
13.5.1 基本示例 230
13.5.2局部變數232
13.5.3 游標和控制結構 233
13.6 進一步學習 236
13.7 下一章 236
第三篇 電子商務與安全性
第14章 運營一個電子商務網站 237
14.1 我們要實現什麼目標 237
14.2 考慮電子商務網站的類型 237
14.2.1 使用線上說明書公布信息 238
14.2.2 接收產品或服務的訂單 240
14.2.3 提供服務和數字產品 243
14.2.4 為產品或服務增值 243
14.2.5 減少成本 243
14.3 理解風險和威脅 244
14.3.1網路黑客244
14.3.2 不能招攬足夠的生意 245
14.3.3 計算機硬體故障 245
14.3.4 電力、通信、網路或運輸故障 245
14.3.5 廣泛的競爭 245
14.3.6軟體錯誤245
14.3.7 不斷變化的政府政策和稅收 246
14.3.8 系統容量限制 246
14.4 選擇一個策略 246
14.5 下一章 246
第15章 電子商務的安全問題 247
15.1 信息的重要程度 247
15.2 安全威脅 248
15.2.1 機密數據的泄露 248
15.2.2 數據丟失和數據破壞 249
15.2.3數據修改250
15.2.4 拒絕服務 251
15.2.5 軟體錯誤 251
15.2.6 否認 252
15.3 易用性,性能、成本和安全性 253
15.4 建立一個安全政策 253
15.5 身份驗證原則 254
15.6 加密技術基礎 255
15.6.1 私有密鑰加密 256
15.6.2公有密鑰加密 256
15.6.3數字簽名256
15.7數字證書257
15.8 安全的Web伺服器 258
15.9 審計與日誌記錄 259
15.10防火牆259
15.11 備份數據 259
15.11.1 備份常規檔案 260
15.11.2 備份與恢復MySQL資料庫 260
15.12 自然環境安全 260
15.13 下一章 261
第16章 Web套用的安全
16.1處理安全性問題的策略
16.1.1 以正確心態為開始
16.1.2 安全性和可用性之間的平衡
16.1.3 安全監視
16.1.4 基本方法
16.2 識別所面臨的威脅
16.2.1 訪問或修改敏感數據
16.2.2 數據丟失或破壞
16.2.3 拒絕服務
16.2.4 惡意代碼注入
16.2.5 伺服器被攻破
16.3了解與我們“打交道”的用戶
16.3.1 破解人員
16.3.2 受影響機器的未知情用戶
16.3.3 對公司不滿的員工
16.3.4 硬體被盜
16.3.5 我們自身
16.4 代碼的安全性
16.4.1 過濾用戶輸入
16.4.2 轉義輸出
16.4.3 代碼組織
16.4.4 代碼自身的問題
16.4.5 檔案系統因素
16.4.6 代碼穩定性和缺陷
16.4.7 執行引號和exec
16.5 Web伺服器和PHP的安全性
16.5.1 保持軟體的更新
16.5.2 查看php.ini檔案
16.5.3 Web伺服器配置
16.5.4 Web套用的商業主機服務
16.6資料庫伺服器的安全性
16.6.1 用戶和許可權系統
16.6.2傳送數據至伺服器
16.6.3 連線伺服器
16.6.4 運行伺服器
16.7 保護網路
16.7.1 安裝防火牆
16.7.2使用隔離區域(DMZ)
16.7.3應對DoS和DDoS攻擊
16.8 計算機和作業系統的安全性
16.8.1 保持作業系統的更新
16.8.2隻運行必須的軟體
16.8.3 伺服器的物理安全性
16.9 災難計畫
16.10 下一章
第17章 使用PHP和MySQL實現身份驗證 262
17.1 識別訪問者 262
17.2 實現訪問控制 263
17.2.1 保存密碼 265
17.2.2 密碼的加密 267
17.2.3 保護多個網頁 268
17.3 使用基本身份驗證 269
17.4 在PHP中使用基本身份驗證 270
17.5 在Apache的.htaccess檔案中使用基本身份驗證271
17.6 使用mod_auth_mysql身份驗證 276
17.6.1 安裝mod_auth_mysql 276
17.6.2 使用mod_auth_mysql 277
17.7 創建自定義身份驗證 277
17.8 進一步學習 278
17.9 下一章 278
第18章 使用PHP和MySQL實現安全事務 279
18.1 提供安全的事務處理 279
18.1.1 用戶機器 280
18.1.2 Internet 281
18.1.3 我們的系統 281
18.2 使用加密套接字層(SSL) 282
18.3 禁止用戶的輸入 284
18.4 提供安全存儲 284
18.5 存儲信用卡號碼 285
18.6 在PHP中使用加密技術 286
18.6.1 安裝GPG 286
18.6.2 測試GPG 288
18.7 進一步學習 293
18.8 下一章 293
第四篇 PHP的高級技術
第19章 與檔案系統和伺服器的互動 295
19.1 檔案上載 295
19.1.1 檔案上載的HTML代碼 296
19.1.2 編寫處理檔案的PHP 297
19.1.3 避免常見上載問題 300
19.2 使用目錄函式 300
19.2.1 從目錄讀取 300
19.2.2 獲得當前目錄的信息 302
19.2.3 創建和刪除目錄 302
19.3 與檔案系統的互動 302
19.3.1 獲取檔案信息 302
19.3.2 更改檔案屬性 304
19.3.3 創建、刪除和移動檔案 305
19.4 使用程式執行函式 305
19.5 與環境變數互動:getenv()和putenv() 308
19.6 進一步學習 308
19.7 下一章 308
第20章 使用網路函式和協定函式 309
20.1 了解可供使用的協定 309
20.2 傳送和讀取電子郵件 309
20.3 使用其他Web站點的數據 310
20.4 使用網路查找函式 312
20.5 備份或鏡像一個檔案
20.5.1 使用FTP備份或鏡像一個檔案 316
20.5.2 上傳檔案 321
20.5.3 避免逾時 321
20.5.4 使用其他的FTP函式 322
20.6 進一步學習 322
20.7 下一章 323
第21章 日期和時間的管理 324
21.1 在PHP中獲取日期和時間 324
21.1.1 使用date()函式 324
21.1.2 使用UNIX時間戳 325
21.1.3 使用getdate()函式 326
21.1.4 使用checkdate()函式檢驗日期有效性 327
21.1.5 格式化時間戳
21.2 在PHP日期格式和MySQL日期格式之間進行轉換 327
21.3 在PHP中計算日期 329
21.4 在MySQL中計算日期 329
21.5 使用微秒 331
21.6 使用日曆函式 331
21.7 進一步學習 332
21.8 下一章 332
第22章 創建圖像 333
22.1 在PHP中設定圖像支持 333
22.2 理解圖像格式 334
22.2.1 JPEG 334
22.2.2 PNG 334
22.2.3 WBMP 335
22.2.4 GIF 335
22.3 創建圖像 335
22.3.1 創建一個背景圖像 336
22.3.2 在圖像上繪圖或列印文本 337
22.3.3 輸出最終圖形 338
22.3.4 清理 339
22.4 在其他頁面中使用自動生成的圖像 339
22.5 使用文本和字型創建圖像 339
22.5.1 創建基本畫布 342
22.5.2 將文本調整到適合按鈕 342
22.5.3 放置文本 345
22.5.4 將文本寫到按鈕上 345
22.5.5 完成 345
22.6 繪製圖像與用圖表描繪數據 346
22.7 使用其他的圖像函式 352
22.8 進一步學習 352
22.9 下一章 353
第23章 在PHP中使用會話控制 354
23.1 什麼是會話控制 354
23.2 理解基本的會話功能 354
23.2.1 什麼是cookie 354
23.2.2 通過PHP設定cookie 355
23.2.3 在會話中使用cookie 355
23.2.4 存儲會話 ID 356
23.3 實現簡單的會話 356
23.3.1 開始一個會話 356
23.3.2 註冊一個會話變數 356
23.3.3 使用會話變數 357
23.3.4 註銷變數與銷毀會話 357
23.4 創建一個簡單的會話例子 357
23.5 配置會話控制 359
23.6 通過會話控制實現身份驗證 360
23.7 進一步學習 365
23.8 下一章 365
第24章 其他有用的特性 366
24.1 使用eval()函式對字元串求值 367
24.2 終止執行:die和exit 367
24.3 序列化變數和對象 368
24.4 獲取PHP環境信息 369
24.4.1 找到所載入的PHP擴展部件 369
24.4.2 識別腳本所有者 370
24.4.3 確定腳本最近修改時間 370
24.5 暫時改變運行時環境 370
24.6 原始碼加亮 371
24.7 在命令行中使用PHP 372
24.8 下一章 372
第五篇 創建實用的PHP和MySQL項目
第25章 在大型項目中使用PHP和MySQL 373
25.1 在Web開發中套用軟體工程 374
25.2 規劃和運行Web應用程式項目 374
25.3 重用代碼 375
25.4 編寫可維護代碼 375
25.4.1 編碼標準 375
25.4.2 分解代碼 378
25.4.3 使用標準的目錄結構 378
25.4.4 文檔化和共享內部函式 378
25.5 實現版本控制 379
25.6 選擇一個開發環境 380
25.7 項目的文檔化 380
25.8 建立原型 381
25.9 將邏輯和內容分離 381
25.10 最佳化代碼 382
25.10.1 使用簡單最佳化 382
25.10.2 使用Zend產品 382
25.11 測試 383
25.12 進一步學習 383
25.13 下一章 384
第26章 調試 385
26.1 編程錯誤 385
26.1.1 語法錯誤 385
26.1.2 運行時錯誤 386
26.1.3 邏輯錯誤 391
26.2 使用變數幫助調試 392
26.3 錯誤報告級別 393
26.4 改變錯誤報告設定 394
26.5 觸發自定義錯誤 395
26.6 巧妙地處理錯誤 396
26.7 下一章 398
第27章 建立用戶身份驗證機制和個性化設定 399
27.1 解決方案的組成 399
27.1.1 用戶識別和個性化設定 399
27.1.2 保存書籤 400
27.1.3 推薦書籤 400
27.2 解決方案概述 400
27.3 實現資料庫 402
27.4 實現基本的網站 403
27.5 實現用戶身份驗證 405
27.5.1 註冊 405
27.5.2 登錄 410
27.5.3 登出 413
27.5.4 修改密碼 414
27.5.5 重設遺忘的密碼 416
27.6 實現書籤的存儲和檢索 420
27.6.1 添加書籤 420
27.6.2 顯示書籤 422
27.6.3 刪除書籤 422
27.7 實現書籤推薦 424
27.8 考慮可能的擴展 427
27.9 下一章 427
第28章 創建一個購物車 428
28.1 解決方案的組成 428
28.1.1 創建一個線上目錄 428
28.1.2 在用戶購買商品的時候記錄購買行為 429
28.1.3 實現一個付款系統 429
28.1.4 創建一個管理界面 429
28.2 解決方案概述 429
28.3 實現資料庫 432
28.4 實現線上目錄 434
28.4.1 列出目錄 434
28.4.2 列出一個目錄中的所有圖書 437
28.4.3 顯示圖書詳細信息 438
28.5 實現購物車 440
28.5.1 使用show_cart.php腳本 440
28.5.2 瀏覽購物車 442
28.5.3 將物品添加到購物庫 444
28.5.4 保存更新後的購物車 446
28.5.5 列印標題欄摘要 447
28.5.6 結賬 447
28.6 實現付款 452
28.7 實現一個管理界面 454
28.8 擴展該項目 460
28.9 使用一個已有系統 461
28.10 下一章 461
第29章 創建一個基於Web的電子郵件服務系統 486
29.1 解決方案的組成 486
29.1.1電子郵件協定:POP3和IMAP
29.1.2 PHP對POP3和IMAP的支持
29.2 解決方案概述 488
29.3 建立資料庫 489
29.4 了解腳本架構 490
29.5 登錄與登出 495
29.6 建立賬戶 498
29.6.1 創建一個新賬戶 499
29.6.2 修改已有賬戶 501
29.6.3 刪除賬戶 501
29.7 閱讀郵件 502
29.7.1 選擇賬戶 502
29.7.2 查看信箱內容 504
29.7.3 閱讀郵件訊息 507
29.7.4 查看訊息標題 509
29.7.5 刪除郵件 509
29.8 傳送郵件 510
29.8.1 傳送一則新訊息 510
29.8.2 回復或轉發郵件 512
29.9 擴展這個項目 514
29.10 下一章 514
第30章 創建一個郵件列表管理器 515
30.1 解決方案的組成 515
30.1.1 建立列表和訂閱者資料庫 516
30.1.2 上載新聞信件 516
30.1.3 傳送帶附屬檔案的郵件 516
30.2 解決方案概述 516
30.3 建立資料庫 518
30.4 定義腳本架構 520
30.5 實現登錄 526
30.5.1 新賬戶的創建 527
30.5.2 登錄 529
30.6 用戶函式的實現 531
30.6.1 查看列表 531
30.6.2 查看郵件列表信息 535
30.6.3 查看郵件列表存檔 536
30.6.4 訂閱與取消訂閱 538
30.6.5 更改賬戶設定 539
30.6.6 更改密碼 539
30.6.7 登出 540
30.7 管理功能的實現 541
30.7.1 創建新的郵件列表 541
30.7.2 上載新的新聞信件 543
30.7.3 多檔案上載的處理 545
30.7.4 預覽新聞信件 549
30.7.5 傳送郵件 550
30.8 擴展這個項目 555
30.9 下一章 555
第31章 創建一個Web論壇 556
31.1 理解流程
31.2 解決方案的組成 556
31.3 解決方案概述 557
31.4 資料庫的設計 558
31.5 查看文章的樹型結構 560
31.5.1 展開和摺疊 561
31.5.2 顯示文章 564
31.5.3 使用treenode類 564
31.6 查看單個的文章 570
31.7 添加新文章 572
31.8 添加擴充 578
31.9 使用一個已有的系統 578
31.10 下一章 578
第32章 生成PDF格式的個性化文檔 579
32.1 項目概述
32.1.1 評估文檔格式 579
32.2 解決方案的組成 582
32.2.1 問題與回答系統 583
32.2.2 文檔生成軟體 583
32.3 解決方案概述 585
32.3.1 提問 585
32.3.2 給答題評分 587
32.3.3 生成RTF證書 589
32.3.4 從模板生成PDF證書 591
32.3.5 使用PDFlib生成PDF文檔 595
32.3.6 使用PDFlib的一個“Hello World”程式 595
32.3.7 用PDFlib生成證書 598
32.4 處理標題的問題 605
32.5 擴展該項目 605
32.6 下一章 606
第33章 使用XML和SOAP來連線Web服務 607
33.1 項目概述:使用XML和Web服務
33.1.1 理解XML
33.1.2 理解Web服務 611
33.2 解決方案的組成 612
33.2.1 使用Amazon的Web服務接口 613
33.2.2 XML的解析:REST回響
33.2.3 在PHP中使用SOAP 614
33.2.4快取614
33.3 解決方案概述 614
33.3.1 核心應用程式 618
33.3.2 顯示特定種類的圖書 623
33.3.3 獲得一個AmazonResultSet類 624
33.3.4 使用REST傳送和接收請求
33.3.5 使用SOAP傳送和接收請求
33.3.6 快取請求返回的數據 636
33.3.7 創建購物車 639
33.3.8 到Amazon付賬 642
33.4 安裝項目代碼 642
33.5 擴展這個項目 643
33.6 進一步學習 643
第34 章使用Ajax構建Web 2.0套用
34.1 Ajax 是什麼?
34.1.1 HTTP請求和回響
34.1. 2 DHTML和XHTML
34.1.3 級聯樣式單(CSS)
34.1.4 客戶端編程
34.1.5 伺服器端編程
34.1.6 XML和XSLT
34.2 Ajax基礎
34.2.1XMLHTTPRequest對象
34.2.2 與伺服器通信
34.2.3 處理伺服器回響
34.2.4 整合套用
34.3 在以前的項目添加Ajax元素
34. 3.1在PHPBookmark套用中添加Ajax元素
34.4 進一步學習
34.4.1 進一步了解文檔對象模型(DOM)
34.4.2 Ajax套用可用的JavaScript函式館
34.4.3 Ajax開發人員網站
第六篇 附 錄
附錄A 安裝PHP及MySQL 645
附錄B Web資源 664
第1章 PHP快速入門教程
第2章 數據的存儲與檢索
第3章 使用數組
第4章 字元串操作與正則表達式
第5章 代碼重用與函式編寫
第6章 面向對象的PHP
第7章 錯誤和異常處理
文摘
5.1 代碼重用的好處
軟體工程師的一個目標就是通過重複使用代碼來避免編寫新的代碼。這樣做並不是因為他們懶,而是因為重新使用已有的代碼可以降低成本、增加代碼的可靠性並提高它們的一致性。在理想情況下,一個新的項目是這樣創建的:它將已有的可重新利用的組件進行組合,並將新的開發難度降低到最小。
5.1.1 成本
在一個軟體的有效生命周期中,相當多的時間是用在維護、修改、測試和文檔化記錄上,而不是最初花在編碼上的時間。如果要編寫商業代碼,應該儘量限制結構中所用到的代碼行數。一個最常使用的方法就是:重新使用已有的代碼,而不是為一個新任務編寫一個和原來代碼只有微小區別的新代碼。更少的代碼意味著更低的成本。如果市場上已經存在能夠滿足需求的軟體,那就購買軟體。購買已有軟體的成本總是要小於開發一個等價產品的成本。如果有現成的軟體基本上能夠滿足要求,那就必須小心地使用它。修改已有的代碼可能會比編寫新代碼更加困難。
5.1.2 可靠性
如果一個模組代碼已經在代碼結構中使用了,可以認為它是已經通過測試的。即使代碼只有幾行,在重寫時仍然可能忽略兩方面的內容,一是原作者融入其中的某些東西,二是代碼測試發現缺陷後,對原來代碼添加的一些東西。使用現存的成熟的代碼通常要比新鮮的“綠色”代碼更可靠。
5.1.3 一致性
系統的外部接口應該是一致的,其中包括用戶接口和系統的外部接口。編寫一段新的並且能夠和系統函式的其他部分保持一致的代碼需要花些心思和努力。如果重複使用運行在系統其他部分的代碼,所實現的功能自然就會達到一致。
除了這些優點外,只要原來的代碼是模組化的而且編寫良好,那么重複使用代碼還會節省許多工作。在工作時,可以試著辨認一下今後可能再次要調用的代碼段。
5.2 使用require()和include()函式
PHP提供了兩個非常簡單卻很有用的語句,它們允許重新使用任何類型的代碼。使用一條require()或include()語句,可以將一個檔案載入到PHP腳本中。通常,這個檔案可以包含任何希望在一個腳本中輸入的內容,其中包括PHP語句、文本、HTML標記、PHP函式或PHP類。
這些語句的工作方式類似於大多數Web伺服器提供的伺服器端包含方式以及C語言或C++中的#include語句。
require()和include()幾乎是相同的。二者唯一的區別在於函式失敗後,require()函式將給出一個致命的錯誤。而include()只是給出一個警告。
require()和include()也有
……