第1部分 基础知识 2
第1章 安装QuickStart向导 2
1.1 使用第三方的安装包 2
1.2 Linux/UNIX下的安装 3
1.3 在Windows上安装XAMPP 4
1.4 在Mac OS X上安装XAMPP 6
1.5 让XAMPP更安全 8
1.6 故障排除 9
第2章 安装和配置MySQL 10
2.1 MySQL的当前版本和未来版本 10
2.2 如何获取MySQL 11
2.3 在Linux/UNIX上安装MySQL 11
2.4 在Mac OS X上安装MySQL 12
2.5 在Windows上安装MySQL 14
2.6 安装故障排除 18
2.7 基本安全规则 19
2.7.1 启动MySQL 19
2.7.2 增强MySQL连接的安全 20
2.8 MySQL权限系统简介 20
2.8.1 两步身份验证过程 21
2.8.2 添加用户 22
2.8.3 移除权限 23
2.9 小结 24
2.10 Q&A 24
2.11 实践练习 24
问答题 24
解答 25
思考题 25
第3章 安装和配置Apache 26
3.1 Apache的当前版本及未来版本 26
3.2 选择合适的安装方法 27
3.2.1 从源代码安装 27
3.2.2 安装一个二进制代码版本 27
3.3 在Linux/UNIX上安装Apache 27
3.3.1 下载Apache源代码 28
3.3.2 解压源代码 28
3.3.3 准备编译Apache 28
3.3.4 编译和安装Apache 29
3.4 在Mac OS X上安装Apache 30
3.5 在Windows上安装Apache 30
3.6 Apache配置文件结构 32
3.6.1 指令 32
3.6.2 容器 33
3.6.3 条件评估 34
3.6.4 ServerRoot指令 35
3.6.5 per-directory配置文件 35
3.7 Apache日志文件 36
3.7.1 access_log文件 36
3.7.2 error_log文件 36
3.7.3 其他文件 36
3.8 Apache相关命令 37
3.8.1 Apache服务器二进制程序 37
3.8.2 Apache控制脚本 38
3.9 第一次启动Apache 38
3.9.1 检查你的配置文件 38
3.9.2 启动Apache 39
3.10 故障排除 39
3.10.1 已有Web服务器 39
3.10.2 不允许绑定到端口 40
3.10.3 拒绝访问 40
3.10.4 错误组设置 40
3.11 小结 40
3.12 Q&A 40
3.13 实践练习 41
练习题 41
解答 41
思考题 41
第4章 安装和配置PHP 42
4.1 PHP的当前版本和未来版本 42
4.2 在带有Apache的Linux/UNIX上编译PHP 43
4.2.1 额外的Linux/UNIX配置选项 44
4.2.2 在Linux/UNIX上集成PHP和Apache 44
4.3 在Mac OS X上安装PHP 45
4.4 在Windows上安装PHP 45
4.5 php.ini基础 46
4.6 测试安装 47
4.7 获取安装帮助 47
4.8 PHP脚本基础 48
4.8.1 开始和结束一个PHP语句块 49
4.8.2 echo语句和print()函数 50
4.8.3 组合HTML和PHP 51
4.8.4 为PHP代码添加注释 52
4.9 小结 52
4.10 Q&A 52
实践练习 53
问答题 53
解答 53
思考题 54
第2部分 PHP语言结构 56
第5章 PHP的组成部分 56
5.1 变量 56
5.1.1 全局变量 57
5.1.2 超全局变量 58
5.2 数据类型 58
5.2.1 使用settype()来改变变量的数据类型 60
5.2.2 通过类型转换改变变量的数据类型 61
5.2.3 为何测试类型 63
5.3 操作符和表达式 63
5.3.1 赋值操作符 64
5.3.2 算术操作符 64
5.3.3 连接操作符 64
5.3.4 复合赋值操作符 65
5.3.5 自动增加和减少一个整型变量 66
5.3.6 比较操作符 66
5.3.7 使用逻辑操作符创建复杂的测试表达式 67
5.3.8 操作符优先级 68
5.4 常量 69
5.5 小结 70
5.6 Q&A 70
5.7 实践练习 71
问答题 71
解答 71
思考题 72
第6章 PHP的流程控制功能 73
6.1 转换流程 73
6.1.1 if语句 74
6.1.2 使用else子句的if语句 74
6.1.3 使用带有elseif子句的if语句 75
6.1.4 switch语句 76
6.1.5 使用?运算符 77
6.2 循环 78
6.2.1 while语句 78
6.2.2 do...while语句 79
6.2.3 for语句 79
6.2.4 用break语句跳出循环 80
6.2.5 用continue语句跳过迭代 82
6.2.6 嵌套循环 83
6.3 代码块和浏览器输出 84
6.4 小结 85
6.5 Q&A 86
6.6 实践练习 86
练习题 86
解答 86
思考题 87
第7章 使用函数 88
7.1 什么是函数 88
7.2 调用函数 89
7.3 定义一个函数 90
7.4 从用户定义的函数返回值 92
7.5 变量作用域 92
使用global语句访问变量 93
7.6 使用static语句在函数调用之间保存状态 95
7.7 关于参数的更多内容 96
7.7.1 为参数设置默认值 97
7.7.2 把变量引用传递给函数 98
7.8 测试函数是否存在 99
7.9 小结 100
7.10 Q&A 100
7.11 实践练习 101
问答题 101
解答 101
思考题 102
第8章 使用数组 103
8.1 什么是数组 103
8.2 创建数组 104
8.2.1 创建关联数组 104
8.2.2 创建多维数组 105
8.3 一些和数组相关的函数 107
8.4 小结 108
8.5 Q&A 108
8.6 实践练习 108
问答题 108
解答 108
思考题 108
第9章 使用对象 110
9.1 创建一个对象 110
9.1.1 对象的属性 112
9.1.2 对象方法 113
9.1.3 构造方法 114
9.2 对象继承 114
9.3 小结 116
9.4 Q&A 116
9.5 实践练习 116
问答题 116
解答 117
思考题 117
第3部分 深入编程 120
第10章 使用字符串、日期和时间 120
10.1 使用PHP格式化字符串 121
10.1.1 使用printf() 121
10.1.2 指定一个字段宽度 124
10.1.3 参数交换 126
10.1.4 存储一个格式化字符串 127
10.2 了解PHP中的字符串 127
10.2.1 索引字符串的一个注意事项 127
10.2.2 使用strlen()获取一个字符串的长度 128
10.2.3 使用strstr()获取一个字符串的子串 128
10.2.4 使用strpos()找到一个子字符串的位置 128
10.2.5 使用substr()提取一个字符串的一部分 129
10.2.6 使用strtok()分解一个字符串 129
10.3 在PHP中操作字符串 131
10.3.1 使用trim()、ltrim()和strip_tags()整理一个字符串 131
10.3.2 使用substr_replace()替换一个字符串的一部分 132
10.3.3 使用str_replace()替换子字符串 132
10.3.4 转换大小写 133
10.3.5 使用wordwrap()和n12br()换行文本 134
10.3.6 使用explode()把字符串分解到数组 135
10.4 使用PHP中的日期和时间函数 135
10.4.1 使用time()获取日期 135
10.4.2 使用getdate()转换一个时间戳 136
10.4.3 使用date()转换一个时间戳 137
10.4.4 使用rnktime()创建时间戳 139
10.4.5 使用checkdate()测试日期 140
10.5 其他字符串、日期和时间函数 140
10.6 小结 140
10.7 实践练习 141
10.8 Q&A 141
问答题 141
解答 142
思考题 142
第11章 使用表单 143
11.1 创建一个简单的输入表单 143
11.2 使用用户定义数组访问表单输入 145
11.3 在单个页面上组合HTML和PHP代码 147
11.4 使用隐藏字段来保存状态 149
11.5 重定向用户 150
11.6 根据表单提交发送邮件 151
11.6.1 mail()函数的系统配置 151
11.6.2 创建表单 152
11.6.3 创建发送邮件的脚本 153
11.6.4 使用HTML格式化邮件 155
11.7 使用文件上传 156
11.7.1 创建文件上传表单 156
11.7.2 创建一个文件上传脚本 157
11.8 小结 159
11.9 Q&A 159
11.10 实践练习 160
问答题 160
解答 160
思考题 160
第12章 使用Cookie和用户会话 161
12.1 Cookie简介 161
12.1.1 深入了解一个cookie 162
12.1.2 访问cookies 162
12.2 使用PHP设置一个cookie 163
删除一个cookie 164
12.3 会话函数概览 164
12.4 开始一个会话 165
12.5 使用会话变量 165
12.6 销毁会话和重置变量 169
12.7 在一个带有注册用户的环境中使用会话 169
12.7.1 使用注册的用户 170
12.7.2 使用用户偏好 170
12.8 小结 170
12.9 Q&A 171
12.10 实践练习 171
问答题 171
解答 171
思考题 171
第13章 使用文件和目录 172
13.1 使用include语句包含文件 172
13.1.1 从一个被包含文档返回一个值 173
13.1.2 在控制结构中使用include语句 174
13.1.3 使用include_once语句 175
13.1.4 include_path命令 175
13.2 验证文件 176
13.2.1 使用file_exists()检查文件的存在性 176
13.2.2 文件还是目录 176
13.2.3 检查一个文件的状态 177
13.2.4 使用filesize()确定文件的大小 177
13.2.5 获取有关一个文件的日期信息 177
13.2.6 编写一个执行多文件测试的函数 178
13.3 创建并删除文件 179
13.4 打开一个文件供写入、读取或添加 179
13.5 读取文件 180
13.5.1 使用fgets()和feof()从一个文件读取行 180
13.5.2 使用fread()函数从文件读取任意数量的数据 181
13.5.3 使用fgetc()从文件读取字符 183
13.5.4 用file_get_contents()读取文件内容 184
13.6 写入文件或向文件添加内容 184
13.6.1 使用fwrite()或fputs()写入文件 184
13.6.2 使用file_put_contents()写文件内容 185
13.6.3 使用flock()锁定文件 186
13.7 使用目录 186
13.7.1 使用mkdir()创建目录 186
13.7.2 使用rmdir()删除一个目录 187
13.7.3 使用opendir()打开一个目录以供读取 187
13.7.4 使用readdir()从一个目录读取内容 187
13.8 使用popen()打开到进程和离开进程的管道 188
13.9 使用exec()运行命令 190
13.10 使用system()或passthru()运行命令 191
13.11 小结 192
13.12 Q&A 193
13.13 实践练习 193
问答题 193
解答 194
思考题 194
第14章 使用图像 195
14.1 理解图像创建过程 195
关于颜色 196
14.2 对PHP的必要修改 196
14.3 绘制一个新的图像 197
14.3.1 绘制形状和线条 197
14.3.2 使用颜色填充 199
14.4 绘制有趣的饼图 200
14.5 修改已有图像 202
14.6 使用来自用户输入的图像创建图像 204
14.7 使用脚本创建的图像 208
14.8 小结 210
14.9 Q&A 210
14.10 实践练习 210
问答题 210
解答 210
思考题 211
第4部分 PHP与MySQL整合 214
第15章 理解数据库设计过程 214
15.1 良好的数据库设计的重要性 214
15.2 表关系的类型 215
15.2.1 一对一关系 215
15.2.2 一对多关系 216
15.2.3 多对多关系 217
15.3 理解规范化 218
15.3.1 平表带来的问题 218
15.3.2 第一范式 219
15.3.3 第二范式 219
15.3.4 第三范式 220
15.4 遵从设计过程 220
15.5 小结 221
15.6 Q&A 222
15.7 实践练习 222
问答题 222
解答 222
思考题 222
第16章 SQL基本命令 223
16.1 MySQL数据类型 224
16.1.1 数字数据类型 224
16.1.2 日期和时间类型 225
16.1.3 字符串类型 226
16.2 表的创建语法 226
16.3 使用INSERT命令 227
进一步学习INSERT语句 228
16.4 使用SELECT命令 229
16.4.1 排序SELECT结果 230
16.4.2 限制结果 230
16.5 在查询中使用WHERE 231
16.5.1 在WHERE子句中使用操作符 232
16.5.2 使用LIKE比较字符串 232
16.6 从多个表中查询 233
16.6.1 使用JOIN 235
16.6.2 使用子查询 237
16.7 使用UPDATE命令来修改记录 237
16.7.1 条件式UPDATE 238
16.7.2 在UPDATE中使用已有的列值 239
16.8 使用REPLACE命令 240
16.9 使用DELETE命令 240
条件式DELETE 241
16.10 MySQL中常用的字符串函数 242
16.10.1 长度和连接函数 242
16.10.2 截断和填充函数 244
16.10.3 定位和位置函数 246
16.10.4 子字符串函数 246
16.10.5 字符串修改函数 247
16.11 在MySQL中使用日期和时间函数 248
16.11.1 操作日期 248
16.11.2 操作月份和年份 250
16.11.3 操作周 251
16.11.4 操作小时、分钟和秒 252
16.11.5 使用MySQL格式化日期和时间 252
16.11.6 使用MySQL执行日期算术 254
16.11.7 特殊函数和转换函数 256
16.12 小结 258
16.13 Q&A 259
16.14 实践练习 259
练习题 260
解答 260
思考题 260
第17章 使用MySQL中的事务和存储过程 261
17.1 什么是事务 261
17.1.1 事务中使用的基本语法 262
17.1.2 使用事务的例子 262
17.2 什么是存储过程 264
17.3 小结 265
17.4 Q&A 266
17.5 实践练习 266
练习题 266
解答 266
思考题 266
第18章 使用PHP和MySQL交互 267
18.1 MySQL函数和MySQLi函数 267
18.2 使用PHP连接MySQL 267
18.2.1 进行连接 268
18.2.2 执行查询 269
18.2.3 获取错误消息 270
18.3 使用MySQL数据 270
18.3.1 避免SQL注入 270
18.3.2 使用PHP插入数据 271
18.3.3 使用PHP获取数据 274
18.3.4 PHP中其他的MySQL函数 276
18.4 小结 276
18.5 Q&A 276
18.6 实践练习 277
练习题 277
解答 277
思考题 277
第5部分 基本项目 280
第19章 管理一个简单的邮件列表 280
19.1 开发订阅机制 280
19.1.1 创建subscribers表 281
19.1.2 为共同函数创建一个包含文件 281
19.1.3 创建订阅表单 282
19.2 开发邮件发送机制 286
19.3 小结 288
19.4 Q&A 289
19.5 实践练习 289
问答题 289
解答 289
思考题 289
第20章 创建一个在线地址簿 290
20.1 规划和创建数据库表 290
20.2 为共同函数创建一个包含文件 292
20.3 创建一个菜单 293
20.4 创建记录添加机制 294
20.5 浏览记录 299
20.6 创建记录的删除机制 304
20.7 为一条记录添加子条目 305
20.8 小结 311
20.9 Q&A 311
20.10 实践练习 312
问答题 312
解答 312
思考题 312
第21章 创建一个简单的讨论论坛 313
21.1 设计数据库表 313
21.2 为共同函数创建一个包含文件 314
21.3 创建输入表单和脚本 314
21.4 显示主题列表 318
21.5 显示一个主题中的帖子 320
21.6 向主题添加帖子 323
21.7 小结 326
21.8 Q&A 326
21.9 实践练习 326
问答题 327
解答 327
思考题 327
第22章 创建一个在线商店 328
22.1 规划和创建数据库表 328
22.1.1 向store_categories表插入记录 330
22.1.2 向store_items表插入记录 330
22.1.3 向store_item_size表中插入记录 331
22.1.4 向store_item_color表插入记录 331
22.2 显示商品分类 331
22.3 显示商品 334
22.4 小结 336
22.5 Q&A 336
22.6 实践练习 336
问答题 336
解答 337
思考题 337
第23章 创建一个购物车机制 338
23.1 规划和创建数据库表 338
23.2 把购物车整合到商店 340
23.2.1 把项目添加到购物车 342
23.2.2 浏览购物车 344
23.2.3 从购物车中删除项目 346
23.3 支付方法和结账过程 347
23.3.1 创建结账页面 347
23.3.2 执行结账操作 347
23.4 小结 348
23.5 Q&A 348
23.6 实践练习 349
问答题 349
解答 349
思考题 349
第24章 创建一个简单的日历 350
24.1 构建一个简单的显示日历 350
24.1.1 检查用户输入 350
24.1.2 构建HTML表单 351
24.1.3 创建日历表格 353
24.1.4 向日历添加事件 356
24.2 创建一个日历库 362
24.3 小结 367
24.4 Q&A 367
24.5 实践练习 367
问答题 367
解答 367
思考题 367
第25章 限制对应用程序的访问 368
25.1 验证概览 368
25.1.1 客户机验证 369
25.1.2 用户管理方法 369
25.2 Apache验证模块功能 370
25.2.1 基于文件的验证 371
25.2.2 基于数据库文件的访问控制 372
25.3 使用Apache进行访问控制 373
25.3.1 实现访问规则 373
25.3.2 应用访问规则 374
25.4 组合Apache访问方法 375
25.5 根据HTTP方法限制访问 375
25.6 根据cookie值限制访问 376
25.6.1 创建授权用户表 376
25.6.2 创建登录表单和脚本 377
25.6.3 测试auth cookie 379
25.7 小结 380
25.8 Q&A 380
25.9 实践练习 381
问答题 381
解答 381
思考题 382
第26章 记录并监视Web服务器活动 383
26.1 标准Apache访问日志 383
26.1.1 确定记录什么 384
26.1.2 记录对文件的访问 386
26.1.3 记录对一个程序的访问 387
26.2 标准Apache错误日志 387
26.2.1 把错误记录到一个文件 388
26.2.2 把错误记录到一个程序 388
26.2.3 syslog守护进程参数 388
26.2.4 LogLevel指令 388
26.3 管理Apache日志 389
26.3.1 解析主机名 389
26.3.2 日志备份 389
26.3.4 日志分析 390
26.3.5 监视错误日志 390
26.4 把自定义信息记录到一个数据库 390
26.4.1 创建数据库表 391
26.4.2 创建PHP代码段 391
26.4.3 创建示例报表 392
26.5 小结 394
26.6 Q&A 394
26.7 实践练习 394
问答题 394
解答 394
思考题 395
第27章 应用程序本地化 396
27.1 关于国际化和本地化 396
27.2 关于字符集 397
27.3 环境修改 398
27.3.1 Apache的配置修改 398
27.3.2 PHP的配置修改 398
27.3.3 MySQL的配置修改 399
27.4 创建一个本地化页面结构 399
27.5 使用gettext()来本地化应用程序 402
27.6 小结 403
27.7 Q&A 404
27.8 实践练习 404
问答题 404
解答 404
思考题 404
第28章 使用XML 405
28.1 什么是XML 405
28.1.1 基本XML文档结构 405
28.1.2 何时应该使用XML和PHP 406
28.2 使用DOM函数在PHP中访问XML 407
28.3 使用SimpleXML函数在PHP中访问XML 409
28.4 使用JSON 411
28.5 小结 414
28.6 Q&A 414
28.7 实践练习 414
问答题 415
解答 415
思考题 415
第6部分 管理和优化 418
第29章 Apache性能调校和虚拟主机 418
29.1 可扩展性问题 418
29.1.1 操作系统限制 418
29.1.2 和性能相关的Apache设置 420
29.2 使用ApacheBench载入测试 421
29.3 预先性能调校 423
29.3.1 把文件映射到内存 423
29.3.2 分布负载 423
29.3.3 缓存 423
29.3.4 减少数据传输 423
29.3.5 网络设置 424
29.4 防止滥用 424
29.5 实现虚拟主机 425
29.5.1 基于IP的虚拟主机 425
29.5.2 基于名字的虚拟主机 426
29.5.3 大量虚拟主机 428
29.6 小结 428
29.7 Q&A 429
29.8 实践练习 429
问答题 430
解答 430
第30章 建立一个安全的Web服务器 431
30.1 安全性的需求 431
30.2 SSL协议 431
30.2.1 解决保密性需求 432
30.2.2 解决完整性的需求 433
30.2.3 解决验证的需求 433
30.3 获取和安装SSL工具 435
30.3.1 OpenSSL 435
30.3.2 Apache的mod_ssl模块 436
30.4 管理证书 437
30.4.1 创建一个密钥对 437
30.4.2 创建一个证书签发请求 438
30.4.3 创建一个自签发的证书 439
30.5 SSL配置 439
启动服务器 440
30.6 小结 440
30.7 Q&A 440
30.8 实践练习 441
问答题 441
解答 441
第31章 优化和调校MySQL 442
31.1 构建一个优化的平台 442
使用benchmark()函数 443
31.2 MySQL启动选项 444
关键启动参数 444
31.3 优化表结构 445
31.4 优化你的查询 445
31.5 使用FLUSH命令 446
31.6 使用SHOW命令 447
31.6.1 获取有关数据库和表的信息 448
31.6.2 获取表结构信息 449
31.6.3 获取系统状态 451
31.7 小结 452
31.8 Q&A 452
31.9 实践练习 452
问答题 452
解答 453
思考题 453
第32章 软件升级 454
32.1 停留在循环中 454
何时升级 454
32.2 升级MySQL 455
32.3 升级Apache 456
修改Apache而不需要升级 456
32.4 升级PHP 457
使用PECL和PEAR扩展PHP 457
32.5 小结 457
32.6 实践练习 457
问答题 458
解答 458
思考题 458
第33章 使用应用程序框架 459
33.1 理解应用程序框架 459
33.2 使用MVC模式 460
33.3 安装和使用PHP应用程序框架 461
33.3.1 Zend Framework 461
33.3.2 CakePHP 462
33.3.3 CodeIgniter 462
33.4 小结 463
33.5 实践练习 463
问答题 463
解答 463
思考题 464