PHP经典实例(第二版)
PHP经典实例(第二版)
David Sklar, Adam Trachtenberg
李松峰, 秦绪文, 李丽 译
出版时间:2009年09月
页数:816
PHP经典实例(第二版)能够为您节省宝贵的Web开发时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解。
今天,用PHP开发的2000万个网站充分表明,PHP已经成为一门最流行的脚本语言。本书将PHP的特性与经典实例丛书的独特形式组合到一起,足以帮您成功地构建跨浏览器的Web应用程序。在这个修订版中,您可以更加方便地找到各种编程问题的解决方案,本书中内容涵盖了:
* 表单处理
* Session管理
* 数据库交互
* 使用Web服务
从初学者常见的问题到高级Web编程技术,这本包含了丰富的、具有实际应用价值的实例图书,可以满足使用PHP生成动态Web内容的任何人的需要。书中的每个实例都细致地讨论了所提供解决方案背后的逻辑和思想,用源自PHP专家的洞察力帮你轻松地掌握这门语言。书中更新了PHP5的有关内容,并详细地解释了如何使用新增的语言特性,比如面向对象能力的巨大改进和新的PDO数据访问扩展等。书中特别增加了有关类和对象的部分,包含了以下基本内容:
* 处理XML
* 与JavaScript交互
* 用PHP构建Web 服务
* 使用SOAP和REST架构
《PHP经典实例(第二版)》中超过250个实例,为你每天都要面对的诸多问题提供了足够丰富的解决方案。而且,每个实例的讨论部分都浸透着对每个PHP开发人员极为有益的理念。
David Sklar是Ning的一名软件开发人员。在1996年发现PHP能够满足他编写Web编程需要的时候,他创建了PX(http://px.sklar.com),这是一个可以让PHP用户交换程序的场所。此外,他还是《Learning PHP5》(O'Reilly)和《Essential PHP Tools》(Apress)的作者。
Adam Trachtenberg是eBay的一名技术讲师,也是《Upgrading to PHP5》(O'Reilly)的作者。他经常会在O'Reilly Conference和LinuxWorld上发表演讲。他还拥有哥伦比亚大学商学院的MBA学位。
“这本书中的每个实例都自成一体。多数情况下,我都能从中找到符合实际需要的例子”
——Edmond Lau, Slashdot.org
  1. 前言
  2. 第1章 字符串
  3. 1.0 概述
  4. 1.1 访问子字符串
  5. 1.2 提取子字符串
  6. 1.3 替换子字符串
  7. 1.4 逐字节处理字符串
  8. 1.5 按字或按字节来反转字符串
  9. 1.6 扩展和压缩制表符
  10. 1.7 控制大小写
  11. 1.8 在字符串中插入函数和表达式
  12. 1.9 删除字符串两端的空白符
  13. 1.10 生成逗号分隔的数据
  14. 1.11 解析逗号分隔的数据
  15. 1.12 生成字段宽度固定的数据记录
  16. 1.13 解析字段宽度固定的数据记录
  17. 1.14 分离字符串
  18. 1.15 使文本在特定长度处自动换行
  19. 1.16 在字符串中存储二进制数据
  20. 1.17 编程:可下载的CSV文件
  21. 第2章 数字
  22. 2.0 概述
  23. 2.1 检查变量中是否包含有效的数字
  24. 2.2 比较浮点型数字
  25. 2.3 对浮点型数取整
  26. 2.4 操纵一系列连续的整数
  27. 2.5 在一个范围内生成随机数
  28. 2.6 生成有偏随机数
  29. 2.7 取对数
  30. 2.8 计算指数
  31. 2.9 格式化数字
  32. 2.10 格式化货币值
  33. 2.11 正确地打印复数
  34. 2.12 计算三角函数
  35. 2.13 用度数而不是弧度来度量三角
  36. 2.14 处理极大数或极小数
  37. 2.15 在不同进制间转换
  38. 2.16 非十进制数的计算
  39. 2.17 计算球面坐标系中两点间的距离
  40. 第3章 日期和时间
  41. 3.0 概述
  42. 3.1 查出当前的日期和时间
  43. 3.2 将时间和日期部件转换为纪元时间戳
  44. 3.3 将纪元时间戳转换为时间和日期部件
  45. 3.4 以特定的格式打印日期和时间
  46. 3.5 计算两个日期间的时间差
  47. 3.6 用儒略日计算两个日期间的时间差
  48. 3.7 找到周、月或者年中的某一天
  49. 3.8 验证日期
  50. 3.9 从字符串中解析日期和时间
  51. 3.10 对日期进行加、减运算
  52. 3.11 根据时区计算时间
  53. 3.12 处理夏令时
  54. 3.13 生成高精度的时间
  55. 3.14 生成时间范围
  56. 3.15 使用非公历纪年
  57. 3.16 使用纪元时间戳范围之外的日期
  58. 3.17 编程:日历
  59. 第4章 数组
  60. 4.0 概述
  61. 4.1 定义一个起始元素不为零的数组
  62. 4.2 用数组中的一个键保存多个元素
  63. 4.3 用一个整数范围来初始化数组
  64. 4.4 遍历数组
  65. 4.5 从数组中删除元素
  66. 4.6 改变数组大小
  67. 4.7 将一个数组追加到另一个数组
  68. 4.8 把数组转换成字符串
  69. 4.9 使用逗号来打印数组
  70. 4.10 检查数组中是否存在某个键
  71. 4.11 检查数组中是否包含某个元素
  72. 4.12 确定值在数组中的位置
  73. 4.13 确定通过某种测试的元素
  74. 4.14 确定数组中经计算后的最大或最小元素
  75. 4.15 反转数组
  76. 4.16 数组排序
  77. 4.17 根据可计算的字段对数组进行排序
  78. 4.18 对多个数组进行排序
  79. 4.19 使用方法而不是函数来对数组进行排序
  80. 4.20 对数组进行随机化处理
  81. 4.21 删除数组中重复的元素
  82. 4.22 对数组中的每个元素都应用一个函数
  83. 4.23 计算两个数组的并集、交集和差集
  84. 4.24 创建一个类数组对象
  85. 4.25 编程:输出水平居中的HTML表格
  86. 第5章 变量
  87. 5.0 概述
  88. 5.1 消除 == 和 = 的困扰
  89. 5.2 为变量设定默认值
  90. 5.3 不使用临时变量而实现变量值的交换
  91. 5.4 动态创建变量名
  92. 5.5 使用静态变量
  93. 5.6 在进程间共享变量
  94. 5.7 把复杂的数据类型压缩到一个字符串中
  95. 5.8 将变量内容转存为字符串
  96. 第6章 函数
  97. 6.0 概述
  98. 6.1 访问函数的参数
  99. 6.2 为函数的参数设定默认值
  100. 6.3 传递引用
  101. 6.4 使用命名的参数
  102. 6.5 创建可以接受个数可变的参数的函数
  103. 6.6 返回变量的引用
  104. 6.7 返回多个值
  105. 6.8 跳跃选择返回的值
  106. 6.9 返回失败信息
  107. 6.10 调用可变函数
  108. 6.11 在函数内部访问全局变量
  109. 6.12 创建动态函数
  110. 第7章 类和对象
  111. 7.0 概述
  112. 7.1 技巧化对象
  113. 7.2 定义对象构造器
  114. 7.3 定义对象解构器
  115. 7.4 实现访问控制
  116. 7.5 防止修改类和方法
  117. 7.6 定义字符串化的对象
  118. 7.7 定义接口
  119. 7.8 创建抽象的基类
  120. 7.9 传递对象引用
  121. 7.10 克隆对象
  122. 7.11 重要的属性访问
  123. 7.12 调用由另一个方法返回对象的方法
  124. 7.13 聚合对象
  125. 7.14 访问被覆盖的方法
  126. 7.15 使用方法的多态性
  127. 7.16 定义类常量
  128. 7.17 定义静态属性和方法
  129. 7.18 控制对象的序列化
  130. 7.19 分析对象
  131. 7.20 检查某对象是不是一个特定类的技巧
  132. 7.21 在对象技巧化期间自动地加载类文件
  133. 7.22 动态技巧化一个对象
  134. 7.23 编程:whereis
  135. 第8章 Web基础
  136. 8.0 概述
  137. 8.1 设置 Cookie
  138. 8.2 读取Cookie的值
  139. 8.3 删除Cookie
  140. 8.4 重定向到一个不同的位置
  141. 8.5 检测不同的浏览器
  142. 8.6 建立查询字符串
  143. 8.7 读取Post请求的主体
  144. 8.8 生成具有交替样式的HTML表格
  145. 8.9 使用HTTP的基本或摘要认证
  146. 8.10 使用Cookie认证
  147. 8.11 把输出冲刷(Flushing)到浏览器
  148. 8.12 缓冲到浏览器的输出
  149. 8.13 压缩Web输出
  150. 8.14 读取环境变量
  151. 8.15 设置环境变量
  152. 8.16 在Apache服务器内部通信
  153. 8.17 编程:网站账户(反)激活
  154. 8.18 编程:小型Wiki
  155. 第9章 表单
  156. 9.0 概述
  157. 9.1 处理表单的输入
  158. 9.2 验证表单输入:必填字段
  159. 9.3 验证表单输入:数字
  160. 9.4 验证表单输入:电子邮件地址
  161. 9.5 验证表单输入:下拉菜单
  162. 9.6 验证表单输入:单选按钮
  163. 9.7 验证表单输入:复选框
  164. 9.8 验证表单输入:日期和时间
  165. 9.9 验证表单输入:信用卡
  166. 9.10 预防跨站点脚本
  167. 9.11 处理多页表单
  168. 9.12 重新显示带有内置错误提示的表单
  169. 9.13 防止多次提交同一表单
  170. 9.14 处理上传文件
  171. 9.15 防止全局变量注射
  172. 9.16 处理名字中带句点的远程变量
  173. 9.17 使用带有多个选项的表单元素
  174. 9.18 基于当前日期创建下拉菜单
  175. 第10章 访问数据库
  176. 10.0 概述
  177. 10.1 使用DBM数据库
  178. 10.2 使用SQLite数据库
  179. 10.3 连接到SQL数据库
  180. 10.4 查询一个SQL数据库
  181. 10.5 不通过循环抽取记录
  182. 10.6 修改SQL数据库中的数据
  183. 10.7 有效地重复查询
  184. 10.8 确定查询返回的行数
  185. 10.9 转义引号
  186. 10.10 记录调试信息和错误
  187. 10.11 创建唯一的标识符
  188. 10.12 以程序化的方式建立查询
  189. 10.13 为连续的记录生成分页链接
  190. 10.14 缓存查询和结果
  191. 10.15 在程序中任何地方都能访问数据库连接
  192. 10.16 编程:存储链式(Threaded)留言板
  193. 第11章 Session和数据保持
  194. 11.0 概述
  195. 11.1 使用Session跟踪
  196. 11.2 预防Session劫持
  197. 11.3 预防Session定置
  198. 11.4 在数据库中保存Session
  199. 11.5 在共享内存中保存Session
  200. 11.6 在共享内存中保存独立数据
  201. 11.7 在摘要表中缓存计算结果
  202. 第12章 XML
  203. 12.0 概述
  204. 12.1 生成XML为字符串
  205. 12.2 通过DOM生成XML
  206. 12.3 解析基本的XML文档
  207. 12.4 解析复杂的XML文档
  208. 12.5 解析大型XML文档
  209. 12.6 用XPath来提取信息
  210. 12.7 通过XSLT转换XML
  211. 12.8 在PHP中设置XSLT参数
  212. 12.9 在XSLT样式表中调用PHP函数
  213. 12.10 验证XML文档
  214. 12.11 处理内容编码
  215. 12.12 读取RSS和Atom源
  216. 12.13 生成RSS源
  217. 12.14 生成Atom源
  218. 第13章 Web自动化
  219. 13.0 概述
  220. 13.1 通过Get方法定位URL
  221. 13.2 通过Post方法定位URL
  222. 13.3 通过Cookie定位URL
  223. 13.4 通过任意头部信息定位URL
  224. 13.5 通过任意方法定位URL
  225. 13.6 通过超时定位URL
  226. 13.7 定位HTTPS URL
  227. 13.8 调试原始HTTP数据交换
  228. 13.9 标记网页
  229. 13.10 清理不完整或非标准的HTML
  230. 13.11 从HTML文件中提取链接
  231. 13.12 将纯文本转换为HTML
  232. 13.13 将HTML转换为文本
  233. 13.14 删除HTML和PHP标签
  234. 13.15 响应Ajax请求
  235. 13.16 与JavaScript应用集成
  236. 13.17 编程:查找失效的链接
  237. 13.18 编程:查找新链接
  238. 第14章 消费Web服务
  239. 14.0 概述
  240. 14.1 调用REST方法
  241. 14.2 通过WSDL调用SOAP的方法
  242. 14.3 不通过WSDL调用SOAP的方法
  243. 14.4 调试SOAP请求
  244. 14.5 使用复杂的SOAP类型
  245. 14.6 设置SOAP类型
  246. 14.7 使用SOAP头部
  247. 14.8 通过SOAP实现认证
  248. 14.9 重新定义终点
  249. 14.10 捕捉SOAP故障
  250. 14.11 将XML模式数据类型映射为PHP类
  251. 14.12 调用XML-RPC方法
  252. 14.13 通过XML-RPC实现验证
  253. 第15章 建立Web服务
  254. 15.0 概述
  255. 15.1 以REST方法提供服务
  256. 15.2 以SOAP方法提供服务
  257. 15.3 在SOAP方法中接受参数
  258. 15.4 自动生成WSDL文件
  259. 15.5 抛出SOAP故障
  260. 15.6 处理SOAP头部信息
  261. 15.7 生成SOAP头部信息
  262. 15.8 通过SOAP实现验证
  263. 15.9 以XML-RPC方法提供服务
  264. 第16章 互联网服务
  265. 16.0 概述
  266. 16.1 发送电子邮件
  267. 16.2 发送MIME邮件
  268. 16.3 通过IMAP或POP3读取邮件
  269. 16.4 将邮件发表到Usenet新闻组
  270. 16.5 读取Usenet新闻消息
  271. 16.6 通过FTP取得及放置文件
  272. 16.7 通过LDAP找地址
  273. 16.8 通过LDAP进行用户身份验证
  274. 16.9 执行DNS查找
  275. 16.10 检查主机是否处于活动状态
  276. 16.11 获取与域名相关的信息
  277. 第17章 图形
  278. 17.0 概述
  279. 17.1 绘制直线、矩形和多边形
  280. 17.2 绘制弧形、椭圆形和圆形
  281. 17.3 用图案化的线条绘制图形
  282. 17.4 绘制文本
  283. 17.5 绘制居中的文本
  284. 17.6 生成动态图像
  285. 17.7 取得并设置透明颜色
  286. 17.8 读取EXIF数据
  287. 17.9 安全地提供图像
  288. 17.10 编程:根据投票结果生成条形图
  289. 第18章 安全和加密
  290. 18.0 概述
  291. 18.1 预防Session定置
  292. 18.2 防止表单提交骗术
  293. 18.3 确保过滤输入
  294. 18.4 避免跨站点脚本
  295. 18.5 避免SQL注入
  296. 18.6 将密码置于站点文件外部
  297. 18.7 存储密码
  298. 18.8 处理遗忘的密码
  299. 18.9 使用散列码验证数据
  300. 18.10 加密和解密数据
  301. 18.11 把加密的数据保存到文件或数据库
  302. 18.12 在网站之间共享加密数据
  303. 18.13 检测SSL
  304. 18.14 通过GPG加密电子邮件
  305. 第19章 国际化和本地化
  306. 19.0 概述
  307. 19.1 列举有效的地区
  308. 19.2 使用特定的地区
  309. 19.3 设置默认地区
  310. 19.4 本地化文本消息
  311. 19.5 本地化日期和时间
  312. 19.6 本地化货币值
  313. 19.7 本地化图像
  314. 19.8 本地化包含文件
  315. 19.9 管理本地化资源
  316. 19.10 使用 gettext
  317. 19.11 设置传出数据的字符编码
  318. 19.12 设置输入数据的字符编码
  319. 19.13 操纵UTF-8编码的文本
  320. 第20章 错误处理,故障排除和测试
  321. 20.0 概述
  322. 20.1 发现并修复解析错误
  323. 20.2 创建自己的异常类
  324. 20.3 输出栈轨迹
  325. 20.4 读取配置变量
  326. 20.5 设置配置变量
  327. 20.6 对用户隐藏错误信息
  328. 20.7 调谐错误处理
  329. 20.8 使用自定义错误处理函数
  330. 20.9 记录错误
  331. 20.10 消除“headers already sent”错误
  332. 20.11 记录调试信息
  333. 20.12 使用扩展的调试程序
  334. 20.13 编写单元测试
  335. 20.14 编写单元测试套件
  336. 20.15 对网页应用单元测试
  337. 20.16 设置测试环境
  338. 第21章 性能调谐和负载测试
  339. 21.0 概述
  340. 21.1 计算函数执行时间
  341. 21.2 计算程序执行时间
  342. 21.3 通过排错扩展进行代码剖析
  343. 21.4 对网站进行压力测试
  344. 21.5 避免使用正则表达式
  345. 21.6 使用加速器
  346. 第22章 正则表达式
  347. 22.0 概述
  348. 22.1 从ereg转换到preg
  349. 22.2 匹配单词
  350. 22.3 查找第n个匹配项
  351. 22.4 选择进行贪婪或非贪婪匹配
  352. 22.5 找到一个文件中与模式匹配的所有行
  353. 22.6 在HTML标签中捕获文本
  354. 22.7 阻止对子模式匹配文本的捕获
  355. 22.8 转义正则表达式中的特殊字符
  356. 22.9 通过模式分隔符读取记录
  357. 22.10 在正则表达式中使用PHP函数
  358. 第23章 文件
  359. 23.0 概述
  360. 23.1 创建或打开一个本地文件
  361. 23.2 创建一个临时文件
  362. 23.3 打开远程文件
  363. 23.4 从标准输入中读取数据
  364. 23.5 把文件内容读取到字符串中
  365. 23.6 计算文件中的行数、段数或记录数
  366. 23.7 处理文件中的每一个词
  367. 23.8 从文件中随机提取一行
  368. 23.9 随机化处理文件中的所有行
  369. 23.10 处理长度可变的文本字段
  370. 23.11 读取配置文件
  371. 23.12 不通过临时文件而实现对文件的修改
  372. 23.13 将缓冲内容刷出到一个文件中
  373. 23.14 写入标准输出
  374. 23.15 同时写入到多个文件句柄
  375. 23.16 转义Shell中的元字符串
  376. 23.17 向程序传递输入数据
  377. 23.18 从程序中读取标准输出
  378. 23.19 从程序中读取标准错误信息
  379. 23.20 锁定文件
  380. 23.21 读写自定义文件类型
  381. 23.22 读写压缩文件
  382. 第24章 目录
  383. 24.0 概述
  384. 24.1 获取并设置文件时间戳
  385. 24.2 获取文件信息
  386. 24.3 修改文件权限或所有者
  387. 24.4 按其组成部分分割文件名
  388. 24.5 删除文件
  389. 24.6 复制或移动文件
  390. 24.7 处理同一目录中的所有文件
  391. 24.8 生成与模式匹配的文件名列表
  392. 24.9 递归地处理同一目录中的所有文件
  393. 24.10 创建新目录
  394. 24.11 删除目录及其内容
  395. 24.12 编程:Web服务器目录列表
  396. 24.13 编程:网站搜索
  397. 第25章 命令行PHP
  398. 25.0 概述
  399. 25.1 解析程序参数
  400. 25.2 通过getopt解析程序参数
  401. 25.3 读取键盘输入
  402. 25.4 针对输入文件的每一行运行PHP代码
  403. 25.5 读取密码
  404. 25.6 编程:命令解释程序
  405. 第26章 PEAR和PECL
  406. 26.0 概述
  407. 26.1 使用PEAR安装程序
  408. 26.2 查找PEAR包
  409. 26.3 查找有关包的信息
  410. 26.4 安装PEAR包
  411. 26.5 升级PEAR包
  412. 26.6 卸载PEAR包
  413. 26.7 安装PECL包
书名:PHP经典实例(第二版)
译者:李松峰, 秦绪文, 李丽 译
国内出版社:中国电力出版社
出版时间:2009年09月
页数:816
书号:978-7-5083-8608-9
原版书出版商:O'Reilly Media
David Sklar
 
David Sklar是Ning的一名软件架构师,该公司研发了一个用于创建和共享社区应用程序的软件平台。除了《PHP Cookbook》,他还是《Learning PHP 5》(O'Reilly)和《Essential PHP Tools》(Apress)的作者。David经常在各种会议上发表演讲,包括 O'Reilly Open Source Conventioin、O'Reilly Emerging Technology Conference、USENIX和许多PHP会议。他的博客网址是http://www.sklar. com/blog,同时还在维护PX(http://px.sklar.com)—— 他于1996年创建的一个PHP代码的交换网站。David拥有耶鲁大学的计算机科学学位,他住在纽约,擅长骑术,喜欢吃咸烤扇贝,酷爱首都艺术博物馆中18~19世纪的美国家居用品。
 
 
Adam Trachtenberg
 
Adam Trachtenberg是eBay咨询平台(Platform Evangelism)的资深管理者,他在那里向全世界的开发者和商界人士传布eBay平台的理念。在加入eBay之前,Trachtenberg在与他人共同创办的两家公司Student.Com和TVGrid.Com中担任副总裁。在这两家公司任职期间,他领导了网站前、中、后台的设计和开发。Trachtenberg自1997年开始使用PHP,同时也是《Upgrading to PHP 5》的作者和《PHP Cookbook》的合著者 —— 这两本书都由O'Reilly Media出版。他住在加利福尼亚州的旧金山,博客网址是http://www.trachtenberg.com,并拥有哥伦比亚大学的学士和MBA学位。
 
 
本书封面的动物是一只加拉帕哥斯陆鬣蜥(一种产于南美洲和西印度群岛的大蜥蜴),曾经繁盛于加拉帕哥斯群岛(位于厄瓜多尔西部),这种鬣蜥被19世纪初的殖民者们证实味道很鲜美。后来,家畜被引进到这些群岛上,进一步破坏了这些爬行动物的生存环境和食物链。今天,在圣地亚哥(智利首都)岛上鬣蜥已经销声匿迹,而其他岛屿上也只有少数得以幸存下来。
作为南美大陆鬣蜥的远亲,加拉帕哥斯陆鬣蜥能长到三英尺长,雄性鬣蜥大概有30磅重。它们坚韧的黄色鳞甲表面分布着白色、黑色、褐色的斑点,显得“锈迹斑斑”。这些蜥蜴就如同旧时神话中传说的灵异 —— 龙一般,有着长长的尾巴、带利爪的脚和刺状的发冠。不过,事实上它们对人类是无害的。
大陆鬣蜥生活在比较干燥的地区,喜欢早晨出来晒太阳。但是到了中午,它们会跑到仙人掌、石头和树的阴影下乘凉。晚上,为了保存体内热量,它们又会钻到地下的洞穴里睡大觉。
这些爬行动物从不挑食,它们通常以生长缓慢的植物以及灌木为主食,有时也会用一些掉在地上的果子和仙人掌树充饥。这些植物为它们提供了大部分必需的水分,然而如果有可能的话,它们也会喝上一些新鲜的水作为补给。
根据体型大小,鬣蜥的成熟期在8~15岁之间。它们会在一段时期内聚集、交配,而这个交配期在每个岛上都不一样。交配之后,雌性鬣蜥会迁徙到适宜的地区安家。通常,雌性鬣蜥会在洞中产下2~20枚蛋。产蛋之后,它们会继续在封闭的洞口附近守护,以防其他雌性鬣蜥也到同一个洞穴中产蛋。
幼鬣蜥会在85~110天之后孵化出世,还要再花上大约一周的时间才能从洞中破土而出。正常情况下,如果孵化成功,而且出生第一年食物充足,没有诸如鹰、白鹭、苍鹭以及蛇等当地食肉动物的侵袭,它们就有可能活到超过60岁。事实上,由于野猫等食肉动物的捕食,这些幼鬣蜥必须确保幸存下来并长到至少3~4岁才能使自己长到野猫们无法捕食的个头。