前言 1
第1章 字符串 11
1.0 概述 11
1.1 访问子字符串 15
1.2 提取子字符串 15
1.3 替换子字符串 17
1.4 逐字节处理字符串 19
1.5 按字或按字节来反转字符串 21
1.6 扩展和压缩制表符 22
1.7 控制大小写 24
1.8 在字符串中插入函数和表达式 27
1.9 删除字符串两端的空白符 28
1.10 生成逗号分隔的数据 29
1.11 解析逗号分隔的数据 31
1.12 生成字段宽度固定的数据记录 32
1.13 解析字段宽度固定的数据记录 34
1.14 分离字符串 37
1.15 使文本在特定长度处自动换行 40
1.16 在字符串中存储二进制数据 42
1.17 编程:可下载的CSV文件 45
第2章 数字 48
2.0 概述 48
2.1 检查变量中是否包含有效的数字 49
2.2 比较浮点型数字 50
2.3 对浮点型数取整 51
2.4 操纵一系列连续的整数 53
2.5 在一个范围内生成随机数 54
2.6 生成有偏随机数 56
2.7 取对数 57
2.8 计算指数 58
2.9 格式化数字 59
2.10 格式化货币值 61
2.11 正确地打印复数 62
2.12 计算三角函数 64
2.13 用度数而不是弧度来度量三角 65
2.14 处理极大数或极小数 66
2.15 在不同进制间转换 68
2.16 非十进制数的计算 69
2.17 计算球面坐标系中两点间的距离 70
第3章 日期和时间 73
3.0 概述 73
3.1 查出当前的日期和时间 74
3.2 将时间和日期部件转换为纪元时间戳 77
3.3 将纪元时间戳转换为时间和日期部件 79
3.4 以特定的格式打印日期和时间 80
3.5 计算两个日期间的时间差 86
3.6 用儒略日计算两个日期间的时间差 88
3.7 找到周、月或者年中的某一天 90
3.8 验证日期 92
3.9 从字符串中解析日期和时间 94
3.10 对日期进行加、减运算 97
3.11 根据时区计算时间 98
3.12 处理夏令时 104
3.13 生成高精度的时间 106
3.14 生成时间范围 107
3.15 使用非公历纪年 109
3.16 使用纪元时间戳范围之外的日期 114
3.17 编程:日历 115
第4章 数组 119
4.0 概述 119
4.1 定义一个起始元素不为零的数组 122
4.2 用数组中的一个键保存多个元素 123
4.3 用一个整数范围来初始化数组 125
4.4 遍历数组 126
4.5 从数组中删除元素 128
4.6 改变数组大小 131
4.7 将一个数组追加到另一个数组 133
4.8 把数组转换成字符串 135
4.9 使用逗号来打印数组 137
4.10 检查数组中是否存在某个键 138
4.11 检查数组中是否包含某个元素 139
4.12 确定值在数组中的位置 140
4.13 确定通过某种测试的元素 141
4.14 确定数组中经计算后的最大或最小元素 143
4.15 反转数组 144
4.16 数组排序 145
4.17 根据可计算的字段对数组进行排序 146
4.18 对多个数组进行排序 149
4.19 使用方法而不是函数来对数组进行排序 150
4.20 对数组进行随机化处理 151
4.21 删除数组中重复的元素 152
4.22 对数组中的每个元素都应用一个函数 153
4.23 计算两个数组的并集、交集和差集 155
4.24 创建一个类数组对象 158
4.25 编程:输出水平居中的HTML表格 161
第5章 变量 164
5.0 概述 164
5.1 消除==和=的困扰 165
5.2 为变量设定默认值 166
5.3 不使用临时变量而实现变量值的交换 167
5.4 动态创建变量名 168
5.5 使用静态变量 170
5.6 在进程间共享变量 171
5.7 把复杂的数据类型压缩到一个字符串中 176
5.8 将变量内容转存为字符串 178
第6章 函数 182
6.0 概述 182
6.1 访问函数的参数 183
6.2 为函数的参数设定默认值 184
6.3 传递引用 186
6.4 使用命名的参数 187
6.5 创建可以接受个数可变的参数的函数 188
6.6 返回变量的引用 191
6.7 返回多个值 193
6.8 跳跃选择返回的值 194
6.9 返回失败信息 196
6.10 调用可变函数 197
6.11 在函数内部访问全局变量 200
6.12 创建动态函数 201
第7章 类和对象 203
7.0 概述 203
7.1 技巧化对象 207
7.2 定义对象构造器 208
7.3 定义对象解构器 210
7.4 实现访问控制 211
7.5 防止修改类和方法 214
7.6 定义字符串化的对象 215
7.7 定义接口 218
7.8 创建抽象的基类 220
7.9 传递对象引用 223
7.10 克隆对象 223
7.11 重要的属性访问 226
7.12 调用由另一个方法返回对象的方法 231
7.13 聚合对象 231
7.14 访问被覆盖的方法 235
7.15 使用方法的多态性 237
7.16 定义类常量 239
7.17 定义静态属性和方法 241
7.18 控制对象的序列化 243
7.19 分析对象 245
7.20 检查某对象是不是一个特定类的技巧 249
7.21 在对象技巧化期间自动地加载类文件 252
7.22 动态技巧化一个对象 254
7.23 编程:whereis 255
第8章 Web基础 258
8.0 概述 258
8.1 设置Cookie 259
8.2 读取Cookie的值 261
8.3 删除Cookie 262
8.4 重定向到一个不同的位置 263
8.5 检测不同的浏览器 264
8.6 建立查询字符串 266
8.7 读取Post请求的主体 267
8.8 生成具有交替样式的HTML表格 268
8.9 使用HTTP的基本或摘要认证 269
8.10 使用Cookie认证 274
8.11 把输出冲刷(Flushing)到浏览器 276
8.12 缓冲到浏览器的输出 277
8.13 压缩Web输出 279
8.14 读取环境变量 280
8.15 设置环境变量 281
8.16 在Apache服务器内部通信 282
8.17 编程:网站账户(反)激活 283
8.18 编程:小型Wiki 286
第9章 表单 289
9.0 概述 289
9.1 处理表单的输入 291
9.2 验证表单输入:必填字段 292
9.3 验证表单输入:数字 294
9.4 验证表单输入:电子邮件地址 297
9.5 验证表单输入:下拉菜单 298
9.6 验证表单输入:单选按钮 300
9.7 验证表单输入:复选框 301
9.8 验证表单输入:日期和时间 303
9.9 验证表单输入:信用卡 304
9.10 预防跨站点脚本 306
9.11 处理多页表单 307
9.12 重新显示带有内置错误提示的表单 308
9.13 防止多次提交同一表单 311
9.14 处理上传文件 313
9.15 防止全局变量注射 316
9.16 处理名字中带句点的远程变量 318
9.17 使用带有多个选项的表单元素 319
9.18 基于当前日期创建下拉菜单 320
第10章 访问数据库 322
10.0 概述 322
10.1 使用DBM数据库 325
10.2 使用SQLite数据库 329
10.3 连接到SQL数据库 331
10.4 查询一个SQL数据库 332
10.5 不通过循环抽取记录 335
10.6 修改SQL数据库中的数据 336
10.7 有效地重复查询 337
10.8 确定查询返回的行数 341
10.9 转义引号 342
10.10 记录调试信息和错误 344
10.11 创建唯一的标识符 346
10.12 以程序化的方式建立查询 348
10.13 为连续的记录生成分页链接 353
10.14 缓存查询和结果 356
10.15 在程序中任何地方都能访问数据库连接 358
10.16 编程:存储链式(Threaded)留言板 360
第11章 Session和数据保持 369
11.0 概述 369
11.1 使用Session跟踪 370
11.2 预防Session劫持 372
11.3 预防Session定置 374
11.4 在数据库中保存Session 375
11.5 在共享内存中保存Session 376
11.6 在共享内存中保存独立数据 381
11.7 在摘要表中缓存计算结果 383
第12章 XML 385
12.0 概述 385
12.1 生成XML为字符串 388
12.2 通过DOM生成XML 390
12.3 解析基本的XML文档 393
12.4 解析复杂的XML文档 395
12.5 解析大型XML文档 398
12.6 用XPath来提取信息 405
12.7 通过XSLT转换XM L 408
12.8 在PHP中设置XSLT参数 410
12.9 在XSLT样式表中调用PHP函数 412
12.10 验证XML文档 416
12.11 处理内容编码 419
12.12 读取RSS和Atom源 420
12.13 生成RSS源 423
12.14 生成Atom源 426
第13章 Web自动化 431
13.0 概述 431
13.1 通过Get方法定位URL 432
13.2 通过Post方法定位URL 437
13.3 通过Cookie定位URL 439
13.4 通过任意头部信息定位URL 441
13.5 通过任意方法定位URL 443
13.6 通过超时定位URL 445
13.7 定位HTTPS URL 447
13.8 调试原始HTTP数据交换 448
13.9 标记网页 453
13.10 清理不完整或非标准的HTML 456
13.11 从HTML文件中提取链接 458
13.12 将纯文本转换为HTML 460
13.13 将HTML转换为文本 461
13.14 删除HTML和PHP标签 462
13.15 响应Ajax请求 464
13.16 与JavaScript应用集成 466
13.17 编程:查找失效的链接 470
13.18 编程:查找新链接 472
第14章 消费Web服务 476
14.0 概述 476
14.1 调用REST方法 477
14.2 通过WSDL调用SOAP的方法 479
14.3 不通过WSDL调用SOAP的方法 481
14.4 调试SOAP请求 482
14.5 使用复杂的SOAP类型 484
14.6 设置SOAP类型 485
14.7 使用SOAP头部 487
14.8 通过SOAP实现认证 489
14.9 重新定义终点 490
14.10 捕捉SOAP故障 492
14.11 将XML模式数据类型映射为PHP类 494
14.12 调用XML-RPC方法 495
14.13 通过XML-RPC实现验证 498
第15章 建立Web服务 500
15.0 概述 500
15.1 以REST方法提供服务 500
15.2 以SOAP方法提供服务 507
15.3 在SOAP方法中接受参数 510
15.4 自动生成WSDL文件 512
15.5 抛出SOAP故障 513
15.6 处理SOAP头部信息 515
15.7 生成SOAP头部信息 518
15.8 通过SOAP实现验证 520
15.9 以XML-RPC方法提供服务 526
第16章 互联网服务 531
16.0 概述 531
16.1 发送电子邮件 532
16.2 发送MIME邮件 535
16.3 通过IMAP或POP3读取邮件 537
16.4 将邮件发表到Usenet新闻组 540
16.5 读取Usenet新闻消息 543
16.6 通过FTP取得及放置文件 547
16.7 通过LDAP找地址 550
16.8 通过LDAP进行用户身份验证 552
16.9 执行DNS查找 554
16.10 检查主机是否处于活动状态 556
16.11 获取与域名相关的信息 558
第17章 图形 561
17.0 概述 561
17.1 绘制直线、矩形和多边形 564
17.2 绘制弧形、椭圆形和圆形 566
17.3 用图案化的线条绘制图形 568
17.4 绘制文本 569
17.5 绘制居中的文本 572
17.6 生成动态图像 577
17.7 取得并设置透明颜色 579
17.8 读取EXIF数据 580
17.9 安全地提供图像 583
17.10 编程:根据投票结果生成条形图 584
第18章 安全和加密 588
18.0 概述 588
18.1 预防Session定置 589
18.2 防止表单提交骗术 590
18.3 确保过滤输入 591
18.4 避免跨站点脚本 592
18.5 避免SQL注入 593
18.6 将密码置于站点文件外部 594
18.7 存储密码 595
18.8 处理遗忘的密码 597
18.9 使用散列码验证数据 599
18.10 加密和解密数据 601
18.11 把加密的数据保存到文件或数据库 606
18.12 在网站之间共享加密数据 610
18.13 检测SSL 612
18.14 通过GPG加密电子邮件 613
第19章 国际化和本地化 615
19.0 概述 615
19.1 列举有效的地区 617
19.2 使用特定的地区 618
19.3 设置默认地区 619
19.4 本地化文本消息 620
19.5 本地化日期和时间 624
19.6 本地化货币值 625
19.7 本地化图像 629
19.8 本地化包含文件 631
19.9 管理本地化资源 632
19.10 使用gettext 634
19.11 设置传出数据的字符编码 636
19.12 设置输入数据的字符编码 636
19.13 操纵UTF-8编码的文本 637
第20章 错误处理,故障排除和测试 643
20.0 概述 643
20.1 发现并修复解析错误 644
20.2 创建自己的异常类 646
20.3 输出栈轨迹 649
20.4 读取配置变量 650
20.5 设置配置变量 652
20.6 对用户隐藏错误信息 653
20.7 调谐错误处理 654
20.8 使用自定义错误处理函数 657
20.9 记录错误 658
20.10 消除“headers already sent”错误 660
20.11 记录调试信息 661
20.12 使用扩展的调试程序 663
20.13 编写单元测试 669
20.14 编写单元测试套件 672
20.15 对网页应用单元测试 674
20.16 设置测试环境 676
第21章 性能调谐和负载测试 677
21.0 概述 677
21.1 计算函数执行时间 678
21.2 计算程序执行时间 679
21.3 通过排错扩展进行代码剖析 683
21.4 对网站进行压力测试 685
21.5 避免使用正则表达式 686
21.6 使用加速器 688
第22章 正则表达式 691
22.0 概述 691
22.1 从ereg转换到preg 695
22.2 匹配单词 697
22.3 查找第n个匹配项 698
22.4 选择进行贪婪或非贪婪匹配 699
22.5 找到一个文件中与模式匹配的所有行 701
22.6 在HTML标签中捕获文本 702
22.7 阻止对子模式匹配文本的捕获 704
22.8 转义正则表达式中的特殊字符 706
22.9 通过模式分隔符读取记录 707
22.10 在正则表达式中使用PHP函数 709
第23章 文件 714
23.0 概述 714
23.1 创建或打开一个本地文件 718
23.2 创建一个临时文件 720
23.3 打开远程文件 721
23.4 从标准输入中读取数据 722
23.5 把文件内容读取到字符串中 723
23.6 计算文件中的行数、段数或记录数 725
23.7 处理文件中的每一个词 728
23.8 从文件中随机提取一行 730
23.9 随机化处理文件中的所有行 731
23.10 处理长度可变的文本字段 732
23.11 读取配置文件 733
23.12 不通过临时文件而实现对文件的修改 735
23.13 将缓冲内容刷出到一个文件中 737
23.14 写入标准输出 738
23.15 同时写入到多个文件句柄 739
23.16 转义Shell中的元字符串 740
23.17 向程序传递输入数据 742
23.18 从程序中读取标准输出 743
23.19 从程序中读取标准错误信息 745
23.20 锁定文件 746
23.21 读写自定义文件类型 749
23.22 读写压缩文件 754
第24章 目录 756
24.0 概述 756
24.1 获取并设置文件时间戳 759
24.2 获取文件信息 760
24.3 修改文件权限或所有者 763
24.4 按其组成部分分割文件名 764
24.5 删除文件 765
24.6 复制或移动文件 766
24.7 处理同一目录中的所有文件 767
24.8 生成与模式匹配的文件名列表 769
24.9 递归地处理同一目录中的所有文件 771
24.10 创建新目录 772
24.11 删除目录及其内容 772
24.12 编程:Web服务器目录列表 774
24.13 编程:网站搜索 778
第25章 命令行PHP 782
25.0 概述 782
25.1 解析程序参数 784
25.2 通过getopt解析程序参数 785
25.3 读取键盘输入 789
25.4 针对输入文件的每一行运行PHP代码 791
25.5 读取密码 793
25.6 编程:命令解释程序 795
第26章 PEAR和PECL 799
26.0 概述 799
26.1 使用PEAR安装程序 801
26.2 查找PEAR包 805
26.3 查找有关包的信息 807
26.4 安装PEAR包 808
26.5 升级PEAR包 811
26.6 卸载PEAR包 812
26.7 安装PECL包 814