第1章 PHP概述1
1.1 历史1
1.1.1 PHP42
1.1.2 PHP53
1.1.3 PHP64
1.2 一般语言特性4
1.2.1 实用性4
1.2.2 强大功能5
1.2.3 可能性5
1.2.4 成本6
1.3 小结6
第2章 环境配置7
2.1 安装的前提条件7
2.1.1 下载Apache8
2.1.2 下载PHP8
2.1.3 获得文档9
2.2 在Linux上安装Apache和PHP9
2.3 在Windows上安装Apache和PHP11
2.4 在Windows上安装IIS和PHP12
2.4.1 安装IIS和PHP13
2.4.2 配置FastCGI来管理PHP进程13
2.5 测试安装14
2.6 配置PHP16
2.6.1 在Linux上构建时配置PHP16
2.6.2 定制Windows构建16
2.7 运行时配置16
2.7.1 管理PHP的配置指令17
2.7.2 PHP的配置指令18
2.8 选择代码编辑器29
2.8.1 AdobeDreamweaverCS329
2.8.2 Notepad++30
2.8.3 PDT30
2.8.4 ZendStudio30
2.9 选择Web托管服务提供商31
2.1 0小结32
第3章 PHP基础33
3.1 在Web页面中嵌入PHP代码33
3.1.1 默认语法33
3.1.2 短标记34
3.1.3 脚本34
3.1.4 ASP风格35
3.1.5 嵌入多个代码块35
3.2 为代码添加注释35
3.2.1 单行C++语法35
3.2.2 shell语法36
3.2.3 多行C语法36
3.3 向浏览器输出数据36
3.3.1 print()语句37
3.3.2 printf()语句38
3.3.3 sprintf()39
3.4 PHP支持的数据类型39
3.4.1 标量数据类型39
3.4.2 复合数据类型40
3.4.3 使用类型强制转换实现数据类型间的转换41
3.4.4 类型自动转换42
3.4.5 与类型有关的函数43
3.4.6 类型标识符函数43
3.5 标识符44
3.6 变量45
3.6.1 变量声明45
3.6.2 变量作用域46
3.6.3 PHP的超级全局变量49
3.6.4 变量的变量52
3.7 常量53
3.8 表达式53
3.8.1 操作数53
3.8.2 操作符54
3.9 字符串插入58
3.9.1 双引号58
3.9.2 单引号59
3.9.3 heredoc60
3.10 控制结构60
3.10.1 条件语句61
3.10.2 循环语句63
3.10.3 文件包含语句67
3.11小结69
第4章 函数70
4.1 调用函数70
4.2 创建函数71
4.2.1 按值传递参数71
4.2.2 按引用传递参数72
4.2.3 默认参数值73
4.2.4 从函数返回值74
4.2.5 递归函数75
4.3 函数库77
4.4 小结78
第5章 数组79
5.1 什么是数组79
5.2 创建数组80
5.2.1 用array()创建数组81
5.2.2 用list()提取数组81
5.2.3 用预定义的值范围填充数组82
5.2.4 测试数组83
5.3 添加和删除数组元素84
5.3.1 在数组头添加元素84
5.3.2 在数组尾添加元素84
5.3.3 从数组头删除值84
5.3.4 从数组尾删除元素85
5.4 定位数组元素85
5.4.1 搜索数组85
5.4.2 获取数组键86
5.4.3 获取数组值86
5.5 遍历数组87
5.5.1 获取当前数组键87
5.5.2 获取当前数组值87
5.5.3 获取当前数组键和值88
5.5.4 移动数组指针88
5.5.5 向函数传递数组值89
5.6 确定数组的大小和唯一性90
5.6.1 确定数组的大小90
5.6.2 统计数组元素出现的频度91
5.6.3 确定唯一的数组元素91
5.7 数组排序91
5.7.1 逆置数组元素顺序91
5.7.2 置换数组键和值92
5.7.3 数组排序92
5.8 合并、拆分、接合和分解数组96
5.8.1 合并数组96
5.8.2 递归追加数组97
5.8.3 连接两个数组97
5.8.4 拆分数组97
5.8.5 接合数组98
5.8.6 求数组的交集99
5.8.7 求关联数组的交集100
5.8.8 求数组的差集100
5.8.9 求关联数组的差集100
5.9 其他有用的数组函数101
5.9.1 返回一组随机的键101
5.9.2 随机洗牌数组元素101
5.10 小结103
第6章 面向对象的PHP104
6.1 OOP的好处104
6.1.1 封装104
6.1.2 继承105
6.1.3 多态105
6.2 关键的OOP概念106
6.2.1 类106
6.2.2 对象107
6.2.3 字段107
6.2.4 属性109
6.2.5 常量112
6.2.6 方法112
6.3 构造函数和析构函数116
6.3.1 构造函数116
6.3.2 析构函数118
6.4 静态类成员119
6.5 instanceof关键字120
6.6 辅助函数120
6.7 自动加载对象122
6.8 小结122
第7章 高级OOP特性123
7.1 PHP不支持的高级OOP特性123
7.2 对象克隆124
7.2.1 克隆示例124
7.2.2 __clone()方法125
7.3 继承126
7.3.1 类继承127
7.3.2 继承和构造函数128
7.4 接口130
7.4.1 实现一个接口131
7.4.2 实现多个接口132
7.5 抽象类132
7.6 命名空间介绍133
7.7 小结135
第8章 错误和异常处理136
8.1 配置指令136
8.2 错误日志138
8.3 异常处理140
8.3.1 为什么异常处理很方便141
8.3.2 PHP的异常处理实现142
8.4 小结146
第9章 字符串和正则表达式147
9.1 正则表达式147
9.1.1 正则表达式语法(POSIX)147
9.1.2 PHP的正则表达式函数(POSIX扩展)149
9.1.3 正则表达式语法(Perl风格)152
9.2 其他字符串函数158
9.2.1 确定字符串长度158
9.2.2 比较两个字符串158
9.2.3 处理字符串大小写160
9.2.4 字符串与HTML相互转换161
9.3 正则表达式函数的替代函数165
9.3.1 填充和剔除字符串171
9.3.2 字符和单词计数172
9.4 使用PEAR:Validate_US174
9.4.1 安装Validate_US174
9.4.2 使用Validate_US175
9.5 小结175
第10章 处理文件和操作系统176
10.1 了解文件和目录176
10.1.1 解析目录路径176
10.1.2 计算文件、目录和磁盘大小178
10.1.3 确定访问和修改时间181
10.2 文件处理182
10.2.1 资源的概念182
10.2.2 换行182
10.2.3 识别文件末尾字符182
10.2.4 打开和关闭文件183
10.2.5 读取文件184
10.2.6 将字符串写入文件189
10.2.7 移动文件指针190
10.2.8 读取目录内容190
10.3 执行shell命令191
10.4 系统级程序执行193
10.4.1 清理输入193
10.4.2 PHP的程序执行函数194
10.5 小结196
第11章 PEAR197
11.1 流行的PEAR包197
11.1.1 预安装的包197
11.1.2 安装程序建议的包198
11.2 PEAR的强大功能:数值格式转换198
11.3 安装和更新PEAR199
11.3.1 安装PEAR199
11.3.2 PEAR和托管公司200
11.3.3 更新PEAR200
11.4 使用PEAR包管理器201
11.4.1 查看安装的PEAR包201
11.4.2 了解PEAR安装包的更多信息201
11.4.3 安装PEAR包202
11.4.4 将包包含到脚本中203
11.4.5 升级PEAR包204
11.4.6 卸载包204
11.4.7 降级PEAR包205
11.5 小结205
第12章 日期和时间206
12.1 UNIX时间戳206
12.2 PHP的日期和时间库206
12.2.1 验证日期207
12.2.2 格式化日期和时间207
12.2.3 将时间戳转换为用户友好的值210
12.2.4 处理时间戳211
12.3 日期函数212
12.3.1 显示本地化的日期和时间212
12.3.2 显示网页的最新修改日期215
12.3.3 确定当前月份中的天数216
12.3.4 确定任意给定月份的天数216
12.3.5 计算当前日期后X天的日期216
12.3.6 利用PEAR:创建日历217
12.4 为PHP5.1 +用户提供的日期时间改进219
12.4.1 DateTime构造函数简介220
12.4.2 格式化日期220
12.4.3 实例化后设置日期220
12.4.4 实例化后设置时间221
12.4.5 修改日期和时间221
12.5 小结221
第13章 表单222
13.1 PHP和Web表单222
13.1.1 简单示例223
13.1.2 向函数传递表单数据224
13.1.3 处理多值表单组件225
13.2 充分利用PEAR:HTML_QuickForm226
13.2.1 安装HTML_QuickForm227
13.2.2 创建一个简单的表单227
13.2.3 使用自动完成231
13.3 小结232
第14章 身份验证233
14.1 HTTP验证概念233
14.2 PHP验证234
14.2.1 验证变量234
14.2.2 有用的函数235
14.3 PHP验证方法236
14.3.1 硬编码的身份验证236
14.3.2 基于文件的身份验证236
14.3.3 基于数据库的身份验证238
14.3.4 基于IP的身份验证239
14.3.5 利用PEAR:Auth_HTTP241
14.4 用户登录管理243
14.4.1 用CrackLib库测试密码易猜性243
14.4.2 一次性URL和密码恢复245
14.5 小结247
第15章 处理文件上传248
15.1 通过HTTP协议上传文件248
15.2 通过PHP上传文件249
15.2.1 PHP的文件上传/资源指令249
15.2.2 $_FILES数组250
15.2.3 PHP的文件上传函数251
15.2.4 上传错误消息252
15.2.5 一个简单的示例252
15.3 利用PEAR:HTTP_Upload253
15.3.1 安装HTTP_Upload253
15.3.2 上传文件254
15.3.3 了解关于上传文件的更多信息254
15.3.4 上传多个文件255
15.4 小结256
第16章 网络257
16.1 DNS、服务器和服务257
16.1.1 DNS257
16.1.2 服务261
16.1.3 建立套接字连接261
16.2 邮件263
16.2.1 配置指令263
16.2.2 使用PHP脚本发送电子邮件264
16.3 常见网络任务268
16.3.1 连接服务器269
16.3.2 创建端口扫描器269
16.3.3 创建子网转换器270
16.3.4 测试用户带宽272
16.4 小结273
第17章 PHP和LDAP274
17.1 在PHP中使用LDAP275
17.1.1 连接到LDAP服务器275
17.1.2 获取LDAP数据277
17.1.3 统计所获取的项280
17.1.4 排序LDAP记录281
17.1.5 插入LDAP数据281
17.1.6 更新LDAP数据282
17.1.7 删除LDAP数据283
17.1.8 处理区分名283
17.1.9 错误处理284
17.2 小结285
第18章 会话处理器286
18.1 什么是会话处理286
18.2 配置指令288
18.2.1 管理会话存储介质288
18.2.2 设置会话文件路径288
18.2.3 自动启用会话288
18.2.4 设置会话名称289
18.2.5 选择cookie或URL重写289
18.2.6 自动进行URL重写289
18.2.7 设置会话cookie的生存期289
18.2.8 设置会话cookie的有效URL路径289
18.2.9 为启用会话的页面设置缓存方向290
18.3 处理会话291
18.3.1 开始会话291
18.3.2 销毁会话291
18.3.3 设置和获取会话ID292
18.3.4 创建和删除会话变量292
18.3.5 编码和解码会话数据293
18.4 实际的会话处理示例294
18.4.1 以返回用户的身份自动登录294
18.4.2 生成最近浏览的文档索引296
18.5 创建定制会话处理器297
18.5.1 将定制会话函数加入到PHP逻辑298
18.5.2 基于MySQL的定制会话处理器298
18.6 小结302
第19章 用Smarty模板化303
19.1 什么是模板化引擎303
19.2 Smarty介绍305
19.3 安装Smarty305
19.4 使用Smarty306
19.5 Smarty的表现逻辑308
19.5.1 注释308
19.5.2 变量修饰符308
19.5.3 控制结构311
19.5.4 语句315
19.6 创建配置文件317
19.6.1 config_load317
19.6.2 引用配置变量317
19.7 结合Smarty使用CSS318
19.8 缓存319
19.8.1 处理缓存生命期320
19.8.2 通过is_cached()消除处理开销320
19.8.3 为每个模板创建多个缓存321
19.8.4 关于缓存的结束语322
19.9 小结322
第20章 Web服务323
20.1 为什么使用Web服务323
20.2 RSS324
20.2.1 理解RSS语法326
20.2.2 MagpieRSS介绍327
20.3 SimpleXML334
20.3.1 加载XML335
20.3.2 解析XML336
20.4 SOAP339
20.4.1 SOAP消息介绍339
20.4.2 PHP的SOAP扩展介绍340
20.5 小结346
第21章 安全PHP编程347
21.1 安全地配置PHP347
21.1.1 安全模式347
21.1.2 其他与安全有关的配置参数349
21.2 隐藏配置细节351
21.2.1 隐藏Apache351
21.2.2 隐藏PHP351
21.3 隐藏敏感数据352
21.3.1 隐藏文档根目录353
21.3.2 拒绝访问某些文件扩展名353
21.4 清理用户数据353
21.4.1 文件删除354
21.4.2 跨网站脚本354
21.4.3 清理用户输入:解决方案355
21.4.4 利用PEAR:Validate357
21.5 数据加密359
21.5.1 PHP的加密函数359
21.5.2 MCrypt包361
21.6 小结362
第22章 SQLite363
22.1 SQLite介绍363
22.1.1 安装SQLite363
22.1.2 使用SQLite命令行界面364
22.2 PHP的SQLite库365
22.2.1 Sqlite.assoc_case=o|1|2365
22.2.2 打开连接365
22.2.3 在内存中创建表367
22.2.4 关闭连接367
22.2.5 查询数据库367
22.2.6 解析结果集368
22.2.7 获取结果集细节371
22.2.8 操作结果集指针372
22.2.9 获取表的列类型374
22.2.1 0操作二进制数据375
22.2.1 1创建和覆盖SQLite函数375
22.2.1 2创建聚集函数377
22.3 小结378
第23章 构建面向全世界的网站379
23.1 用gettext翻译网站379
23.1.1 第一步:更新网站脚本380
23.1.2 第二步:创建本地化库381
23.1.3 第三步:创建翻译文件381
23.1.4 第四步:翻译文本382
23.1.5 第五步:生成二进制文件383
23.1.6 第六步:在脚本中设置所需语言383
23.2 本地化日期、数字和时间383
23.3 小结385
第24章 MVC与Zend框架386
24.1 MVC介绍386
24.2 PHP的框架解决方案388
24.2.1 CakePHP框架388
24.2.2 Solar框架389
24.2.3 symfony框架389
24.2.4 Zend框架390
24.3 Zend框架介绍390
24.3.1 下载和安装Zend框架391
24.3.2 创建第一个Zend框架驱动的网站392
24.3.3 用Zend_Service_Yahoo搜索Web397
24.4 小结398
第25章 MySQL介绍400
25.1 是什么让MySQL如此流行400
25.1.1 灵活性400
25.1.2 强大功能401
25.1.3 灵活的许可选择402
25.1.4 超级活跃的用户群体403
25.2 MySQL的演进403
25.2.1 MySQL4404
25.2.2 MySQL5.0404
25.2.3 MySQL5.1 405
25.3 著名的MySQL用户405
25.3.1 craigslist405
25.3.2 维基百科406
25.3.3 雅虎财经406
25.4 小结406
第26章 安装和配置MySQL407
26.1 下载MySQL407
26.2 安装MySQL408
26.2.1 在Linux上安装MySQL408
26.2.2 在Windows上安装并配置MySQL411
26.3 设置MySQL管理员密码413
26.4 启动和停止MySQL413
26.4.1 手工控制守护进程413
26.4.2 自动启动和停止MySQL414
26.5 配置和优化MySQL416
26.5.1 mysqld_safe包装程序416
26.5.2 MySQL的参数配置和优化417
26.5.3 my.cnf文件420
26.6 配置PHP与MySQL协作422
26.6.1 在Linux上重新配置PHP422
26.6.2 在Windows上重新配置PHP422
26.7 小结422
第27章 MySQL客户端423
27.1 命令行客户端介绍423
27.1.1 mysql客户端423
27.1.2 mysqladmin客户端431
27.1.3 其他有用的客户端432
27.1.4 客户端选项435
27.2 MySQL的GUI客户程序437
27.2.1 安装GUITools437
27.2.2 MySQL管理器437
27.2.3 MySQL查询浏览器438
27.2.4 MySQL移植工具集439
27.3 phpMyAdmin439
27.4 小结440
第28章 MySQL存储引擎和数据类型441
28.1 存储引擎441
28.1.1 MyISAM442
28.1.2 InnoDB443
28.1.3 MEMORY444
28.1.4 MERGE445
28.1.5 FEDERATED445
28.1.6 ARCHIVE446
28.1.7 CSV447
28.1.8 EXAMPLE447
28.1.9 BLACKHOLE447
28.1.1 0存储引擎FAQ448
28.2 数据类型和属性449
28.2.1 数据类型449
28.2.2 数据类型属性453
28.3 操作数据库和表455
28.3.1 操作数据库455
28.3.2 操作表457
28.3.3 更改表结构459
28.3.4 INFORMATION_SCHEMA460
28.4 小结462
第29章 保护MySQL的安全463
29.1 首先应当做什么463
29.2 保护mysqld守护进程464
29.3 MySQL访问权限系统465
29.3.1 权限系统的工作方式465
29.3.2 访问信息存储在哪里466
29.4 用户和权限管理473
29.4.1 创建用户474
29.4.2 删除用户474
29.4.3 重命名用户474
29.4.4 GRANT和REVOKE命令475
29.4.5 查看权限479
29.5 限制用户资源479
29.6 保护MySQL连接480
29.6.1 授权选项480
29.6.2 SSL选项481
29.6.3 启动启用SSL的MySQL服务器482
29.6.4 使用启用SSL的客户端进行连接482
29.6.5 在my.cnf文件中存储SSL选项482
29.7 小结483
第30章 结合使用PHP与MySQL484
30.1 进行安装的预备工作485
30.1.1 在Linux/UNIX中启用mysqli扩展485
30.1.2 在Windows中启用mysqli扩展485
30.1.3 管理用户权限485
30.1.4 处理示例数据485
30.2 使用mysqli扩展486
30.2.1 建立和断开连接486
30.2.2 处理连接错误487
30.2.3 获得错误信息487
30.2.4 在单独的文件中存储连接信息488
30.2.5 保护连接信息489
30.3 与数据库交互489
30.3.1 向数据库发送查询489
30.3.2 解析查询结果492
30.3.3 确定所选择的行和受影响的行493
30.3.4 处理准备语句494
30.4 执行数据库事务499
30.4.1 启用自动提交模式499
30.4.2 提交事务499
30.4.3 回滚事务499
30.5 小结499
第31章 PDO介绍500
31.1 为什么还要另一种数据库抽象层501
31.2 使用PDO501
31.2.1 安装PDO502
31.2.2 PDO的数据库选项503
31.2.3 连接到数据库服务器并选择数据库503
31.2.4 错误处理505
31.2.5 获取和设置属性506
31.2.6 查询执行507
31.2.7 准备语句介绍508
31.2.8 获取数据511
31.2.9 设置绑定列513
31.2.1 0处理事务514
31.3 小结515
第32章 存储例程516
32.1 应当使用存储例程吗516
32.1.1 存储例程的优点516
32.1.2 存储例程的缺点517
32.2 MySQL如何实现存储例程517
32.2.1 存储例程权限表517
32.2.2 创建存储例程519
32.2.3 声明和设置变量521
32.2.4 执行存储例程522
32.2.5 创建和使用多语句存储例程522
32.2.6 从另一个例程中调用例程529
32.2.7 修改存储例程530
32.2.8 删除存储例程530
32.2.9 查看例程状态530
32.2.1 0查看例程的创建语法532
32.2.1 1条件处理532
32.3 将例程集成到Web应用程序532
32.3.1 创建员工奖金界面533
32.3.2 获取多条记录533
32.4 小结534
第33章 MySQL触发器535
33.1 介绍触发器535
33.1.1 为什么使用触发器535
33.1.2 在事件前采取行动536
33.1.3 在事件后采取行动536
33.1.4 前触发器和后触发器537
33.2 MySQL对触发器的支持537
33.2.1 创建触发器538
33.2.2 查看现有的触发器539
33.2.3 修改触发器541
33.2.4 删除触发器541
33.3 将触发器集成到Web应用程序541
33.4 小结542
第34章 视图543
34.1 介绍视图543
34.2 MySQL对视图的支持544
34.2.1 创建和执行视图544
34.2.2 查看视图信息549
34.2.3 修改视图550
34.2.4 删除视图550
34.2.5 更新视图551
34.3 将视图结合到Web应用程序中551
34.4 小结553
第35章 实用数据库查询554
35.1 示例数据554
35.2 用PEAR创建表格输出555
35.2.1 安装HTML_Table555
35.2.2 创建一个简单表556
35.2.3 创建更可读的行输出557
35.2.4 根据数据库数据创建表558
35.2.5 一般化输出过程559
35.3 排序输出562
35.4 创建分页输出563
35.5 列出页码566
35.6 用子查询查询多个表567
35.6.1 用子查询完成比较568
35.6.2 用子查询确定存在性568
35.6.3 用子查询维护数据库569
35.6.4 在PHP中使用子查询570
35.7 用游标迭代结果集570
35.7.1 游标基础570
35.7.2 创建游标571
35.7.3 打开游标571
35.7.4 使用游标571
35.7.5 关闭游标572
35.7.6 在PHP中使用游标573
35.8 小结573
第36章 索引和搜索574
36.1 数据库索引574
36.1.1 主键索引574
36.1.2 唯一索引575
36.1.3 常规索引576
36.1.4 全文索引578
36.1.5 索引最佳实践581
36.2 基于表单的搜索581
36.2.1 执行简单搜索581
36.2.2 扩展搜索功能582
36.2.3 执行全文搜索584
36.3 小结585
第37章 事务586
37.1 什么是事务586
37.2 MySQL的事务功能587
37.2.1 系统需求587
37.2.2 表创建587
37.3 示例项目588
37.3.1 创建表并添加示例数据588
37.3.2 执行示例事务589
37.3.3 备份和恢复InnoDB表590
37.3.4 用法提示591
37.4 用PHP构建事务应用程序591
37.5 小结593
第38章 导入和导出数据594
38.1 示例表594
38.2 使用数据定界595
38.3 导入数据595
38.3.1 利用LOADDATAINFILE导入数据595
38.3.2 用mysqlimport导入数据598
38.3.3 用PHP加载表数据600
38.4 导出数据601
38.5 小结603