PHP深度分析:101個核心技巧、竅門和問題解決方法

-
【作 者】[美]DAVEY SHAFIK 等
【I S B N 】978-7-5084-6989-8
【責任編輯】李炎
【適用讀者群】科技
【出版時間】2010-01-01
【開 本】16開本
【裝幀信息】平裝(光膜)
【版 次】第1版
【頁 數】
【千字數】
【印 張】
【定 價】¥45
【叢 書】暫無分類
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
本書作者為活躍在PHP開發一線、具有豐富PHP開發經驗的專家,他們把實踐中積累的大量經驗技巧和有針對性的問題的解決方案,結合SitePoint論壇上的一些常見問題的解決方案編寫了本書。本書采用大量實際案例進行深入分析講解,非常有利于讀者的學習理解。本書基本涵蓋了Web開發中常見的問題,讀者可以直接進入到關注的主題進行學習。內容涵蓋使用PDO訪問數據庫,字符串,日期和時間,表單、表格和漂亮整潔的URL,文件操作、電子郵件、圖像、錯誤處理、訪問控制、緩存、XML和Web service。
為了輔助本書的學習,作者還建立了一個Web站點,提供代碼和更新等資源支持,網址為http://www.sitepoint.com/books/phpant2/,書中的大量腳注也提供了有用資源的參考。
本書適用于具有一定PHP開發經驗的初學人員,對于那些希望改善Web應用程序或提高技術水平的資深開發人員也有很高的參考價值。
Copyright © China WaterPower Press(2009) Authorized translation of the English edition of The PHP Anthology 2nd edition (ISBN 9780975841990) © 2007 SitePoint Pty.Ltd.
This translation id published and sold by permission of O’Reilly Media, Inc., the owner of all rights to publish and sell the same.
北京市版權局著作權合同登記號:圖字01-2008-5977
關于PHP最偉大的一個方面就是其充滿活力的社區。開發人員享有許多在線會面的機會,包括SitePoint論壇 ,在這里開發人員可以相互幫助解決他們在日常工作中遇到的問題,包括從最基礎的PHP如何工作到解決像“如何驗證一個表單?”這類設計問題。作為一種獲得幫助的方法,這些社區做得非常出色。它們包含了保證項目成功所需要的各種重要內容。但是將所有這些知識組合在一起應用于您的特定情況卻是一個挑戰。社區成員通常會假定其他文章的發布者具有一定程度的知識,您可能經常需要花費大量時間從各種文章、帖子和用戶(每個用戶具有不同的編程風格)那里抽取一些代碼片段拼湊起來形成一個完整的圖像。
《PHP深度分析:101個核心技巧、竅門和問題解決方法》(原書第二版)首次匯集了定期發布在SitePoint論壇上的常見PHP問題的最佳解決方案,并結合了作者們從其多年PHP使用中獲得的經驗和感悟。
本書區別于其他PHP圖書的地方在于其未采用指南的形式,而是將重點放到怎樣以最少精力獲得實際結果上。為了達到這種結果,您不必逐頁閱讀本書,而是采用“即插即用”的方式使用本書中提供的解決方案。為了幫助讀者更好地使用本書,每個部分都采用了一致的“問題-解決方案”的方式。可以快速瀏覽一下目錄,直接跳轉到針對您問題的解決方案。
也就是說,有一個隱藏的議題貫穿于本書中所有討論。除了解決方案,本書還將為您介紹一些能夠節省精力的技巧,幫助您減少完成和維護基于Web的PHP應用的時間。
PHP最早被認為是一種過程化編程語言,但是近些年其已經逐漸被證明為一種面向對象解決方案的開發語言。隨著PHP 5的發布,PHP進行了全面重新編寫,增加了更多面向對象模型開發的能力。2007年7月13日,PHP開發團隊宣布PHP 4終止,從而更加強了PHP 5的開發。
很多PHP開發人員對面向對象的開發感到恐慌,這些范例也通常被認為只有大師級的人員才能掌握。通過本書,您會發現,掌握目前PHP 5中的面向對象特性和類庫根本不需要擁有計算機學位。
PHP擴展和應用庫(PHP Extension and Application Repository,簡稱PEAR )為世界各地PHP開發人員通常面臨的架構問題(例如Web表單生成和驗證)提供了一種可重用和易于維護的解決方案集,并且處于不斷的發展中。在本書提供的解決方案的開發中,我們采用了本書作者找到的可供自由使用的庫,這曾為他們節省了很多開發時間。
本書區別于當前很多的PHP圖書,將重點放在利用可重用組件建立PHP Web應用程序上。盡管本書沒有太多關于面向對象設計的擴展討論,但本書會潛移默化地幫助您將PHP編碼技能提高到一個新的水平,逐漸能夠創建經得起時間考驗的應用程序。
《PHP深度分析:101個核心技巧、竅門和問題解決方法》(原書第二版)將會使你掌握使用PHP引擎進行開發所應具有的核心技巧,包括對于PHP面向對象開發的快速入門知識(參閱第1章“什么是面向對象”)。在進行了特別的準備之后,本書將著眼于能應用于幾乎所有基于PHP的Web應用程序的解決方案上,可能您已經知道這些解決方案,但是還沒有完全掌握。
誰應該閱讀本書?
如果曾經使用過PHP,而且可能已經閱讀過Kevin Yank的《使用PHP》和《MySQL創建自己的數據庫驅動Web站點》(第三版)(SitePoint,墨爾本,ISBN 0-9752402-1-8),并已經使用PHP完成了一或兩個項目,那么本書會非常適合您。
如果曾經對于“如何驗證Web頁面表單?”、“如何向照片中增加水印?”或“如何從Web應用程序中自動發送電子郵 件?”等問題存有疑問,那么會在本書中找到這些問題的答案。如果希望通過可重用組件、緩沖性能或Web服務來改善Web應用程序或提高技術水平,那么您會發現本書是一個絕佳的選擇。
本書包括哪些內容?
本書包括以下章節的內容:
第1章 概述
本章介紹通過PHP手冊和其他資源來獲取幫助的方法。包括對于面向對象編程的介紹:PHP類語法的概要介紹,以及面向對象如何應用于PHP。這部分是對后面章節的準備內容。本章還介紹了可移植代碼的編寫技巧,并且有機會了解一些主要的PHP配置陷阱。
第2章 使用PDO訪問數據庫
本章介紹了所有與PHP數據對象(PDO)擴展相關的知識。本章從基礎知識開始介紹,覆蓋了像如何編寫靈活的SQL語句和避免SQL注入攻擊等重要主題。之后對于一些較少人了解的方面進行了深入探討,例如搜索、事務處理和存儲過程、數據庫備份等。
第3章 字符串
本章探討處理站點內容的詳細方法。我們將通過驗證和過濾用戶提交內容的過程,學習不可或缺的字符串函數。
第4章 日期和時間
通過本章,您將了解如何使用PHP的日期函數,并將實現一個在線日歷。您也將會為在MySQL中的日期存儲和操作方面打下堅實的基礎。
第5章 表單、表格和漂亮整潔的URL
本章包括Web頁面表單和表格的核心內容。我們將討論使用PEAR:HTML_QuickForm進行表單開發,還會了解到如何使用PEAR:HTML_Table實現數據表格和頁面結果集。我們還會討論一些用于Apache的生成搜索引擎友好的URL的技巧。
第6章 文件操作
本章是PHP文件操作的“生存指南”。在本章中,我們將探討從訪問本地文件系統到使用PHP的FTP客戶端獲取網絡文件等所有內容。我們將會繼續學習如何使用PEAR:Archive_Tar創建壓縮文件,并簡略學習標準PHP庫的使用。
第7章 電子郵件
在本章中,我們將特別學習電子郵件相關的解決方案,展現如何全面利用PHP電子郵件方面的功能。我們將會學習到借助于PEAR:Mail和PEAR:Mail_Mime成功發送HTML格式的電子郵件和附件,以及使用PHP輕松處理發送到Web服務器的電子郵件。
第8章 圖像
本章探討縮略圖的創建,并解釋如何為站點中的圖像增加水印。我們將討論如何阻止來自其他站點的盜鏈、使用Exif數據創建圖像庫系統、使用JpGraph產生一些專業圖表——也就是CAPTCHA圖。
第9章 錯誤處理
在本章中,您將會理解PHP的錯誤報告機制,如何利用PHP的自定義錯誤處理功能,以及如何恰當地處理錯誤,本章重點放在異常處理和自定義異常上。
第10章 訪問控制
本章介紹控制站點訪問的方法,從基本的HTTP驗證開始,然后過渡到應用程序層次的驗證。之后的解決方案將實現一個用戶注冊系統,并創建一套具有用戶、組和權限的細粒度訪問控制系統。
第11章 緩存
本章介紹加速HTML的基本方法,并展示如何在客戶端和服務器端利用緩存技術減少帶寬使用以及大幅度提高性能。本章內容包括HTTP頭、輸出緩存和使用PEAR:Cache_Lite等內容。
第12章 XML和Web service
隨著XML迅速成為幾乎所有基于Web的應用程序的重要部分,本章探討PHP 5豐富的XML功能。在這里,您會發現要生成和使用基于RSS,XML-RPC,SOAP和REST的Web service是多么簡單。
第13章 最佳實踐
本章的目標是介紹一些在促成項目開發成功方面得到驗證的技術。內容包括代碼版本管理、如何編寫可分布代碼、如何為您的作品增加API文檔、如何利用單元測試減少bug,以及如何安全部署代碼等。
前言
第1章 概述 1
1.1 從何處獲得幫助 1
1.2 什么是OOP 6
1.3 如何編寫可移植的PHP代碼 22
1.4 小結 25
第2章 使用PDO訪問數據庫 26
2.1 什么是PDO 27
2.2 如何訪問數據庫 27
2.2.1 解決方案 27
2.2.2 討論 28
2.3 如何從表中獲取數據 30
2.3.1 解決方案 30
2.3.2 討論 32
2.4 如何解決SQL查詢中的錯誤 33
2.4.1 解決方案 33
2.4.2 討論 35
2.5 如何向數據庫中添加或修改數據 35
2.5.1 解決方案 36
2.5.2 討論 37
2.6 如何保護Web站點免受SQL注入攻擊 37
2.6.1 解決方案 38
2.6.2 討論 39
2.7 如何創建靈活的SQL語句 39
2.7.1 解決方案 39
2.7.2 討論 40
2.8 如何獲得受影響的行數 41
2.9 如何獲得一個新插入行的自動增加字段 43
2.9.1 解決方案 43
2.9.2 討論 44
2.10 如何搜索表 44
2.10.1 解決方案 44
2.10.2 討論 45
2.11 如何進行事務處理 45
2.11.1 解決方案 45
2.11.2 討論 46
2.12 如何利用PDO使用存儲過程 46
2.12.1 解決方案 47
2.12.2 討論 48
2.13 如何備份數據庫 48
2.13.1 解決方案 48
2.13.2 討論 50
2.14 小結 53
第3章 字符串 54
3.1 如何安全地輸出字符串 55
3.2 如何保留格式 57
3.3 如何從文本中剝離HTML標記 58
3.3.1 解決方案 58
3.3.2 討論 58
3.4 如何強制文本在一定數量的字符后折行顯示 59
3.5 如何執行高級搜索和替換操作 59
3.6 如何將文本打散為行數組 60
3.6.1 解決方案 61
3.6.2 討論 61
3.7 如何從文本中移除空白內容 62
3.8 如何輸出格式化文本 62
3.9 如何驗證提交的數據 63
3.9.1 解決方案 63
3.9.2 討論 66
3.10 小結 66
第4章 日期和時間 67
4.1 如何使用UNIX時間戳 68
4.1.1 解決方案 68
4.1.2 討論 68
4.2 如何獲得當前日期 69
4.2.1 解決方案 69
4.2.2 討論 69
4.3 如何知道是星期幾 70
4.4 如何獲得一個月份的天數 71
4.5 如何創建一個日歷 71
4.6 如何在MySQL中存儲日期 75
4.6.1 解決方案 76
4.6.2 討論 76
4.7 如何使用MySQL時間戳 76
4.8 如何使用MySQL執行日期計算 78
4.9 小結 79
第5章 表單、表格和漂亮整潔的URL 80
5.1 如何使用PHP建立HTML表單 81
5.2 如何在表格中顯示數據 88
5.3 如何在排序表中顯示數據 90
5.4 如何創建自定義數據柵格 93
5.5 如何在PHP中建立“漂亮整潔的”URL 97
5.5.1 解決方案 97
5.5.2 討論 101
5.6 小結 101
第6章 文件操作 102
6.1 如何讀取本地文件 102
6.1.1 解決方案 103
6.1.2 討論 105
6.2 如何使用文件句柄 105
6.2.1 解決方案 105
6.2.2 討論 107
6.3 如何修改本地文件 107
6.3.1 解決方案 107
6.3.2 討論 108
6.4 如何訪問本地文件的有關信息 108
6.4.1 解決方案 108
6.4.2 討論 110
6.5 如何使用PHP檢查目錄 111
6.6 如何在線顯示PHP源代碼 112
6.6.1 解決方案 112
6.6.2 討論 113
6.7 如何在文件中存儲配置信息 113
6.7.1 解決方案 113
6.7.2 討論 114
6.8 如何訪問遠程服務器上的文件 115
6.8.1 解決方案 115
6.8.2 討論 115
6.9 如何在PHP中使用FTP 116
6.9.1 解決方案 116
6.9.2 討論 118
6.10 如何使用PHP管理文件下載 118
6.10.1 解決方案 118
6.10.2 討論 119
6.11 如何使用PHP創建壓縮的ZIP/TAR文件 119
6.12 如何使用PHP 5中的標準PHP庫操作文件 121
6.12.1 解決方案 121
6.12.2 討論 122
6.13 小結 123
第7章 電子郵件 124
7.1 如何發送一封簡單的電子郵件 124
7.1.1 解決方案 124
7.1.2 討論 125
7.2 如何簡化復雜電子郵件的生成 126
7.2.1 解決方案 126
7.2.2 討論 127
7.3 如何為消息添加附件 127
7.3.1 解決方案 127
7.3.2 討論 128
7.4 如何發送HTML郵件 129
7.5 如何將消息郵寄至一組人員 130
7.5.1 解決方案 131
7.5.2 討論 132
7.6 如何使用PHP處理到達的郵件 132
7.6.1 解決方案 132
7.6.2 討論 133
7.7 如何保護站點免受電子郵件注入攻擊 134
7.7.1 解決方案 135
7.7.2 討論 135
7.8 小結 136
第8章 圖像 137
8.1 如何指定正確的圖像MIME類型 137
8.2 如何創建縮略圖 138
8.3 如何在不拉伸圖像的情況下調整其大小 140
8.4 如何構建一個簡單的縮略圖藝術庫 149
8.5 如何從圖像中提取EXIF信息 151
8.6 如何為圖像增加水印 153
8.7 如何使用PHP顯示圖表和圖形 155
8.7.1 解決方案 155
8.7.2 討論 161
8.8 如何防止圖像盜鏈 161
8.9 如何創建只能人工驗證的圖像 163
8.9.1 解決方案 164
8.9.2 討論 164
8.10 小結 164
第9章 錯誤處理 166
9.1 PHP報告哪些錯誤級別 167
9.2 PHP為錯誤處理提供哪些內置設置 167
9.3 如何觸發PHP錯誤 168
9.3.1 解決方案 168
9.3.2 討論 168
9.4 如何使用PHP實現自定義錯誤處理器 169
9.4.1 解決方案 169
9.4.2 討論 172
9.5 如何記錄和報告錯誤 172
9.6 如何使用PHP異常進行錯誤處理 173
9.6.1 解決方案 173
9.6.2 討論 174
9.7 如何創建一個自定義異常類 176
9.7.1 解決方案 176
9.7.2 討論 177
9.8 如何用PHP實現一個自定義異常處理器 180
9.8.1 解決方案 180
9.8.2 討論 180
9.9 如何像處理異常一樣處理PHP錯誤 182
9.9.1 解決方案 182
9.9.2 討論 182
9.10 如何恰當地顯示錯誤和異常 182
9.10.1 解決方案 183
9.10.2 討論 185
9.11 如何在發生錯誤時將用戶重定向到另一個頁面 185
9.11.1 解決方案 185
9.11.2 討論 187
9.12 小結 187
第10章 訪問控制 188
10.1 如何使用HTTP認證 189
10.1.1 解決方案 189
10.1.2 討論 191
10.2 如何使用會話 193
10.2.1 解決方案 194
10.2.2 討論 194
10.3 如何創建一個會話類 196
10.4 如何創建一個類來控制對站點部分的訪問 197
10.4.1 解決方案 197
10.4.2 討論 206
10.5 如何建立一個注冊系統 207
10.5.1 解決方案 207
10.5.2 討論 223
10.6 如何處理那些忘記口令的成員 224
10.7 如何讓用戶更改他們的口令 233
10.7.1 解決方案 233
10.7.2 討論 238
10.8 如何建立一個權限系統 239
10.8.1 解決方案 239
10.8.2 討論 249
10.9 如何在數據庫中存儲會話 249
10.10 小結 257
第11章 緩存 258
11.1 如何阻止網絡瀏覽器緩存頁面 259
11.1.1 解決方案 259
11.1.2 討論 260
11.2 如何控制客戶端緩存 260
11.2.1 解決方案 261
11.2.2 討論 263
11.3 如何在瀏覽器中檢查HTTP頭 263
11.4 如何使用IE緩存文件下載 264
11.5 如何將輸出緩沖用于服務器端緩存 264
11.5.1 解決方案 265
11.5.2 討論 266
11.6 如何只緩存頁面中不常改變的部件 267
11.6.1 解決方案 267
11.6.2 討論 270
11.7 如何將PEAR::Cache_Lite用于服務器端緩存 270
11.8 Cache_Lite支持什么樣的配置選項 273
11.9 如何清空Cache_Lite緩存 275
11.9.1 解決方案 275
11.9.2 討論 275
11.10 如何緩存函數調用 275
11.11 本章小結 277
第12章 XML和Web service 278
12.1 什么樣的XML技術可用于PHP 5 278
12.2 為什么使用PHP的XML擴展,而非PHP字符串函數 279
12.2.1 解決方案 279
12.2.2 討論 280
12.3 如何解析RSS頻道 280
12.3.1 解決方案 280
12.3.2 討論 284
12.4 如何生成RSS頻道 285
12.4.1 解決方案 285
12.4.2 討論 288
12.5 如何在XML中搜索一個節點或者內容 288
12.5.1 解決方案 289
12.5.2 討論 289
12.6 如何能夠使用XML-RPC Web service 290
12.7 如何實現我自己的XML-RPC Webservice 293
12.8 如何能夠使用SOAP Web service 297
12.8.1 解決方案 297
12.8.2 討論 298
12.9 如何能夠實現SOAP Web service 298
12.9.1 解決方案 298
12.9.2 討論 300
12.10 如何能夠使用REST服務 300
12.11 如何能夠實現REST服務 305
12.11.1 解決方案 305
12.11.2 討論 306
12.12 本章小結 306
第13章 最佳實踐 308
13.1 如何跟蹤項目代碼的版本 308
13.1.1 解決方案 309
13.1.2 討論 309
13.2 如何維護單個代碼庫的多個版本 310
13.2.1 解決方案 310
13.2.2 討論 311
13.3 如何編寫分布式代碼 312
13.3.1 解決方案 312
13.3.2 討論 317
13.4 如何為代碼編纂說明文檔以作自己或其他人的后續參考 317
13.4.1 解決方案 317
13.4.2 討論 319
13.5 如何確保代碼將來的變動不會破壞當前的功能 321
13.5.1 解決方案 321
13.5.2 討論 327
13.6 如何判別還有什么尚待測試 328
13.7 我已經復查了一些舊的代碼,發現它并不合意,該如何讓其變得更好呢 330
13.7.1 解決方案 330
13.7.2 討論 331
13.8 如何安全地部署代碼 331
13.8.1 解決方案 331
13.8.2 討論 332
13.9 本章小結 332
附錄A PHP配置 334
A.1 配置機制 334
A.2 關鍵的安全性和可移植性設置 335
A.3 包含和執行設置 335
A.4 與錯誤相關的設置 337
A.5 其他設置 337
附錄B 主機提供商檢查清單 339
B.1 一般問題 339
B.1.1 主機支持Linux和Apache嗎 339
B.1.2 主機提供服務器的SSH訪問嗎 339
B.1.3 主機是一個分銷商嗎,或者,他自己維護服務器嗎 340
B.1.4 主機“過載”服務器能夠到什么程度 340
B.1.5 主機提供商關于從命令行運行腳本和程序的政策是什么 340
B.1.6 主機提供定時訪問這種允許安排批量任務的Unix實用程序嗎 340
B.2 和PHP相關的問題 340
B.2.1 能夠在實際上被分配到的服務器中看到phpinfo的輸出嗎 340
B.2.2 PHP是作為一個Apache組件安裝的嗎(而非CGI變種) 340
B.2.3 Apache的settingAllowOverride被設置為Options或者All了嗎 341
B.2.4 PHP的安全模式禁用了嗎 341
B.2.5 檢查主機的升級政策 341
B.2.6 詢問安裝的PHP擴展列表 341
B.2.7 可從命令行中使用PHP嗎 341
B.2.8 主機提供商對PHP的理解程度如何 341
附錄C 安全檢查列表 342
C.1 十大安全脆弱性 342
C.1.1 跨站腳本(XSS) 342
C.1.2 注入攻擊 343
C.1.3 惡意文件執行 343
C.1.4 不安全的直接對象引用 344
C.1.5 跨站請求偽造(CSRF) 344
C.1.6 信息泄露和錯誤處理不當 345
C.1.7 認證和會話管理不完善 345
C.1.8 不安全的密碼存儲 346
C.1.9 不安全的通信 346
C.1.10 限制URL訪問失敗 346
附錄D 使用PEAR 347
D.1 安裝PEAR 348
D.2 PEAR包管理器 350
D.3 手動安裝PEAR包 351
D.4 PEAR的供選方案 351
- PLC控制系統的設計與維護 [李敏 鹿業勃 許洪龍]
- 交直流調速控制系統調試與維護 [主編 梁強 邱陽 許洪龍]
- 微型計算機組裝與維護(第二版) [主編 柳 青 陳孟祥]
- 網站建設與維護 [主編 蔣永叢 柏杏麗]
- 局域網組建與維護 [宋志秋 金忠偉]
- 計算機組裝與維護 [劉媛媛 魯立]
- 計算機組裝與維護(第三版) [錢 鋒]
- 計算機組裝與維護 [陳桂生 宋風忠]
- 計算機組裝與維護項目實訓教程 [余橋偉 胡振]
- 計算機故障檢測與維護 [李敬川]
- 微型計算機組裝與維護實用教程 [主 編 王際川 周永福]
- 計算機應用技能基礎(Windows 7+Office 2010+維護維修基礎) [秦洪英 賴 娟]
- 自動化生產線運行與維護 [陳萌 金龍國]
- 中小型網絡安全管理與維護 [姚奇富 副主編 馬華林]
- 計算機組裝與維護能力標準實訓教程 [李騰 危光輝]
- 動態網站設計制作與維護 [主編 史桂紅 楊正校]
- 計算機及網絡維護技術 [唐偉 主編]
- 計算機組裝與維護(第二版) [錢鋒 丁亞明 主 編 ]
- 局域網組建與維護 [何曙輝 主 編]
- SQL Server 2005數據庫實踐教程——管理與維護篇 [錢哨 張繼紅 陳小全]
- 網絡管理與維護技術 [主編 蘇英如]
- 《電腦編程技巧與維護》2009年合訂本(精華版) [《電腦編程技巧與維護》雜志社 ]
- 計算機外部設備使用與維護 [朱定善 陳殊]
- 計算機系統組裝與維護技術 [鄧志華 主編 王文劍 副主編]
- 現代辦公設備的使用與維護 [韓雪濤 韓廣興 吳瑛 等編著]
- 微型計算機組裝與維護 [佟偉光 楊慶林 趙忠誠 白琳 等]
- 微型計算機組裝與維護實訓教程 [楊尚森 等主編]
- Visual Basic 2005編程技巧大全 [羅斌 等編著]
- 電腦組裝與維護零距離 [高志清 主編]
- 計算機組裝與維護實訓教程 [李遠敏 主編]