內容簡介
本書將
PHP開發與MySQL套用相結合,分別對PHP和MySQL做了深入淺出的分析,不僅介紹PHP和MySQL的一般概念,而且對PHP和MySQL的Web套用做了較全面的闡述,並包括幾個經典且實用的例子。
本書是第4版,經過了全面的更新、重寫和擴展,包括PHP5.3最新改進的特性(例如,更好的錯誤和
異常處理),MySQL的
存儲過程和
存儲引擎,Ajax技術與Web2.0以及Web套用需要注意的安全問題。
PHP 獨特的語法混合了 C、
Java、Perl 以及 PHP 自創新的語法。它可以比 CGI或者
Perl更快速的執行
動態網頁。用
PHP做出的
動態頁面與其他的程式語言相比,PHP是將程式嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和最佳化代碼運行,使代碼運行更快。PHP具有非常強大的功能,所有的CGI的功能PHP都能實現,而且支持幾乎所有流行的資料庫以及作業系統。最重要的是PHP可以用C、C++進行程式的擴展!
作者簡介
WebDesign公司的合伙人。此外,Laura曾經在RMIT大學和
波士頓顧問集團工作過。她獲得了套用科學(計算機科學)的學士學位和工程學(計算機系統工程)學士學位。在她的空閒時間,她非常喜歡騎馬,討論免費軟體和
開源軟體以及睡覺。
LukeWelling是OmniTI公司的一位Web架構師,他經常在一些國際會議(例如,OSCON,ZendCon,MySQLUC,HPCon,OSDC以及LinuxTag)中就
開源和Web開發的話題發表演講。在加入OmniTI公司之前,他曾作為資料庫提供商的Web分析師為
Hitwise公司工作。此外,他還是TangledWebDesign公司的獨立顧問。他還在澳大利亞墨爾本的RMIT大學教授計算機科學課程。他獲得了套用科學(計算機科學)的學士學位。在他的空閒時間,他希望治好他的失眠症。
其他參與者:
JulieC.Meloni是i2iInteractive公司的技術總監,這是一家位於
加利弗里亞LosAltos的多媒體公司。她從Web一問世以及出現首個GUIWeb瀏覽器時就致力於基於Web的套用開發。她編著過大量書籍,撰寫過大量關於Web開發語言和數據的問題,其中包括銷售情況良好的《SamsTeachYourselfPHP,MySQL,andApacheAllinOne》。
AdamDeFields是Web套用開發方面,項目管理以及UI設計方面的顧問。他居住在
密西根的GrandRapids。在這個城市,有他自己的公司EmanationSystems,LLC,這是一家在2002年成立的公司。他參加過使用不同技術實現的Web開發項目,但是,他還是最喜歡開發基於
PHP/MySQL的項目。
MarcWandschneider是一個軟體開發方面的自由職業者,此外他還是作家和演講者,經常在全球範圍參與有意思的項目開發。最近,他的注意力集中在編寫健壯和可擴展的Web套用。在2005年,他編寫了一本名為《CoreWebApplicationProgramming withPHPandMySQL》的圖書。此前,他是SWiK
開源社區的主要開發人員。目前,Marc居住在北京,他將他的時間花在中文學習和編程。
目錄
讀者反饋
譯者序
前言
作者簡介
第1章PHP快速入門教程1
1.1開始之前:了解PHP
1.2創建一個示例套用:Bob汽車零部件商店2
1.2.1創建訂單表單2
1.2.2表單處理4
1.3在HTML中嵌入PHP4
1.3.1使用PHP標記5
1.3.2PHP語句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.7檢查變數類型13
1.7.1PHP的數據類型
1.7.2類型強度
1.10.1算術操作符17
1.10.2字元串操作符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.1if語句28
1.14.2代碼塊28
1.14.3else語句28
1.14.4elseif語句29
1.14.5switch語句30
1.14.6比較不同的條件31
1.15.1while循環33
1.15.3do...while循環35
1.16從控制結構或腳本中跳出35
1.17使用可替換的控制結構語法36
1.18使用declare36
1.19下一章37
第2章數據的存儲與檢索38
2.1保存數據以便後期使用38
2.2存儲和檢索Bob的訂單38
2.3檔案處理39
2.4打開檔案40
2.4.3通過FTP或HTTP打開檔案42
2.4.4解決打開檔案時可能遇到的問題42
2.5寫檔案44
2.5.1fwrite()的參數44
2.5.2檔案格式45
2.6關閉檔案45
2.7讀檔案47
2.7.1以唯讀模式打開檔案:fopen()48
2.7.2知道何時讀完檔案:feof()48
2.8使用其他有用的檔案函式51
2.8.1查看檔案是否存在:file_exists()51
2.9檔案鎖定52
2.10.1使用普通檔案的幾個問題54
2.10.2RDBMS是如何解決這些問題的54
2.11進一步學習54
2.12下一章55
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.6數組排序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.11進一步學習75
3.12下一章75
4.1創建一個示例應用程式:智慧型表單郵件76
4.2字元串的格式化78
4.2.2格式化字元串以便顯示78
4.4字元串的比較84
4.5使用字元串函式匹配和替換子字元串85
4.5.2查找子字元串的位置:strpos()、
strrpos()86
4.6.1基礎知識88
4.6.3重複89
4.6.4子表達式89
4.6.5子表達式計數90
4.6.6定位到字元串的開始或末尾90
4.6.7分支90
4.6.9特殊字元一覽91
4.6.10在智慧型表單中套用91
4.7用正則表達式查找子字元串92
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_file101
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.9使用Return關鍵字110
5.9.1從函式返回一個值111
5.11進一步學習114
5.12下一章114
6.1理解面向對象的概念115
6.1.3繼承117
6.2.1類的結構117
6.3類的實例化118
6.4使用類的屬性119
6.6類操作的調用121
6.7在PHP中實現繼承122
6.7.3使用final關鍵字禁止繼承和重載125
6.8類的設計127
6.9編寫類代碼128
6.10.1使用Per-Class常量135
6.10.3檢查類的類型和類型提示136
6.10.4克隆對象136
6.10.7使用__autoload()方法138
6.10.9將類轉換成字元串140
6.10.10使用Reflection(反射)API140
6.11下一章141
7.1異常處理的概念142
7.2Exception類144
7.3用戶自定義異常144
7.4Bob的汽車零部件商店應用程式的異常146
7.6進一步學習150
7.7下一章150
第二篇使用MySQL
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.3Web資料庫架構157
8.4進一步學習158
8.5下一章158
9.1使用MySQL監視程式160
9.2登錄到MySQL160
9.3創建資料庫和用戶161
9.4設定用戶與許可權162
9.5MySQL許可權系統的介紹162
9.5.1最少許可權原則162
9.5.3許可權的類型和級別163
9.5.4REVOKE命令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.1SQL是什麼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.4更新資料庫記錄190
10.5創建後修改表191
10.6刪除資料庫中的記錄193
10.7表的刪除193
10.8刪除整個資料庫193
10.9進一步學習194
10.10下一章194
11.1Web資料庫架構的工作原理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.1使用常規的
資料庫接口:PEARMDB2206
11.6進一步學習209
11.7下一章209
第12章MySQL高級管理210
12.1深入理解許可權系統210
12.1.1user表211
12.1.3tables_priv表,columns_priv表和procs_priv表212
12.1.5更新許可權:修改什麼時候生效213
12.2.1從作業系統角度來保護MySQL214
12.2.2密碼214
12.2.3用戶許可權215
12.2.4Web問題215
12.3獲取更多關於資料庫的信息216
12.3.1使用SHOW獲取信息216
12.3.2使用DESCRIBE獲取關於列的信息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.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.1LOADDATAINFILE語句226
13.3事務227
13.3.1理解事務的定義227
13.5.1基本示例230
13.6進一步學習236
13.7下一章236
第三篇電子商務與安全性
第14章運營一個電子商務網站237
14.1我們要實現什麼目標237
14.2考慮電子商務網站的類型237
14.2.1使用線上說明書公布信息238
14.2.2接收產品或服務的訂單240
14.2.4為產品或服務增值243
14.2.5減少成本243
14.3理解風險和威脅244
14.3.2不能招攬足夠的生意245
14.3.3計算機硬體故障245
14.3.4電力、通信、網路或運輸故障245
14.3.5廣泛的競爭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.4拒絕服務251
15.2.5軟體錯誤251
15.2.6否認252
15.3易用性,性能、成本和安全性253
15.4建立一個安全政策253
15.5身份驗證原則254
15.6加密技術基礎255
15.9審計與日誌記錄259
15.11備份數據259
15.11.1備份常規檔案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.1保持軟體的更新
16.5.2查看php.ini檔案
16.5.3Web伺服器配置
16.5.4Web套用的商業主機服務
16.6.1用戶和許可權系統
16.6.2傳送數據至伺服器
16.6.3連線伺服器
16.6.4運行伺服器
16.7保護網路
16.7.1安裝防火牆
16.8計算機和作業系統的安全性
16.8.1保持作業系統的更新
16.8.2隻運行必須的軟體
16.8.3伺服器的物理安全性
16.9災難計畫
16.10下一章
17.1識別訪問者262
17.2.1保存密碼265
17.2.2密碼的加密267
17.2.3保護多個網頁268
17.3使用基本身份驗證269
17.4在PHP中使用基本身份驗證270
17.6使用mod_auth_mysql身份驗證276
17.6.1安裝mod_auth_mysql276
17.6.2使用mod_auth_mysql277
17.7創建自定義身份驗證277
17.8進一步學習278
17.9下一章278
18.1.1用戶機器280
18.1.2Internet281
18.1.3我們的系統281
18.3禁止用戶的輸入284
18.5存儲信用卡號碼285
18.6在PHP中使用加密技術286
18.6.1安裝GPG286
18.6.2測試GPG288
18.7進一步學習293
18.8下一章293
第19章與檔案系統和伺服器的互動295
19.1檔案上載295
19.1.1檔案上載的HTML代碼296
19.1.2編寫處理檔案的PHP297
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.3創建、刪除和移動檔案305
19.4使用程式執行函式305
19.6進一步學習308
19.7下一章308
20.1了解可供使用的協定309
20.2傳送和讀取電子郵件309
20.3使用其他Web站點的數據310
20.4使用網路查找函式312
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.1使用date()函式324
21.2在PHP日期格式和MySQL日期格式之間進行轉換327
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.1JPEG334
22.2.2PNG334
22.2.3WBMP335
22.2.4GIF335
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什麼是cookie354
23.2.2通過PHP設定cookie355
23.2.3在會話中使用cookie355
23.2.4存儲會話ID356
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和exit367
24.4.1找到所載入的PHP擴展部件369
24.4.2識別腳本所有者370
24.4.3確定腳本最近修改時間370
24.5暫時改變運行時環境370
24.7在命令行中使用PHP372
24.8下一章372
第五篇創建實用的PHP和MySQL項目
第25章在大型項目中使用PHP和MySQL373
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.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.2使用變數幫助調試392
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.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.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.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.4從模板生成PDF證書591
32.3.6使用PDFlib的一個“HelloWorld”程式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.2XML的解析:REST回響
33.2.3在PHP中使用SOAP614
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構建Web2.0套用
34.1Ajax是什麼?
34.1.1HTTP請求和回響
34.1.2DHTML和XHTML
34.1.3級聯樣式單(CSS)
34.1.4客戶端編程
34.1.5伺服器端編程
34.1.6XML和XSLT
34.2Ajax基礎
34.2.1XMLHTTPRequest對象
34.2.2與伺服器通信
34.2.3處理伺服器回響
34.2.4整合套用
34.3在以前的項目添加Ajax元素
34.3.1在PHPBookmark套用中添加Ajax元素
34.4進一步學習
34.4.2Ajax套用可用的JavaScript函式館
34.4.3Ajax開發人員網站
第六篇附錄
附錄BWeb資源664
第1章PHP快速入門教程
第2章數據的存儲與檢索
第3章使用數組
第5章代碼重用與函式編寫
……