內容簡介
《PHP 5完全攻略(暢銷書升級版)》是目前第一本真正介紹PHP 5及MySQL 5新增語法與功能的中文版本權威寶典!《PHP 5完全攻略(暢銷書升級版)》本著精、全、要三宗旨,從理論中延伸,從實踐中深入,翔實並完善地描述了PHP 5的開發特性與MySQL 5資料庫。《PHP 5完全攻略(暢銷書升級版)》分為兩大部分,第1部分主要闡述PHP開發的基礎知識,如PHP數組與表單處理、PHP 5面向對象開發、Ajax、CLI、字元流處理、加密技術、圖片處理及PHP代碼最佳化,以及存儲過程、游標、事務等進階內容;書中第2部分的開發實例是作者開發的原創作品,該部分內容不僅會令讀者的開發水平有所增進,而且可在案例的基礎上進行二次開發,做出符合自己業務的網站系統。
《PHP 5完全攻略(暢銷書升級版)》既可作為初學者或剛剛從其他語言轉做PHP開發的程式設計師和軟體工程師的學習參考書,也可作為掌握PHP 5的進階套用及高級知識的案上學習指南。
編輯推薦
《PHP 5完全攻略(暢銷書升級版)》:徹夜不眠的封閉開發,睡夢中還在思考的業務聚合,除了加油努力,有時候我們忘了還要什麼,那不僅是客戶端和伺服器的腳泰,還有我們的真愛,還有想要的生活,謹以《PHP 5完全攻略(暢銷書升級版)》獻給所有辛勤工作、努力學習的PHP開發者。
媒體推薦
對所有的PHPer來說,這是一本極好的書。杜江先生手持利刃,將PHP 5的主方面面給大家一一剖析,並輔以實例,一深入淺出,更淺顯易懂,因而本書很適合PHP初學者閱讀學習,同時對PHP工作者來說,這也是一本非常有價值的案頭寶典。衷心祝願每位讀者都能通過這本書掌握PHP這把利刃!
——愛好者網技術總監 喬楚
PHP與MySQL已經是一個世界流行的Web開發黃金組合,杜江先生在書中結合了大量實際開發 經驗,由淺至I深,結合大量實例全方位闡述了PHP 5和MySQL 5。本書既是初學者全面學習和深入掌握PHP 5的教學材料,也可作為專業PHP工作者的參考手冊,特向廣大PHPer推薦。
——聖博網總工程師 馬明練
感謝杜江先生為廣大PHP開發者和愛好者帶來如此詳細且實用的書。趕集網是由PHP 5和MySQL 5開發的,這其中有杜江先生工作的很多成果。希望這本書能讓更多喜愛PHP朋友更快更深入地掌握PHP,進而湧現更多基礎紮實、功力深厚的PHP人才。
——趕集網技術主管 李靜
英才輩出,匯聚極品。杜江先生是在英極奮鬥中的精英人才之一,有著豐富的項目開發經驗,PHP功底深厚,諳熟大型網部構建,關於使用Open Source軟體構建分布套用。這本《PHP 5完全攻略》是他多年工作經驗的總結,希望這本書能成為眾多PHP技術書中的不二之選。
——英極軟體技術總監 王昕宇
目錄
第1部分 PHP 5基礎
第一篇 PHP 5基礎知識
第1章 PHP 5概述 3
1.1 什麼是PHP 3
1.1.1 PHP的歷史 3
1.1.2 PHP的優點 4
1.1.3 PHP的精神 5
1.1.4 PHP與Web 2.0 6
1.2 PHP 5的新特性 7
1.2.1 新的面向對象模式 7
1.2.2 新的面向對象特性 7
1.2.3 其他新特性 11
1.2.4 PHP 5.3新特性 12
1.2.5 MySQL 5.1新特性 12
1.3 PHP 5的擴展庫 13
1.3.1 XML擴展 13
1.3.2 SPL 14
1.3.3 MySQLi擴展 15
1.3.4 PDO資料庫抽象層 15
1.3.5 JSON擴展 15
1.4 PHP 5外部擴展庫 15
1.4.1 PECL擴展 15
1.4.2 PEAR擴展 16
1.5 PHP 5的其他更新 16
1.5.1 Zend引擎2.x 16
1.5.2 新的記憶體管理器 16
1.5.3 Zend Optimizer與Zend Core 17
1.6 PHP與WEB伺服器 17
1.6.1 Apache 17
1.6.2 Microsoft IIS 17
1.6.3 其他Web伺服器 18
1.7 PHP 5安裝與配置 18
1.7.1 Win32平台下Apache環境安裝 18
1.7.2 Win32平台下IIS環境安裝 35
1.7.3 使用集成化安裝包 38
1.7.4 FreeBSD平台 39
1.7.5 Linux平台 45
1.8 PHP配置與初步最佳化 48
1.9 其他需注意的問題 48
1.10 PHP開發工具 49
1.11 小結 54
第2章 PHP 5開發基礎 55
2.1 PHP初相遇 55
2.2 幾個技術點 56
2.2.1 PHP語句 57
2.2.2 空格與空行 57
2.2.3 注釋 57
2.2.4 函式調用 58
2.3 變數與變數名 58
2.4 變數的賦值 59
2.5 變數的引用賦值 59
2.6 PHP的數據類型 60
2.7 標量數據類型 60
2.7.1 整型 60
2.7.2 浮點型 60
2.7.3 字元串型 61
2.7.4 布爾型 61
2.8 複合數據類型 61
2.8.1 數組 61
2.8.2 對象 62
2.9 特殊數據類型 63
2.9.1 NULL 63
2.9.2 資源 63
2.10 變數列印與輸出 64
2.10.1 使用echo函式 64
2.10.2 使用print函式 64
2.10.3 echo和print的區別 64
2.10.4 使用printf函式 65
2.10.5 使用sprintf函式 65
2.10.6 顯示數組與對象 66
2.11 變數操作符 67
2.11.1 算術運算符 67
2.11.2 賦值操作符 68
2.11.3 字元串連線 68
2.11.4 字元串換行連線 68
2.11.5 花括弧的作用 69
2.11.6 單引號與雙引號 70
2.11.7 HereDoc 70
2.11.8 轉義操作符 71
2.11.9 格式控制符 71
2.11.10 遞增與遞減操作符 72
2.11.11 三元操作符 72
2.11.12 比較運算符 73
2.11.13 布爾運算符 74
2.11.14 位操作符 75
2.12 數據類型自動轉換 76
2.13 數據類型強制轉換 77
2.13.1 轉換為整型數據 78
2.13.2 用intval()函式取整 78
2.13.3 轉換為浮點型數據 78
2.13.4 轉換為布爾型數據 79
2.13.5 轉換為字元串型數據 79
2.13.6 轉換為數組 79
2.13.7 轉換為對象 80
2.14 超級全局數組 80
2.14.1 $_SERVER超級全局變數數組 81
2.14.2 修改全局數組的值 84
2.15 變數與腳本處理 84
2.15.1 使用isset()函式檢測變數定義 84
2.15.2 使用unset()函式刪除變數 85
2.15.3 使用empty()函式檢測變數值是否為空 85
2.15.4 其他檢測類函式族 85
2.16 常量 85
2.16.1 定義常量 86
2.16.2 PHP魔術常量 86
2.17 PHP的控制結構 87
2.17.1 分支結構語句 87
2.17.2 循環結構語句 92
2.18 包含控制語句 97
2.18.1 include與require 97
2.18.2 include_once與require_once 98
2.18.3 eval() 98
2.18.4 中止腳本的執行:exit()與die() 99
2.19 函式 99
2.19.1 函式的命名 100
2.19.2 函式的結構 100
2.19.3 從函式中返回值 101
2.19.4 函式參數的傳遞 102
2.19.5 函式與全局變數 106
2.19.6 函式的靜態變數 107
2.19.7 函式中使用常量 108
2.19.8 遞歸函式 109
2.19.9 解決函式重名的方法 109
2.20 可變變數 110
2.21 字元串操作 110
2.21.1 手動轉義字元串數據 110
2.21.2 自動轉義字元串數據 111
2.21.3 數值轉換字元串 112
2.21.4 字元串序列化 112
2.21.5 清理字元串中的空格 113
2.21.6 格式化字元串 114
2.21.7 字元串切分 114
2.21.8 字元串截取 115
2.21.9 計算字元串的長度 115
2.21.10 字元串單詞統計 116
2.21.11 字元串查找 117
2.21.12 字元串處理 118
2.22 日期與時間 123
2.22.1 UNIX時間戳 123
2.22.2 日期函式 124
2.22.3 時間函式 127
2.23 網路相關處理 130
2.23.1 header()函式 130
2.23.2 處理URL字元串 132
2.23.3 獲得PHP環境信息 134
2.24 其它操作符 135
2.24.1 @-錯誤抑制符 135
2.24.2 執行外部命令 135
2.25 小結 136
第3章 正則表達式 137
3.1 正則表達式簡介 137
3.2 正則表達式功能 137
3.3 POSIX正則表達式 138
3.3.1 ^和$定位符 138
3.3.2 POSIX量詞 138
3.3.3 方括弧表達式 139
3.3.4 預定義字元簇 140
3.3.5 POSIX正則表達式函式 140
3.4 PCRE正則表達式函式 142
3.4.1 PCRE字元類 142
3.4.2 PCRE匹配 142
3.4.3 PCRE正則表達式函式 143
3.5 正則表達式VS函式 149
3.6 創建BBCODE 149
3.7 小結 150
第4章 PHP數組 151
4.1 什麼是數組 151
4.2 數組的類型 152
4.2.1 數字索引數組 152
4.2.2 關聯數組 152
4.3 數組的構造 153
4.3.1 一維數組 153
4.3.2 二維數組與多維數組 154
4.3.3 多維數組 159
4.4 快速創建數組 161
4.4.1 使用range()函式 161
4.4.2 為數組追加數據 162
4.4.3 修改數組內容 162
4.5 訪問和處理數組內容 162
4.5.1 數字索引數組排序 162
4.5.2 關聯數組排序 163
4.5.3 數組隨機抽取shuffle()和array_rand() 164
4.5.4 統計數組元素出現的次數 165
4.5.5 數組聯合array_combine 166
4.5.6 數據合併array_merge 166
4.5.7 查找數組中鍵名是否存在 167
4.5.8 查找數組值是否存在 168
4.5.9 計算數組中數值元素的和 169
4.5.10 去除數組中重複的元素值 169
4.5.11 移動數組內部指針 170
4.5.12 取得關聯數組的鍵名 170
4.5.13 訪問數組的鍵名和元素 170
4.5.14 判斷數組的類型 171
4.5.15 顯示數組內容與結構 171
4.5.16 移除數組中的指定元素 173
4.5.17 在數組頂部插入元素 174
4.5.18 在數組任意位置插入元素 174
4.5.19 數組元素的統計count()函式和sizeof()函式 175
4.5.20 數組鍵名與值的對調array_flip()函式 175
4.5.21 對數組元素分組統計array_values()函式 176
4.5.22 刪除數組首末尾元素 177
4.5.23 刪除數組中任意位置的元素 177
4.5.24 將數組內容導出為變數extract()函式 179
4.6 數組遍歷(使用FOREACH) 180
4.6.1 一維索引數組的遍歷 180
4.6.2 一維關聯數組的遍歷 181
4.7 使用FOR語句對數組遍歷 182
4.8 使用FOR語句實現樹狀選單 182
4.9 數組遍歷LIST()和EACH() 184
4.10 數組復位RESET()函式 185
4.10.1 each() 185
4.10.2 list() 185
4.11 FOREACH與FOR語句對數組處理的比較 186
4.12 數組內容過濾 186
4.13 小結 188
第二篇 PHP 5核心套用與規範
第5章 表單——處理用戶輸入 190
5.1 表單與HTML 190
5.2 表單與PHP 190
5.3 表單設計 191
5.3.1 文本框 191
5.3.2 密碼文本框 191
5.3.3 單選項 192
5.3.4 複選項 192
5.3.5 下拉列表 193
5.3.6 表單屬性 194
5.3.7 提交與復位按鈕 194
5.4 GET與POST方法 195
5.4.1 使用GET方法 195
5.4.2 使用POST方法 199
5.4.3 POST方法和GET方法混合使用 200
5.4.4 POST方法和GET方法的區別 202
5.4.5 選擇POST還是GET 202
5.5 動態生成表單 202
5.6 表單的處理方法 205
5.6.1 檢查表單提交的來源 205
5.6.2 一個完整表單處理 206
5.7 其他處理表單的方法 208
5.7.1 使用import_request_variables()函式 208
5.7.2 使用extract()函式 209
5.8 多頁面間傳遞數據 210
5.9 驗證表單數據 210
5.9.1 客戶端驗證 210
5.9.2 伺服器端驗證 211
5.9.3 避免表單重複提交 211
5.9.4 表單過期的處理 213
5.9.5 判斷表單動作的技巧 213
5.10 表單安全 214
5.10.1 處理全局性錯誤 214
5.10.2 預防SQL注入 217
5.11 開發安全的代碼 218
5.11.1 用戶輸入驗證 218
5.11.2 高級數據驗證:使用ctype 218
5.11.3 數據過濾 - PECL filter擴展 219
5.11.4 input_get()函式 220
5.11.5 路徑檢測 221
5.11.6 魔法引用magic_quotes_gpc 221
5.11.7 其他高效的解決方案 221
5.12 小結 222
第6章 PHP加密技術 223
6.1 MD5算法 223
6.2 SHA-1算法 223
6.3 CRACKLIB擴展庫 224
6.4 MCRYPT擴展與DES算法 224
6.4.1 mcrypt加密擴展 225
6.4.2 mcrypt加密模式 225
6.4.3 mcrypt初始化向量 226
6.4.4 mcrypt加密與解密方法 227
6.5 小結 228
第7章 PHP國際化與本地化 229
7.1 I18N和L10N 229
7.2 字元集與編碼 229
7.2.1 ASCII字元集 230
7.2.2 ISO-8859字元集 230
7.2.3 ANSI編碼 230
7.2.4 GB2312與GBK編碼 230
7.2.5 Unicode字元集 231
7.2.6 正確使用檔案編碼 232
7.3 GETTEXT擴展庫 232
7.3.1 設定gettext 233
7.3.2 php_gettext函式集 233
7.3.3 編寫I18N程式 233
7.3.4 設定gettext po檔案 234
7.4 系統本地化函式族 236
7.4.1 setlocale()函式 236
7.4.2 貨幣值本地化 237
7.4.3 使用pc_format_currency( )函式 238
7.5 ICONV()函式 239
7.6 MBSTRING擴展庫 240
7.6.1 使用mbstring進行字元串截取 240
7.6.2 檢測字元串編碼 241
7.6.3 mbstring轉換編碼 241
7.7 小結 242
第8章 PHP開發規範 243
8.1 代碼結構 243
8.1.1 一個腳本服務全部 243
8.1.2 分離顯示邏輯 244
8.2 良好的編碼風格與樣式 244
8.2.1 代碼注釋 245
8.2.2 代碼縮進 246
8.2.3 使用必要的空格 246
8.2.4 SQL編寫規範 247
8.2.5 控制結構 247
8.2.6 函式的命名 247
8.2.7 類命名規範 248
8.2.8 減少出錯的技巧 248
8.3 小結 249
第9章 PHP 5面向對象開發 250
9.1 面向對象基礎 250
9.2 PHP 5 面向對象編程概述 251
9.2.1 類的封裝 251
9.2.2 類的繼承 251
9.3 對象 251
9.4 創建和使用類 252
9.5 類的結構與定義 252
9.6 成員方法 252
9.7 成員變數與屬性 253
9.8 $THIS關鍵字 254
9.9 構造方法 254
9.10 析構方法 256
9.11 類的繼承與多態 256
9.11.1 類的繼承——extends 256
9.11.2 數據的隱藏 258
9.11.3 訪問成員變數的約束 258
9.11.4 設定訪問成員方法 259
9.11.5 類常量 260
9.11.6 靜態成員變數 260
9.11.7 靜態成員方法 262
9.12 對象傳遞 262
9.13 克隆一個對象——CLONE 263
9.14 對象的比較 263
9.15 對象類型的檢測——INSTANCEOF 264
9.16 克隆一個成員方法 264
9.17 類的多態性 265
9.18 PARENT::與SELF::關鍵字 267
9.19 抽象方法與抽象類 267
9.20 接口的實現 269
9.21 實現多個接口 270
9.22 FINAL方法 272
9.23 FINAL類 272
9.24 例外與異常處理 273
9.25 方法中聲明類的類型 274
9.26 重載與多態 275
9.27 魔術方法 275
9.27.1 _ _get()與_ _set()方法 275
9.27.2 _ _call()方法 276
9.27.3 _ _sleep()與_ _wakeup()方法 277
9.27.4 _ _toString()方法 277
9.27.5 _ _autoload()方法 278
9.28 類映射API REFLECTION 279
9.29 小結 286
第10章 PHP會話管理 287
10.1 概述 287
10.2 COOKIE管理 287
10.2.1 什麼是Cookie 288
10.2.2 Cookie工作原理 288
10.2.3 Cookie套用開發 288
10.2.4 一個通用的Cookie類 292
10.2.5 解決方案 293
10.3 SESSION管理 294
10.3.1 什麼是Session 294
10.3.2 Session配置 295
10.3.3 Session套用 297
10.3.5 Session編碼與解碼 300
10.3.6 Session中保存數組 300
10.3.6 Session中保存對象 301
10.3.7 Session存取最佳化 303
10.3.8 多伺服器下共享Session 304
10.3.9 Session安全 307
10.4 小結 308
第11章 PHP輸入輸出緩衝 309
11.1 緩衝技術簡介 309
11.2 從緩衝讀取內容 310
11.3 使用回調函式 311
11.4 輸出回調函式 311
11.5 壓縮內容輸出 312
11.6 小結 312
第12章 檔案系統與字元流 313
12.1 檔案與路徑 313
12.1.1 分析一個檔案的名稱與擴展名 313
12.1.2 利用PHP自帶函式分析當前路徑 314
12.1.3 顯示相對路徑的真實路徑 314
12.2 檔案類型與相關信息 314
12.2.1 filesize()——計算檔案的大小 315
12.2.2 取得檔案的建立、最後訪問與更新時間 315
12.2.3 fileperms()——檔案屬性以及許可權 315
12.2.4 取得檔案所有者(Owner) 315
12.3 檔案的順序讀寫 315
12.3.1 檔案打開與寫入 315
12.3.2 檔案輸出 317
12.3.3 讀取檔案內容 318
12.4 檔案的非線性讀寫 318
12.4.1 fseek()函式 319
12.4.2 ftell()函式 319
12.4.3 rewind()函式 319
12.4.4 parse_ini_file()函式 320
12.5 自定義日誌記錄 321
12.6 目錄和磁碟操作 321
12.6.1 disk_free_space()——統計某個目錄的剩餘空間 321
12.6.2 disk_total_space()——顯示邏輯磁碟的容量 322
12.6.3 getcwd()/chdir()函式 322
12.6.4 opendir()與readdir()函式 322
12.6.5 實現iterator接口的目錄讀取 323
12.7 字元流 324
12.7.1 流與封裝器的原理 325
12.7.2 PHP 5的預置流包裝器 325
12.7.4 流與封裝器的套用 326
12.7.5 Filter過濾器及其套用 328
12.7.6 流相關函式 330
12.7.7 創建自己的流過濾器 331
12.8 取得HTTPS加密內容 332
12.9 創建自己的流封裝器 333
12.10 小結 334
第三篇 MySQL 5與PHP 5接口
第13章 WEB資料庫設計 336
13.1 資料庫和資料庫系統的概念 336
13.2 資料庫設計的步驟 337
13.3 表名與欄位名規則 338
13.4 小結 339
第14章 MYSQL 5資料庫 340
14.1 MYSQL簡介 340
14.2 MYSQL 5特性 341
14.2.1 MySQL 5優點 341
14.2.2 MySQL 5缺點 341
14.2.3 MySQL 5性能 341
14.3 MYSQL資料庫存儲類型 342
14.4 MYSQL欄位類型 343
14.5 MYSQL字元集與整理 344
14.5.1 MySQL 5字元集支持的原理 344
14.5.2 修改MySQL字元集方法 344
14.6 MYSQL 5套用與管理 345
14.6.1 登錄到MySQL 345
14.6.2 修改root管理密碼 346
14.6.3 創建資料庫 346
14.6.4 改變資料庫存儲路徑 346
14.6.5 MySQL許可權系統 347
14.6.6 phpMyAdmin管理工具 350
14.7 MYSQL管理工具 357
14.8 小結 357
第15章 MYSQL資料庫 358
15.1 MYSQL操作與SQL 358
15.2 檢索表中的數據 361
15.2.1 SELECT 語句 361
15.2.2 SELECT的聚集函式 362
15.2.3 結果集排序 362
15.2.4 函式 362
15.2.5 關聯查詢 362
15.3 高級SQL技術 364
15.3.1 主鍵 364
15.3.2 子查詢 365
15.3.3 聯合查詢 365
15.4 MYSQL事務處理與觸發器 365
15.4.1 存儲進程 365
15.4.2 觸發器(trigger) 366
15.4.3 視圖 366
15.4.4 PHP與MySQL字元集 367
15.5 小結 368
第16章 PHP與MYSQL 369
16.1 PHP5與MYSQL連線的MYSQL擴展 369
16.2 資料庫查詢 370
16.3 其他顯示記錄集的函式 372
16.4 PHP 5與MYSQL的新接口MYSQLI 375
16.5 智慧型選擇MYSQL擴展 384
16.6 小結 387
第17章 PHP資料庫抽象層 388
17.1 什麼是資料庫抽象層 388
17.2 常用的資料庫抽象層 389
17.2.1 PEAR:DB 389
17.2.2 ADODB 390
17.2.3 Metabase 390
17.2.4 MDB 391
17.2.5 MDB2 391
17.2.6 Creole 392
17.2.7 PDO 392
17.2.8 PHPLib 392
17.3 PDO資料庫抽象類 392
17.3.1 PDO簡介 392
17.3.2 PDO的安裝 393
17.3.3 PDO連線資料庫 393
17.3.4 使用PDO查詢 394
17.3.5 錯誤與異常處理 395
17.3.6 取得查詢結果 397
17.4 ADODB 401
17.4.1 使用ADODB 401
17.4.2 ADODB安裝 402
17.4.3 啟動ADODB 402
17.4.4 ADODB的查詢方法 403
17.4.5 移動記錄集 403
17.4.6 使用ADODB生成HTML 404
17.4.7 使用ADODB進行分頁 404
17.4.8 生成下拉選擇選單 404
17.4.9 ADODB開發實例 404
17.5 PHPLIB 416
17.5.1 使用PHPLib查詢 416
17.5.2 創建GetAll方法 418
17.6 小結 419
第四篇 PHP 5進階與技巧
第18章 SMARTY與模板技術 421
18.1 MVC簡介 421
18.2 模板系統 422
18.3 SMARTY概述 422
18.3.1 Smarty的優點 422
18.3.2 Smarty開發特性 423
18.4 安裝SMARTY 423
18.5 SMARTY開發基礎 425
18.5.1 第一個模板程式 425
18.5.2 編譯後的模板 426
18.5.3 Smarty區塊 427
18.5.4 Smarty注釋 427
18.5.5 Smarty變數與變數格式化 427
18.6 SMARTY的控制結構 430
18.6.1 IF分支結構 430
18.6.2 循環結構 432
18.6.3 Smarty生成表單元素 440
18.6.4 Smarty檔案包含 442
18.7 SMARTY快取 443
18.8 深入SMARTY開發 444
18.8.1 register_function 444
18.8.2 register_block 444
18.8.3 register_modifier 444
18.8.4 在模板內運行PHP代碼 445
18.8.5 幾個重要的模板修飾符 445
18.8.6 Smarty的保留變數 446
18.8.7 模板配置檔案 447
18.8.8 Smarty工作檯 447
18.8.9 Smarty生成靜態頁面 448
18.8.10 製作線上日曆 448
18.8.11 Smarty與ADODB 449
18.9 小結 451
第19章 PHP和AJAX技術 452
19.1 AJAX簡介 452
19.2 AJAX特性 453
19.3 XAJAX簡介 453
19.4 XAJAX如何工作 453
19.5 異步更新內容 454
19.6 異步處理表單數據 456
19.7 增加自定義功能 457
19.8 解決亂碼 457
19.9 SMARTY與XAJAX 457
19.10 小結 459
第20章 使用PHP編寫SHELL 460
20.1 簡介 460
20.2 PHP CLI SHELL腳本 460
20.2.1 CLI 與CGI的區別 460
20.2.2 CLI的配置參數 460
20.3 PHP命令行接口(CLI) 461
20.4 CLI命令選項 462
20.5 CLI開發 463
20.6 CLI實際套用 467
20.7 小結 470
第21章 PHP網路開發 471
21.1 SOCKET技術 471
21.1.1 Socket原理 471
21.1.2 建立一個連線 472
21.1.3 傳送一個請求 472
21.1.4 查詢Whois信息 473
21.1.5 創建自己的Socket伺服器 474
21.2 電子郵件 475
21.2.1 電子郵件簡介 475
21.2.2 MTA和SMTP 475
21.2.3 PHP郵件配置 476
21.2.4 電子郵件頭 477
21.2.5 MIME 477
21.3 使用MAIL()函式 479
21.4 使用SOCKET傳送郵件 481
21.5 獲取遠程內容與自動化 482
21.5.1 使用CURL 482
21.5.2 使用Snoopy類 484
21.5.3 FTP操作 486
21.5.4 PHP與網路協定 488
21.6 小結 488
第22章 PHP檔案上傳 489
22.1 檔案上傳簡介 489
22.2 處理上傳檔案 490
22.3 處理多檔案上傳 494
22.4 突破上傳的記憶體限制 496
22.5 小結 496
第23章 圖片與媒體處理 497
23.1 使用GD2擴展庫 497
23.1.1 打開一張圖片 498
23.1.2 打開任意格式的圖片 498
23.1.3 顯示和保存圖片 499
23.1.4 圖片轉換 500
23.1.5 創建文字圖片 501
23.1.6 繪製圖形 502
23.1.7 創建驗證碼——CAPTCHA 503
23.1.8 縮略圖片處理 504
23.1.9 創建水印圖片 506
23.2 使用MING擴展創建FLASH 508
23.2.1 創建按鈕 508
23.2.2 靜態文字 509
23.2.3 動態文字 510
23.2.4 繪製圖形 511
23.2.5 使用圖片 512
23.3 使用IMAGEMAGICK 513
23.3.1 ImageMagick簡介 513
23.3.2 安裝ImageWand 514
23.3.3 讀取圖片內容 514
23.3.4 讀取圖片尺寸 515
23.3.5 圖片裁切 515
23.3.6 生成圖片縮略圖 515
23.3.7 轉換圖片格式 516
23.3.8 控制圖片旋轉 516
23.3.9 重新縮放圖片 517
23.3.10 加入渲染效果 517
23.3.11 壓縮JPEG圖片 518
23.4 小結 518
第24章 XML與RSS 519
24.1 XML 519
24.1.1 XML的結構與定義 519
24.1.2 XML與HTML 520
24.2 創建與解析XML文檔 521
24.2.1 創建一個XML文檔 522
24.2.2 使用SAX解析XML 523
24.2.3 DOM 525
24.2.4 SimpleXML 529
24.3 RSS聚合與解析技術 530
24.3.1 RSS簡介 530
24.3.2 RSS 0.9 530
24.3.3 RSS3 1.0 531
24.3.4 RSS 2.0 532
24.3.5 Atom 534
24.4 XML READER 536
24.5 XML與SMARTY 537
24.6 小結 537
第25章 WEB服務與SOAP 538
25.1 WEB服務 538
25.1.1 Web服務概述 538
25.1.2 Web服務的特點 539
25.2 SOAP的訊息體 540
25.2.1 SOAP封套(SOAP Envelope) 540
25.2.2 SOAP頭(SOAP Header) 540
25.2.3 SOAP錯誤信息(SOAP Fault) 540
25.2.4 訊息體(SOAP Body) 541
25.3 PHP中的SOAP配置 541
25.4 使用PHP開發SOAP套用 542
25.4.1 WSDL 542
25.4.2 建立SOAP伺服器端 545
25.4.3 建立SOAP客戶端 546
25.5 小結 546
第26章 PHP與WAP技術 547
26.1 WAP技術簡介 547
26.2 WAP配置 547
26.3 WAP頁面 548
26.3.1 WAP頁面簡介 548
26.3.2 WAP頁面跳轉 548
26.3.3 使用WAP製作登錄頁面 550
26.4 SMARTY與WAP 554
26.5 小結 554
第五篇 PHP 5調試、升級與最佳化
第27章 錯誤與異常處理 556
27.1 概述 556
27.2 錯誤的類型 556
27.2.1 編程錯誤 556
27.2.2 未定義符號 557
27.2.3 輕量級錯誤 559
27.2.4 PHP產生的錯誤 560
27.2.5 錯誤與例外處理 562
27.3 小結 567
第28章 升級到PHP5 568
28.1 簡介 568
28.2 對象的引用 568
28.3 構造對象 569
28.4 GET_CLASS()函式 569
28.5 IS_A()函式與INSTANCE OF 569
28.6 E_STRICT 570
28.6.1 自動建立對象 570
28.6.2 var與public 570
28.7 其他兼容性的問題 570
28.7.1 命令行接口 570
28.7.2 舊的超級全局數組的升級 570
28.7.3 函式修正與功能升級 571
28.8 小結 571
第29章 PHP最佳化技巧 572
29.1 PHP腳本級最佳化 572
29.1.1 require比require_once快 573
29.1.2 不做重複的車輪 573
29.2 使用代碼最佳化工具 574
29.3 快取加速 575
29.3.1 使用eAccelerator 575
29.3.2 使用APC 577
29.4 HTTP加速 578
29.4.1 HTTP頭信息 578
29.4.2 啟用GZIP內容壓縮 578
29.5 MYSQL性能最佳化 578
29.5.1 添加索引 578
29.5.2 MySQL快取與性能調優 579
29.6 MYSQL日誌維護 581
29.7 資料庫外部最佳化 581
29.7.1 伺服器硬體最佳化 581
29.7.2 磁碟最佳化 582
29.7.3 作業系統最佳化 582
29.8 使用反向代理 582
29.9 APACHE伺服器最佳化 583
29.10 內容壓縮與最佳化 583
29.11 分布與負載均衡 584
29.12 小結 586
第2部分 實戰PHP5
第30章 實例開發:會員 589
30.1 概述 589
30.2 頁面流程 589
30.2.1 用戶註冊流程 589
30.2.2 用戶登錄流程 590
30.3 資料庫結構 590
30.4 UI與界面 593
30.5 目錄結構與檔案說明 595
第31章 實例開發: 603
31.1 目錄結構與檔案說明 603
31.2 頁面流程 603
31.2.1 創建圈子 603
31.2.2 管理圈子 604
31.2.3 加入其他人創建的圈子 605
31.3 資料庫結構 605
31.4 UI與界面 608
第32章 實例開發:愛問系統 610
32.1 概述 610
32.2 頁面流程 610
32.3 目錄結構與檔案說明 612
32.4 UI與界面 613
32.5 資料庫結構 617
第33章 實例開發:多用戶 619
33.1 概述 619
33.2 目錄結構與檔案說明 619
33.3 頁面流程 620
33.4 UI與界面 620
33.5 資料庫結構 621
33.6 小結 623
附錄A PHP線上資源 592
附錄B Zend Core安裝 593
附錄C PHP擴展開發 599
附錄D MySQL字元集與整理 601
附錄E 代碼頁與Charset對照表 605
附錄F php.ini配置詳解 606
附錄G HTTP返回代碼表(RFC2068) 626