PHP和MySQLWeb開發(原書第4版)

《PHP和MySQLWeb開發(原書第4版)》是2009年4月機械工業出版社出版的圖書,作者是Luke Welling、Laura Thomson。

內容簡介

本書將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()也有

……

相關詞條

熱門詞條

聯絡我們