第1章 PHP概述 1
1.1 历史 1
1.1.1 PHP4 2
1.1.2 PHP 5 3
1.1.3 PHP 6 4
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 下载Apache 8
2.1.2 下载PHP 8
2.1.3 获得文档 9
2.2 在Linux上安装Apache和PHP 9
2.3 在Windows上安装Apache和PHP 11
2.4 在Windows上安装IIS和PHP 12
2.4.1 安装IIS和PHP 13
2.4.2 配置FastCGI来管理PHP进程 13
2.5 测试安装 14
2.6 配置PHP 16
2.6.1 在Linux上构建时配置PHP 16
2.6.2 定制Windows构建 16
2.7 运行时配置 16
2.7.1 管理PHP的配置指令 17
2.7.2 PHP的配置指令 18
2.8 选择代码编辑器 29
2.8.1 Adobe Dreamweaver CS3 29
2.8.2 Notepad++ 30
2.8.3 PDT 30
2.8.4 Zend Studio 30
2.9 选择Web托管服务提供商 31
2.10 小结 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 heredoc 60
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章 面向对象的PHP 104
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_US 174
9.4.1 安装Validate_US 174
9.4.2 使用Validate_US 175
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章 PEAR 197
11.1 流行的PEAR包 197
11.1.1 预安装的包 197
11.1.2 安装程序建议的包 198
11.2 PEAR的强大功能:数值格式转换 198
11.3 安装和更新PEAR 199
11.3.1 安装PEAR 199
11.3.2 PEAR和托管公司 200
11.3.3 更新PEAR 200
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 为PHP 5.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_Qui ckForm 226
13.2.1 安装HTML_QuickForm 227
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 HTTP 241
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_Upload 253
15.3.1 安装HTTP_Upload 253
15.3.2 上传文件 254
15.3.3 了解关于上传文件的更多信息 254
15.3.4 上传多个文件 255
15.4 小结 256
第16章 网络 257
16.1 DNS、服务器和服务 257
16.1.1 DNS 257
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和LDAP 274
17.1 在PHP中使用LDAP 275
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 设置和获取会话ID 292
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 安装Smarty 305
19.4 使用Smarty 306
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 confiq_load 317
19.6.2 引用配置变量 317
19.7 结合Smarty使用CSS 318
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 RSS 324
20.2.1 理解RSS语法 326
20.2.2 MagpieRSS介绍 327
20 3 SimpleXML 334
20.3.1 加载XML 335
20.3.2 解析XML 336
20 4 SOAP 339
20.4.1 SOAP消息介绍 339
20.4.2 PHP的SOAP扩展介绍 340
20.5 小结 346
第21章 安全PHP编程 347
21.1 安全地配置PHP 347
21.1.1 安全模式 347
21.1.2 其他与安全有关的配置参数 349
21.2 隐藏配置细节 351
21.2.1 隐藏Apache 351
21.2.2 隐藏PHP 351
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:Validate 357
21.5 数据加密 359
21.5.1 PHP的加密函数 359
21.5.2 MCrypt包 361
21.6 小结 362
第22章 SQLite 363
22.1 SQLite介绍 363
22.1.1 安装SQLite 363
22.1.2 使用SQLite命令行界面 364
22.2 PHP的SQLite库 365
22.2.1 Sqlite.assoc_case=o|1|2 365
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.10 操作二进制数据 375
22.2.11 创建和覆盖SQLite函数 375
22.2.12 创建聚集函数 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_Servi_ce Yahoo搜索Web 397
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 MySQL 4 404
25.2.2 MySQL 5.0 404
25.2.3 MySQL 5.1 405
25.3 著名的MySQL用户 405
25.3.1 craigslist 405
25.3.2 维基百科 406
25.3.3 雅虎财经 406
25.4 小结 406
第26章 安装和配置MySQL 407
26.1 下载MySQL 407
26.2 安装MySQL 408
26.2.1 在Linux上安装MySQL 408
26.2.2 在Windows上安装并配置MySQL 411
26.3 设置MySQL管理员密码 413
26.4 启动和停止MySQL 413
26.4.1 手工控制守护进程 413
26.4.2 自动启动和停止MySQL 414
26.5 配置和优化MySQL 416
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上重新配置PHP 422
26.6.2 在Windows上重新配置PHP 422
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 安装GUI Tools 437
27.2.2 MySQL管理器 437
27.2.3 MySQL查询浏览器 438
27.2.4 MySQL移植工具集 439
27.3 phpMyAdmin 439
27.4 小结 440
第28章 MySQL存储引擎和数据类型 441
28.1 存储引擎 441
28.1.1 MyISAM 442
28.1.2 InnoDB 443
28.1.3 MEMORY 444
28.1.4 MERGE 445
28.1.5 FEDERATED 445
28.1.6 ARCHIVE 446
28.1.7 CSV 447
28.1.8 EXAMPLE 447
28.1.9 BLACKHOLE 447
28.1.10 存储引擎FAQ 448
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_SCHEMA 460
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与MySQL 484
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 使用PDO 501
31.2.1 安装PDO 502
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.10 处理事务 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.10 查看例程的创建语法 532
32.2.11 条件处理 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_Table 555
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 利用LOAD DATA INFILE导入数据 595
38.3.2 用mysqlimport导入数据 598
38.3.3 用PHP加载表数据 600
38.4 导出数据 601
38.5 小结 603