前言 1
第1章 字符串 8
1.0 引言 8
1.1 访问子串 12
1.2 抽取子串 13
1.3 替换子串 14
1.4 逐字节处理字符串 16
1.5 按单词或字节反转字符串 18
1.6 生成随机字符串 19
1.7 扩展和压缩制表符 20
1.8 控制大小写 22
1.9 字符串中的内插函数和表达式 24
1.10 去除字符串首尾的空格 25
1.11 生成逗号分隔数据 26
1.12 解析逗号分隔数据 28
1.13 生成固定宽度字段数据记录 29
1.14 解析固定宽度字段数据记录 30
1.15 分解字符串 33
1.16 使文本在指定行长度自动换行 35
1.17 字符串中存储二进制数据 36
1.18 程序:可下载的CSV文件 39
第2章 数字 42
2.0 引言 42
2.1 检查变量是否包含一个合法数字 43
2.2 比较浮点数 44
2.3 浮点数舍入 45
2.4 处理一系列整数 47
2.5 在指定范围内生成随机数 49
2.6 生成可预测的随机数 50
2.7 生成偏随机数 51
2.8 取对数 53
2.9 计算指数 53
2.10 格式化数字 54
2.11 格式化货币值 56
2.12 正确输出复数 57
2.13 讨论三角函数 58
2.14 对度数而不是弧度数完成三角运算 59
2.15 处理非常大或非常小的数 60
2.16 转换进制 62
2.17 使用非十进制数计算 63
2.18 找出两个位置之间的距离 65
第3章 日期和时间 67
3.0 引言 67
3.1 查找当前日期和时间 69
3.2 将时间和日期部分转换为纪元时间戳 72
3.3 将纪元时间戳转换为时间和日期部分 74
3.4 以指定格式输出日期或时间 74
3.5 计算两个日期之差 78
3.6 查找一周、月或年中某一天 80
3.7 验证日期 82
3.8 从字符串解析日期和时间 83
3.9 日期加减 86
3.10 使用时区和日光节省时间来计算时间 87
3.11 生成高精度时间 88
3.12 生成时间范围 90
3.13 使用非公历日历 91
3.14 程序:日历 94
第4章 数组 99
4.0 引言 99
4.1 指定并非从元素0开始的数组 102
4.2 数组中每个键存储多个元素 103
4.3 数组初始化为一个整数范围 105
4.4 迭代处理数组 106
4.5 从数组删除元素 108
4.6 改变数组大小 110
4.7 将数组追加到另一个数组 113
4.8 将数组转换为字符串 114
4.9 带逗号打印数组 116
4.10 检查一个键是否在数组中 117
4.11 检查一个元素是否在数组中 118
4.12 查找一个值在数组中的位置 119
4.13 查找通过某个测试的元素 120
4.14 查找数组中最大值或最小值元素 122
4.15 反转数组 123
4.16 对数组排序 124
4.17 根据一个可计算字段对数组排序 125
4.18 多个数组的排序 127
4.19 使用方法而不是函数对数组排序 129
4.20 随机调整数组 130
4.21 删除数组中重复的元素 130
4.22 对数组中的各个元素应用一个函数 131
4.23 查找两个数组的并集、交集或差集 134
4.24 高效迭代处理大型数据集 136
4.25 使用数组语法访问对象 138
第5章 变量 142
5.0 引言 142
5.1 避免混淆==和= 144
5.2 建立一个默认值 145
5.3 交换值而不使用临时变量 146
5.4 创建动态变量名 147
5.5 跨函数调用持久存储局部变量的值 148
5.6 进程间共享变量 150
5.7 将复杂数据类型封装在字符串中 156
5.8 变量内容转储为字符串 158
第6章 函数 163
6.0 引言 163
6.1 访问函数参数 164
6.2 为函数参数设置默认值 165
6.3 按引用传递值 167
6.4 使用命名参数 168
6.5 强制函数参数的类型 169
6.6 创建参数个数可变的函数 170
6.7 按引用返回值 173
6.8 返回多个值 175
6.9 跳过所选的返回值 176
6.10 返回失败 177
6.11 调用可变函数 178
6.12 在函数中访问全局变量 181
6.13 创建动态函数 182
第7章 类和对象 184
7.0 引言 184
7.1 实例化对象 188
7.2 定义对象构造函数 189
7.3 定义对象析构函数 190
7.4 实现访问控制 191
7.5 防止修改类和方法 194
7.6 定义对象字符串化 195
7.7 要求多个类有类似的行为 196
7.8 创建抽象基类 200
7.9 对象引用赋值 202
7.10 克隆对象 203
7.11 覆盖属性访问 205
7.12 在另一个方法返回的对象上调用方法 209
7.13 聚合对象 211
7.14 访问被覆盖的方法 215
7.15 动态创建方法 216
7.16 使用方法多态 217
7.17 定义类常量 219
7.18 定义静态属性和方法 221
7.19 控制对象串行化 224
7.20 对象自省 226
7.21 检查对象是否是一个特定类的实例 230
7.22 对象实例化时自动加载类文件 232
7.23 动态实例化对象 234
7.24 程序:whereis 235
第8章 Web基础 238
8.0 引言 238
8.1 设置cookie 239
8.2 读取cookie值 241
8.3 删除cookie 241
8.4 构建查询字符串 242
8.5 读取POST请求体 243
8.6 使用HTTP基本或摘要认证 244
8.7 使用cookie认证 248
8.8 读取HTTP首部 251
8.9 写HTTP首部 252
8.10 发送一个特定的HTTP状态码 253
8.11 重定向到不同的位置 254
8.12 浏览器刷新输出 255
8.13 浏览器缓冲输出 256
8.14 压缩Web输出 257
8.15 读取环境变量 258
8.16 设置环境变量 259
8.17 Apache内部通信 260
8.18 将移动浏览器重定向到专为移动设备优化的网站 261
8.19 程序:网站帐户激活(撤销)系统 262
8.20 程序:Tiny Wiki 264
8.21 程序:HTTP Range 267
第9章 表单 276
9.0 引言 276
9.1 处理表单输入 278
9.2 验证表单输入:必填域 280
9.3 验证表单输入:数字 282
9.4 验证表单输入:email地址 283
9.5 验证表单输入:下拉菜单 284
9.6 验证表单输入:单选钮 286
9.7 验证表单输入:复选框 287
9.8 验证表单输入:日期和时间 289
9.9 验证表单输入:信用卡 290
9.10 防止跨站点脚本攻击 291
9.11 处理上传文件 292
9.12 处理多页面表单 295
9.13 重新显示表单并提供内联错误消息 297
9.14 防止多次提交相同的表单 299
9.15 防止全局变量注入 301
9.16 处理变量名中包含点号的远程变量 303
9.17 使用有多个选项的表单元素 304
9.18 根据当前日期创建下拉菜单 305
第10章 数据库访问 307
10.0 引言 307
10.1 使用DBM数据库 309
10.2 使用SQLite数据库 313
10.3 连接SQL数据库 314
10.4 查询SQL数据库 316
10.5 不用循环获取记录行 319
10.6 修改SQL数据库中的数据 319
10.7 高效地重复执行查询 321
10.8 查看查询返回的行数 324
10.9 转义引号 325
10.10 记录调试信息和错误 326
10.11 创建唯一标识符 328
10.12 编程建立查询 330
10.13 为一系列记录建立分页链接 335
10.14 缓存查询和结果 338
10.15 在程序中任意位置访问数据库连接 340
10.16 程序:存储线索留言板 342
10.17 使用Redis 349
第11章 会话和数据持久存储 351
11.0 引言 351
11.1 使用会话跟踪 352
11.2 防止会话劫持 354
11.3 防止会话固定攻击 355
11.4 在Memcached中存储会话 356
11.5 在数据库中存储会话 357
11.6 共享内存中存储任意数据 360
11.7 在摘要表中缓存计算结果 363
第12章 XML 365
12.0 引言 365
12.1 生成XML作为字符串 368
12.2 用DOM生成XML 369
12.3 解析基本XML文档 372
12.4 解析复杂XML文档 375
12.5 解析大型XML文档 377
12.6 使用XPath抽取信息 383
12.7 用XSLT转换XML 386
12.8 从PHP设置XSLT参数 388
12.9 从XSLT样式表调用PHP函数 390
12.10 验证XML文档 393
12.11 处理内容编码 396
12.12 读取RSS和Atom提要 397
12.13 写RSS提要 400
12.14 写Atom提要 402
第13章 Web自动化 407
13.0 引言 407
13.1 标记Web页面 408
13.2 清理有问题或非标准的HTML 410
13.3 从HTML文件抽取链接 413
13.4 纯文本转换为HTML 416
13.5 HTML转换为纯文本 417
13.6 删除HTML和PHP标记 418
13.7 响应Ajax请求 421
13.8 与JavaScript集成 423
13.9 程序:查找过时链接 426
13.10 程序:查找更新链接 428
第14章 使用RESTful API 432
14.0 引言 432
14.1 用GET方法获取URL 433
14.2 用POST方法和表单数据获取URL 437
14.3 用任意方法和POST体获取URL 439
14.4 用Cookie获取URL 441
14.5 使用任意首部获取URL 443
14.6 使用超时获取URL 444
14.7 获取HTTPS URL 446
14.8 调试原始HTTP交换 447
14.9 建立OAuth 1.0请求 451
14.10 建立OAuth 2.0请求 453
第15章 提供RESTful API 457
15.0 引言 457
15.1 提供并路由到一个资源 459
15.2 提供简洁资源路径 463
15.3 提供要读取的资源 464
15.4 创建资源 466
15.5 编辑资源 471
15.6 删除资源 472
15.7 指示错误和失败 474
15.8 支持多个格式 476
第16章 Internet服务 479
16.0 引言 479
16.1 发送邮件 480
16.2 发送MIME邮件 482
16.3 用IMAP或POP3读取邮件 483
16.4 用FTP获取和放置文件 487
16.5 用LDAP查找地址 490
16.6 使用LDAP完成用户认证 492
16.7 完成DNS查找 494
16.8 检查主机是否活动 496
16.9 获得域名的有关信息 498
第17章 图形 501
17.0 引言 501
17.1 绘制直线、矩形和多边形 504
17.2 绘制弧形、椭圆和圆 507
17.3 用花纹线条绘制 509
17.4 绘制文本 510
17.5 绘制居中文本 512
17.6 建立动态图像 515
17.7 获取和设置透明颜色 518
17.8 覆盖水印 519
17.9 创建缩略图 521
17.10 读取EXIF数据 525
17.11 安全地提供图像 526
17.12 程序:由投票结果生成直方图 528
第18章 安全和加密 532
18.0 引言 532
18.1 防止会话固定攻击 533
18.2 防范表单欺骗 534
18.3 确保过滤输入 535
18.4 避免跨站点脚本攻击 536
18.5 消除SQL注入 537
18.6 不在站点文件中存放密码 538
18.7 存储密码 539
18.8 处理丢失的密码 542
18.9 用散列验证数据 544
18.10 加密和解密数据 546
18.11 在文件或数据库中存储加密数据 548
18.12 与其他网站共享加密数据 551
18.13 检测SSL 553
18.14 用GPG加密email 554
第19章 国际化和本地化 556
19.0 引言 556
19.1 确定用户的本地化环境 558
19.2 本地化文本消息 559
19.3 本地化日期和时间 562
19.4 本地化数字 566
19.5 本地化货币值 569
19.6 本地化图像 570
19.7 本地化包含的文件 572
19.8 按本地化环境特定的顺序排序 573
19.9 管理本地化资源 574
19.10 设置发出数据的字符编码 576
19.11 设置接收数据的字符编码 576
19.12 管理UTF-8文本 577
第20章 错误处理 582
20.0 引言 582
20.1 查找和定位解析错误 583
20.2 创建你自己的异常类 585
20.3 打印栈轨迹 588
20.4 读取配置变量 590
20.5 设置配置变量 592
20.6 对用户隐藏错误消息 593
20.7 控制错误处理 594
20.8 使用定制错误处理程序 596
20.9 记录错误 598
20.10 消除“首部已发送”错误 599
20.11 记录调试信息 600
第21章 软件工程 603
21.0 引言 603
21.1 使用调试器扩展 603
21.2 编写单元测试 606
21.3 编写单元测试套件 608
21.4 对Web页面应用单元测试 610
21.5 建立测试环境 611
21.6 使用内置Web服务器 612
第22章 性能调优 615
22.0 引言 615
22.1 使用加速器 616
22.2 计算函数执行时间 617
22.3 按函数计算程序执行时间 618
22.4 按语句计算程序执行时间 620
22.5 按节计算程序执行时间 622
22.6 使用调试器扩展测试性能 624
22.7 对网站进行压力测试 628
22.8 避免正则表达式 629
第23章 正则表达式 631
23.0 引言 631
23.1 ereg切换到preg 635
23.2 匹配单词 637
23.3 查找匹配的第n次出现 638
23.4 选择贪婪或非贪婪匹配 640
23.5 查找文件中与一个模式匹配的所有行 642
23.6 捕获HTML标记中的文本 643
23.7 阻止小括号捕获文本 644
23.8 转义正则表达式中的特殊字符 646
23.9 利用模式分隔符读取记录 647
23.10 正则表达式中使用PHP函数 648
第24章 文件 651
24.0 引言 651
24.1 创建或打开一个本地文件 655
24.2 创建临时文件 656
24.3 打开远程文件 657
24.4 读取标准输入 658
24.5 将文件读入字符串 659
24.6 统计一个文件中的行、段落或记录数 660
24.7 处理文件中的每一个单词 663
24.8 从文件中随机选择一行 665
24.9 随机重排文件中的所有行 665
24.10 处理变长文本字段 666
24.11 读取配置文件 668
24.12 原地修改文件而无需临时文件 670
24.13 刷新输出到文件 671
24.14 写标准输出 672
24.15 同时写多个文件句柄 673
24.16 转义Shell元字符 674
24.17 向程序传递输入 675
24.18 从程序读标准输出 676
24.19 从程序读标准错误输出 678
24.20 锁定文件 679
24.21 读/写定制文件类型 681
24.22 读/写压缩文件 686
第25章 目录 688
25.0 引言 688
25.1 获得和设置文件时间戳 691
25.2 获得文件信息 692
25.3 改变文件权限或所有者 693
25.4 分解文件名 694
25.5 删除文件 696
25.6 复制或移动文件 696
25.7 处理目录中的所有文件 697
25.8 获得与模式匹配的文件名列表 699
25.9 递归处理目录中的所有文件 700
25.10 创建新目录 701
25.11 删除一个目录及其内容 701
25.12 程序:Web服务器目录列表 702
25.13 程序:网站搜索 706
第26章 命令行PHP 710
26.0 引言 710
26.1 解析程序参数 712
26.2 用getopt解析程序参数 713
26.3 从键盘读取 715
26.4 运行输入文件每一行上的PHP代码 717
26.5 读取密码 719
26.6 显示彩色控制台输出 721
26.7 程序:DOM浏览器 722
第27章 包 727
27.0 引言 727
27.1 定义和安装Composer依赖库 729
27.2 查找Composer包 731
27.3 安装Composer包 733
27.4 使用PEAR安装程序 736
27.5 查找PEAR包 739
27.6 查找包的有关信息 740
27.7 安装PEAR包 742
27.8 升级PEAR包 744
27.9 卸载PEAR包 745
27.10 安装PECL包 746