第1章 PHP概述 1
1.1历史 1
1.1.1 PHP 4 2
1.1.2 PHP 5 3
1.1.3 PHP 5.3 4
1.1.4 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.5测试安装 13
2.6配置PHP 14
2.6.1在Linux上构建时配置PHP 14
2.6.2定制Windows构建 15
2.7运行时配置 15
2.7.1管理PHP的配置指令 15
2.7.2 PHP的配置指令 17
2.8选择代码编辑器 28
2.8.1 Adobe Dreamweaver CS5 28
2.8.2 Notepad+++ 28
2.8.3 PDT 28
2.8.4 Zend Studio 29
2.9选择Web托管服务提供商 29
2.10小结 30
第3章 PHP基础 31
3.1在Web页面中嵌入PHP代码 31
3.1.1默认语法 31
3.1.2短标签 32
3.1.3脚本 33
3.1.4 ASP风格 33
3.1.5嵌入多个代码块 33
3.2为代码添加注释 33
3.2.1单行C++语法 33
3.2.2 shell语法 34
3.2.3多行C语法 34
3.3向浏览器输出数据 35
3.3.1 print()语句 35
3.3.2 echo()语句 35
3.3.3 printf()语句 36
3.3.4 sprintf() 37
3.4 PHP支持的数据类型 37
3.4.1标量数据类型 38
3.4.2复合数据类型 39
3.4.3使用类型强制转换实现数据类型间的转换 40
3.4.4类型自动转换 41
3.4.5与类型有关的函数 41
3.4.6类型标识符函数 42
3.5标识符 42
3.6变量 43
3.6.1变量声明 43
3.6.2变量作用域 44
3.6.3 PHP的超级全局变量 47
3.6.4变量的变量 50
3.7常量 51
3.8表达式 51
3.8.1操作数 52
3.8.2操作符 52
3.9字符串插入 56
3.9.1双引号 57
3.9.2转义序列 57
3.9.3单引号 58
3.9.4大括号 58
3.9.5 heredoc 58
3.9.6 Nowdoc 59
3.10控制结构 59
3.10.1条件语句 59
3.10.2循环语句 61
3.10.3文件包含语句 65
3.11小结 67
第4章 函数 68
4.1调用函数 68
4.2创建函数 69
4.2.1按值传递参数 69
4.2.2按引用传递参数 70
4.2.3默认参数值 71
4.2.4使用类型提示 72
4.2.5从函数返回值 72
4.2.6递归函数 73
4.3函数库 75
4.4小结 76
第5章 数组 77
5.1什么是数组 77
5.2创建数组 78
5.2.1用array()创建数组 79
5.2.2用list()提取数组 79
5.2.3用预定义的值范围填充数组 80
5.2.4测试数组 81
5.3输出数组 81
5.4添加和删除数组元素 82
5.4.1在数组头添加元素 83
5.4.2在数组尾添加元素 83
5.4.3从数组头删除元素 83
5.4.4从数组尾删除元素 83
5.5定位数组元素 84
5.5.1搜索数组 84
5.5.2获取数组键 85
5.5.3获取数组值 85
5.6遍历数组 85
5.6.1获取当前数组键 86
5.6.2获取当前数组值 86
5.6.3获取当前数组键和值 86
5.6.4移动数组指针 87
5.6.5向函数传递数组值 87
5.7确定数组的大小和唯一性 88
5.7.1确定数组的大小 89
5.7.2统计数组元素出现的频度 89
5.7.3确定唯一的数组元素 89
5.8数组排序 90
5.8.1逆置数组元素顺序 90
5.8.2置换数组键和值 90
5.8.3数组排序 91
5.9合并、拆分、接合和分解数组 95
5.9.1合并数组 95
5.9.2递归追加数组 95
5.9.3合并两个数组 96
5.9.4拆分数组 96
5.9.5接合数组 97
5.9.6求数组的交集 98
5.9.7求关联数组的交集 98
5.9.8求数组的差集 99
5.9.9求关联数组的差集 99
5.10其他有用的数组函数 100
5.10.1返回一组随机的键 100
5.10.2随机洗牌数组元素 100
5.11小结 102
第6章 面向对象的PHP 103
6.1 OOP的好处 103
6.1.1封装 103
6.1.2继承 104
6.1.3多态 104
6.2关键的OOP概念 104
6.2.1类 104
6.2.2对象 105
6.2.3属性 106
6.2.4常量 110
6.2.5方法 111
6.3构造函数和析构函数 114
6.3.1构造函数 114
6.3.2析构函数 116
6.4静态类成员 117
6.5 instanceof关键字 118
6.6辅助函数 118
6.7自动加载对象 120
6.8小结 120
第7章 高级OOP特性 121
7.1 PHP不支持的高级OOP特性 121
7.2对象克隆 122
7.2.1克隆示例 122
7.2.2 clone()方法 123
7.3继承 124
7.3.1类继承 124
7.3.2继承和构造函数 126
7.3.3继承与延迟静态绑定 127
7.4接口 128
7.4.1实现一个接口 129
7.4.2实现多个接口 130
7.5抽象类 131
7.6命名空间介绍 131
7.7小结 133
第8章 错误和异常处理 134
8.1配置指令 134
8.2错误日志 137
8.3异常处理 139
8.3.1为什么异常处理很方便 139
8.3.2 PHP的异常处理实现 140
8.3.3 SPL异常 144
8.4小结 145
第9章 字符串和正则表达式 146
9.1正则表达式 146
9.1.1正则表达式语法(POSIX) 147
9.1.2 PHP的正则表达式函数(POSIX扩展) 148
9.1.3正则表达式语法(Perl风格) 151
9.2其他字符串函数 157
9.2.1确定字符串长度 157
9.2.2比较两个字符串 158
9.2.3处理字符串大小写 159
9.2.4字符串与HTML相互转换 161
9.3正则表达式函数的替代函数 165
9.3.1填充和剔除字符串 170
9.3.2统计字符和单词个数 171
9.4使用PEAR:validate_US 173
9.4.1安装Validate_US 174
9.4.2使用Validate_US 174
9.5小结 175
第10章 处理文件和操作系统 176
10.1了解文件和目录 176
10.1.1解析目录路径 176
10.1.2计算文件、目录和磁盘大小 178
10.1.3确定访问和修改时间 180
10.2文件处理 182
10.2.1资源的概念 182
10.2.2识别换行符 182
10.2.3识别文件末尾字符 182
10.2.4打开和关闭文件 182
10.2.5读取文件 184
10.2.6将字符串写入文件 189
10.2.7移动文件指针 189
10.2.8读取目录内容 190
10.3执行shell命令 191
10.4系统级程序执行 192
10.4.1清理输入 193
10.4.2 PHP的程序执行函数 194
10.5小结 196
第11章 PEAR 197
11.1 PEAR的强大功能:数值格式转换 197
11.2安装和更新PEAR 198
11.2.1安装PEAR 198
11.2.2 PEAR和托管公司 199
11.2.3更新PEAR 200
11.3使用PEAR包管理器 200
11.3.1查看安装的PEAR包 200
11.3.2了解已安装PEAR包的更多信息 200
11.3.3安装PEAR包 201
11.3.4将包包含到脚本中 202
11.3.5升级PEAR包 203
11.3.6卸载包 203
11.3.7降级PEAR包 204
11.4 Pyrus介绍 204
11.5小结 204
第12章 日期和时间 205
12.1 UNIX时间戳 205
12.2 PHP的日期和时间库 206
12.2.1验证日期 206
12.2.2格式化日期和时间 206
12.2.3将时间戳转换为用户友好的值 209
12.2.4处理时间戳 210
12.3日期函数 211
12.3.1显示本地化的日期和时间 211
12.3.2显示网页的最新修改日期 214
12.3.3确定当前月份中的天数 214
12.3.4确定任意给定月份的天数 215
12.3.5计算当前日期后X天的日期 215
12.4为PHP5.1+用户提供的日期时间改进 215
12.4.1 DateTime构造函数简介 215
12.4.2格式化日期 216
12.4.3实例化后设置日期 216
12.4.4实例化后设置时间 217
12.4.5修改日期和时间 217
12.4.6计算两个日期之差 217
12.5小结 218
第13章 处理HTML表单 219
13.1 PHP和Web表单 219
13.2验证表单数据 221
13.2.1文件删除 221
13.2.2跨站点脚本攻击 221
13.2.3清理用户输入 223
13.2.4利用Filter扩展验证和清理数据 225
13.2.5处理多值表单组件 226
13.3充分利用PEAR:HTML_QuickForm2 227
13.3.1安装HTML_QuickForm2 227
13.3.2创建和验证简单的表单 228
13.4小结 230
第14章 身份验证 231
14.1 HTTP验证概念 231
14.2用PHP验证用户 233
14.2.1 PHP验证变量 233
14.2.2有用的函数 233
14.3 PHP验证方法 234
14.3.1硬编码的身份验证 234
14.3.2基于文件的身份验证 235
14.3.3基于数据库的身份验证 236
14.3.4利用PEAR:Auth_HTTP 237
14.4用户登录管理 239
14.4.1用CrackLib库测试密码易猜性 239
14.4.2一次性URL和密码恢复 241
14.5小结 243
第15章 处理文件上传 244
15.1通过HTTP协议上传文件 244
15.2通过PHP上传文件 245
15.2.1 PHP的文件上传/资源指令 245
15.2.2 $_FILES数组 246
15.2.3 PHP的文件上传函数 247
15.2.4上传错误消息 248
15.2.5一个简单的示例 248
15.3利用PEAR:HTTP_Upload 249
15.3.1安装HTTP_Upload 249
15.3.2上传文件 250
15.3.3了解关于已上传文件的更多信息 250
15.3.4上传多个文件 251
15.4小结 252
第16章 网络 253
16.1 DNS、服务器和服务 253
16.1.1 DNS 253
16.1.2服务 257
16.1.3建立套接字连接 257
16.2邮件 259
16.2.1配置指令 259
16.2.2使用pHp脚本发送电子邮件 260
16.3常见网络任务 264
16.3.1连接服务器 264
16.3.2创建端口扫描器 265
16.3.3创建子网转换器 265
16.3.4测试用户带宽 267
16.4小结 267
第17章 PHP和LDAP 268
17.1在PHP中使用LDAP 269
17.1.1为PHP配置LDAP 269
17.1.2连接到LDAP服务器 269
17.1.3获取LDAP数据 271
17.1.4统计所获取的项 274
17.1.5 LDAP记录排序 274
17.1.6插入LDAP数据 275
17.1.7更新LDAP数据 276
17.1.8删除LDAP数据 276
17.1.9处理区分名 277
17.1.10错误处理 278
17.2小结 279
第18章 会话处理程序 280
18.1什么是会话处理 280
18.2配置指令 281
18.2.1管理会话存储介质 281
18.2.2设置会话文件路径 281
18.2.3自动启用会话 282
18.2.4设置会话名称 282
18.2.5选择cookie或URL重写 282
18.2.6自动URL重写 282
18.2.7设置会话cookie的生存期 283
18.2.8设置会话cookie的有效URL路径 283
18.2.9为启用会话的页面设置缓存方向 283
18.3处理会话 284
18.3.1开始会话 284
18.3.2销毁会话 285
18.3.3设置和获取会话ID 285
18.3.4创建和删除会话变量 285
18.3.5编码和解码会话数据 286
18.4实际的会话处理示例 288
18.4.1以返回用户的身份自动登录 288
18.4.2生成最近浏览文档的索引 290
18.5创建定制会话处理程序 291
18.5.1将定制会话函数加入到PHP逻辑 292
18.5.2使用基于MySQL的定制会话处理程序 292
18.6小结 295
第19章 用Smarty模板化 296
19.1什么是模板化引擎 296
19.2 Smarty介绍 298
19.3安装Smarty 298
19.4使用Smarty 299
19.5 Smarty的表现逻辑 301
19.5.1注释 301
19.5.2变量修饰符 301
19.5.3控制结构 303
19.5.4语句 307
19.6创建配置文件 309
19.6.1 config_load 309
19.6.2引用配置变量 310
19.7结合Smarty使用CSS 310
19.8缓存 311
19.8.1处理缓存生命期 311
19.8.2通过is_cached()消除处理开销 312
19.8.3为每个模板创建多个缓存 312
19.8.4关于缓存的结束语 313
19.9小结 313
第20章 Web服务 314
20.1为什么使用Web服务 314
20.2 RSS 315
20.3 SimplePie介绍 318
20.3.1安装SimplePie 318
20.3.2用Simplepie解析提要 319
20.3.3解析多个提要 320
20.4 SimpleXML 321
20.4.1加载XML 321
20.4.2解析XML 323
20.5小结 325
第21章 保护网站安全 326
21.1安全地配置PHP 326
21.2隐藏配置细节 328
21.2.1隐藏Apache 328
21.2.2隐藏PHP 329
21.3隐藏敏感数据 330
21.3.1隐藏文档根目录 330
21.3.2拒绝访问某些文件扩展名 330
21.4数据加密 331
21.4.1 PHP的加密函数 331
21.4.2 MCrypt包 332
21.5小结 333
第22章 用jQuery和PHP创建AJAX增强特性 334
22.1 AJAX介绍 334
22.2 jQuery介绍 335
22.2.1安装jQuery 336
22.2.2一个简单示例 336
22.2.3响应事件 336
22.2.4 jQuery和DOM 338
22.3创建一个用户名存在性验证程序 339
22.4小结 342
第23章 构建面向全世界的网站 343
23.1用gettext翻译网站 343
23.1.1第一步:更新网站脚本 344
23.1.2第二步:创建本地化库 345
23.1.3第三步:创建翻译文件 345
23.1.4第四步:翻译文本 346
23.1.5第五步:生成二进制文件 346
23.1.6第六步:在脚本中设置所需语言 346
23.2本地化日期、数字和时间 347
23.3小结 348
第24章 Zend框架介绍 349
24.1 MVC介绍 349
24.2 PHP的框架解决方案 351
24.2.1 CakePHP框架 351
24.2.2 Solar框架 351
24.2.3 symfony框架 352
24.2.4 Zend框架 352
24.3 Zend框架介绍 352
24.3.1安装Zend框架 353
24.3.2创建第一个Zend框架驱动的网站 353
24.4小结 363
第25章 MySQL介绍 364
25.1是什么让MySQL如此流行 364
25.1.1灵活性 364
25.1.2强大功能 365
25.1.3灵活的许可选择 366
25.1.4超级活跃的用户群体 367
25.2 MySQL的演进 367
25.2.1 MySQL 4 367
25.2.2 MySQL 5 368
25.2.3 MySQL 5.1 368
25.2.4 MySQL 5.4和5.5 369
25.3著名的MySQL用户 369
25.3.1 craigslist 369
25.3.2维基百科 369
25.3.3其他重要用户 369
25.4小结 370
第26章 安装和配置MySQL 371
26.1下载MySQL 371
26.2安装MySQL 372
26.2.1在Linux上安装MySQL 372
26.2.2在Windows上安装并配置MySQL 374
26.3设置 MySQL管理员密码 376
26.4启动和停止MySQL 376
26.5配置和优化MySQL 377
26.5.1 mysqld_safe包装程序 378
26.5.2 MySQL的参数配置和优化 378
26.5.3 my.cnf文件 381
26.6配置 PHP以便与MySQL协作 382
26.6.1在Linux上重新配置PHP 382
26.6.2在Windows上重新配置PHP 383
26.7小结 383
第27章 MySQL客户端 384
27.1命令行客户端介绍 384
27.1.1 mysql客户端 384
27.1.2 mysqladmin客户端 391
27.1.3其他有用的客户端 392
27.1.4客户端选项 395
27.2 MySQL的GUI客户程序 397
27.3 phpMyAdmin 398
27.4小结 399
第28章 MySQL存储引擎和数据类型 400
28.1存储引擎 400
28.1.1 MyISAM 401
28.1.2 IBMDB2I 402
28.1.3 InnoDB 403
28.1.4 MEMORY 403
28.1.5 MERGE 404
28.1.6 FEDERATED 404
28.1.7 ARCHIVE 405
28.1.8 CSV 406
28.1.9 EXAMPLE 406
28.1.10 BLACKHOLE 406
28.1.11存储引擎的常见问题 406
28.2数据类型和属性 407
28.2.1数据类型 407
28.2.2数据类型属性 411
28.3处理数据库和表 414
28.3.1处理数据库 414
28.3.2处理表 415
28.3.3更改表结构 417
28.3.4 INFORMATION SCHEMA 417
28.4小结 420
第29章 保护MySQL的安全 421
29.1首先应当做什么 421
29.2保护mysqld守护进程 422
29.3 MySQL访问权限系统 423
29.3.1权限系统的工作方式 423
29.3.2访问信息存储在哪里 424
29.4用户和权限管理 431
29.4.1创建用户 432
29.4.2删除用户 432
29.4.3重命名用户 432
29.4.4 GRANT和REVOKE命令 432
29.4.5查看权限 437
29.5限制用户资源 437
29.6保护MySQL连接 437
29.6.1授权选项 438
29.6.2 SSL选项 439
29.6.3启动启用SSL的MySQL服务器 440
29.6.4使用启用SSL的客户端进行连接 440
29.6.5在my.cnf文件中存储SSL选项 440
29.7小结 441
第30章 结合使用PHP与MySQL 442
30.1进行安装的预备工作 443
30.1.1在Linux/UNIX中启用mysqli扩展 443
30.1.2在Windows中启用mysqli扩展 443
30.1.3使用MySQL本地驱动程序 443
30.1.4管理用户权限 443
30.1.5处理示例数据 444
30.2使用mysqli扩展 444
30.2.1建立和断开连接 444
30.2.2处理连接错误 445
30.2.3获得错误信息 445
30.2.4在单独的文件中存储连接信息 446
30.2.5保护连接信息 447
30.3与数据库交互 447
30.3.1向数据库发送查询 447
30.3.2解析查询结果 449
30.3.3确定所选择的行和受影响的行 450
30.3.4处理准备语句 451
30.4执行数据库事务 455
30.4.1启用自动提交模式 455
30.4.2提交事务 455
30.4.3回滚事务 456
30.5小结 456
第31章 PDO介绍 457
31.1为什么还要另一种数据库抽象层 458
31.2使用PDO 458
31.2.1安装PDO 459
31.2.2 PDO的数据库选项 459
31.2.3连接到数据库服务器并选择数据库 460
31.2.4错误处理 461
31.2.5获取和设置属性 463
31.2.6查询执行 463
31.2.7准备语句介绍 464
31.2.8获取数据 467
31.2.9设置绑定列 469
31.2.10处理事务 470
31.3小结 470
第32章 存储例程 471
32.1应当使用存储例程吗 471
32.1.1存储例程的优点 471
32.1.2存储例程的缺点 472
32.2 MySQL如何实现存储例程 472
32.2.1创建存储例程 472
32.2.2声明和设置变量 474
32.2.3执行存储例程 475
32.2.4创建和使用多语句存储例程 476
32.2.5从另一个例程中调用例程 481
32.2.6修改存储例程 482
32.2.7删除存储例程 482
32.2.8查看例程状态 482
32.2.9查看例程的创建语法 483
32.2.10条件处理 484
32.3将例程集成到Web应用程序 484
32.3.1创建员工奖金界面 484
32.3.2获取多条记录 485
32.4小结 485
第33章 MySQL触发器 486
33.1介绍触发器 486
33.1.1为什么使用触发器 486
33.1.2在事件前采取行动 487
33.1.3在事件后采取行动 487
33.1.4前触发器和后触发器 488
33.2 MySQL对触发器的支持 488
33.2.1创建触发器 488
33.2.2查看现有的触发器 490
33.2.3修改触发器 491
33.2.4删除触发器 491
33.3将触发器集成到Web应用程序 491
33.4小结 492
第34章 视图 493
34.1视图介绍 493
34.2 MySQL对视图的支持 494
34.2.1创建和执行视图 494
34.2.2查看视图信息 498
34.2.3修改视图 499
34.2.4删除视图 499
34.2.5更新视图 500
34.3将视图结合到Web应用程序中 500
34.4小结 501
第35章 实用数据库查询 502
35.1示例数据 502
35.2用PEAR创建表格输出 503
35.2.1安装HTML_Table 503
35.2.2创建简单表 503
35.2.3创建更可读的行输出 505
35.2.4根据数据库数据创建表 505
35.3排序输出 506
35.4创建分页输出 507
35.5列出页码 509
35.6用子查询查询多个表 510
35.6.1用子查询完成比较 511
35.6.2用子查询确定存在性 511
35.6.3用子查询维护数据库 512
35.6.4在PHP中使用子查询 512
35.7用游标迭代结果集 513
35.7.1游标基础 513
35.7.2创建游标 513
35.7.3打开游标 514
35.7.4使用游标 514
35.7.5关闭游标 515
35.7.6在PHP中使用游标 515
35.8小结 515
第36章 索引和搜索 516
36.1数据库索引 516
36.1.1主键索引 516
36.1.2唯一索引 517
36.1.3常规索引 518
36.1.4全文索引 519
36.1.5索引最佳实践 522
36.2基于表单的搜索 522
36.2.1执行简单搜索 523
36.2.2扩展搜索功能 524
36.2.3完成全文搜索 525
36.3小结 526
第37章 事务 527
37.1什么是事务 527
37.2 MySQL的事务功能 528
37.2.1系统需求 528
37.2.2表创建 528
37.3示例项目 528
37.3.1创建表并添加示例数据 529
37.3.2执行示例事务 529
37.3.3用法提示 531
37.4用PHP构建事务应用程序 531
37.5小结 533
第38章 导入和导出数据 534
38.1示例表 534
38.2使用数据定界 534
38.3导入数据 535
38.3.1利用LOAD DATA INFILE导入数据 535
38.3.2用mysqlimport导入数据 538
38.3.3用PHP加载表数据 540
38.4导出数据 541
38.5小结 543