前言 1
第1部分 PHP基础知识 5
第1章 为什么使用PHP 6
1.1 什么是PHP 6
1.2 PHP的历史 7
1.3 PHP受欢迎的原因 7
1.3.1 PHP是免费的 7
1.3.2 PHP易学易用 9
1.3.3 PHP是内嵌的 10
1.3.4 PHP的交叉平台特性 11
1.3.5 PHP并不基于标记 12
1.3.6 PHP的稳定性 12
1.3.7 PHP非常迅速 12
1.3.8 PHP是开放的 13
1.3.10 PHP十分流行并在逐渐成长 14
1.3.9 PHP的合作能力很强 14
1.3.11 PHP不属于任何人 15
1.3.12 PHP团体 16
1.4 小结 16
第2章 服务器端Web脚本编制 17
2.1 静态HTML 17
2.2 客户端技术 20
2.3 服务器端脚本编制 23
2.4 服务器端脚本擅长之处 28
2.5 小结 29
第3章 PHP起步 30
3.1 虚拟主机和DIY的对比 30
3.1.1 ISP选项 30
3.1.2 选择自建主机的各项细则 32
3.1.3 折衷解决方案 33
3.2 安装PHP 33
3.2.1 开始之前的准备 33
3.2.2 安装过程 35
3.2.3 开发工具 39
3.3 小结 40
第4章 在HTML中添加PHP 41
4.1 HTML是兼容PHP的 41
4.2 从HTML转入PHP模式 41
4.2.1 规范的PHP标记 41
4.2.2 简短开始(SGML风格)标记 42
4.2.3 Hello World 43
4.2.4 进出PHP模式 43
4.2.5 包含文件 44
4.3 小结 45
第5章 语法、变量和输出 46
5.1 PHP的宽松风格 46
5.2 HTML不是PHP 46
5.3.1 PHP对空白不敏感 47
5.3.2 PHP有时区分大小写 47
5.3 PHP的C风格语法 47
5.3.3 语句是以分号结尾的表达式 48
5.3.4 花括号的使用 50
5.4 注释 50
5.4.1 C风格的多行注释 51
5.4.2 单行注释:#和// 51
5.5 变量 51
5.5.4 变量重新赋值 52
5.5.5 未赋值的变量 52
5.5.2 声明变量 52
5.5.3 变量赋值 52
5.5.1 PHP变量是Perl风格的 52
5.5.6 变量作用域 54
5.5.7 模式的切换 54
5.6 输出 55
5.6.1 回显和打印 55
5.6.2 变量和字符串 56
5.7 小结 57
6.1 首要原则是放松 58
6.1.1 没有变量类型声明 58
6.1.2 自动类型转换 58
第6章 PHP中的类型 58
6.1.3 根据上下文分配的类型 59
6.2 类型小结 59
6.3 简单类型 59
6.3.1 整型 60
6.3.2 双精度型 60
6.3.3 布尔型 62
6.3.4 示例 62
6.3.5 字符串型 63
6.4 数组 66
6.4.1 数组实现 67
6.4.2 字符串作为数组索引 67
6.5.1 OOP概述 68
6.5 对象 68
6.4.3 结构类型 68
6.4.4 其他数组特性 68
6.5.2 PHP的OOP 69
6.5.3 在PHP中定义类 69
6.5.4 创建对象 70
6.6 类型测试 70
6.7 赋值和强制转换 71
6.7.1 类型转换行为 71
6.7.2 显式转换 71
6.7.3 转换示例 72
6.7.4 其他有用的类型转换 73
6.7.5 整数溢出 74
6.7.6 补充内容:查找最大整数 75
6.8 小结 75
7.1.1 布尔常量 76
7.1 布尔表达式 76
第7章 控制 76
7.1.2 逻辑运算符 77
7.1.3 比较运算符 78
7.1.4 三元运算符 80
7.2 分支结构 81
7.2.1 if-else结构 81
7.2.2 switch 84
7.3 循环 85
7.3.1 有界循环和无界循环 85
7.3.2 while 86
7.3.3 do-while 86
7.3.4 for 87
7.3.5 循环示例 88
7.3.6 break和continue 91
7.3.7 关于无限循环的注意事项 92
7.4 可替换的控制语法 92
7.5 终止执行 93
7.6 小结 94
第8章 使用和定义函数 96
8.1 使用函数 96
8.1.1 返回值与副作用 96
8.2 函数文档 97
8.2.1 文档的首部 98
8.2.2 查找函数文档 98
8.3 定义自己的函数 98
8.3.1 什么是函数 99
8.3.2 函数定义语法 99
8.3.3 函数定义示例 99
8.3.4 形参与实参的对比 101
8.3.5 参数数目不匹配 101
8.4 函数和变量作用域 101
8.4.1 全局变量与局部变量 102
8.4.2 静态变量 103
8.5.1 include和require 104
8.5 函数作用域 104
8.5.2 递归 105
8.6 高级函数技巧 106
8.6.1 可变的参数个数 106
8.6.2按值调用和按引用调用 109
8.6.3 按引用调用 110
8.6.4 可变函数名 111
8.6.5 进一步扩展的示例 112
8.7 小结 115
第9章 字符串和字符串函数 117
9.1 PHP中的字符串 117
9.1.1 字符和字符串索引 118
9.1.2 字符串运算符 118
9.1.3 连接和赋值 118
9.2.1 检查字符串 119
9.2 字符串函数 119
9.2.2 查找字符和子串 120
9.2.3 比较和搜索 121
9.2.4 搜索 121
9.2.5 选定子串 122
9.2.6 字符串清理函数 124
9.2.7 字符串替换 124
9.2.8 字符串集合和字符集合 126
9.2.9 解析函数 128
9.2.10 大小写函数 130
9.2.11 转义函数 131
9.2.12 打印和输出 132
9.3 高级字符串特性 134
9.3.1 正则表达式 134
9.3.2 HTML函数 136
9.4 小结 137
10.1 数字类型 138
10.2 数学运算符 138
第10章 数学运算 138
10.2.1 算术运算符 139
10.2.2 算术运算符和类型 139
10.2.3 增1运算符 140
10.2.4 赋值运算符 140
10.2.5 比较运算符 141
10.2.6 优先级和括号 142
10.3 简单数学函数 142
10.4 基数转换 143
10.5 指数和对数 145
10.6 三角学 146
10.7 随机数 149
10.7.1 给发生器指定种子 150
10.7.2 示例:进行随机选择 151
10.8 任意精度(BC) 153
10.8.1 任意精度示例 153
10.8.2 把代码转化为任意精度 154
10.9 小结 156
第11章 数组和数组函数 158
11.1 数组的用法 158
11.2 PHP数组是什么 158
11.3 创建数组 160
11.3.1 直接赋值 160
11.3.2 array()结构 160
11.3.3 使用array()指定索引 161
11.4.1 用索引进行检索 162
11.4.2 list( )结构 162
11.3.4 返回数组的函数 162
11.4 检索值 162
11.5 多维数组 163
11.6 检查数组 164
11.7 从数组中删除元素 165
11.8 遍历 165
11.8.1 使用遍历函数 166
11.8.2 用current( )和next( )进行遍历 167
11.8.3 用reset( )重新开始 168
11.8.4 使用end( )和prev( )颠倒次序 169
11.8.5 使用key( )提取键 169
11.8.6 空值和each( )函数 170
11.8.7 使用array_walk( ) 171
11.9 堆栈和队列 172
11.10 数组的变换 174
11.10.1 检索键和值 174
11.10.2 翻转、颠倒、混乱 175
11.11 变量和数组之间的变换函数 177
11.12 排序 178
11.13 小结 179
第12章 页面间的信息传递 180
12.1 HTTP是无状态的 180
12.2 GET参数 181
12.3 GET风格的URL的更好用法 183
12.4 POST参数 185
12.5 在PHP中处理变量 187
12.6 小结 189
第13章 文件系统和系统函数 190
13.1 文件读写函数 190
13.1.1 打开文件 191
13.1.2 读文件 192
13.1.3 写文件 193
13.1.4 关闭文件 194
13.2 文件系统和目录函数 194
13.2.1 feof 196
13.2.2 file_exists 196
13.2.3 filesize 196
13.3 网络函数 196
13.3.1 syslog函数 196
13.3.3 套接字函数 197
13.4 日期和时间函数 197
13.3.2 DNS函数 197
13.4.1 如果不知道日期或时间 198
13.4.2 如果已经确定了日期/时间/时间戳 198
13.5 历法转换函数 199
13.6 小结 200
第14章 PHP风格 201
14.1 风格的运用 201
14.2 易读性 201
14.2.1 注释 206
14.2.2 文件和变量名 207
14.3 可维护性 209
14.3.1 避免魔术数字 209
14.3.2 函数 209
14.3.3 包含文件 210
14.3.4 对象包装器 212
14.4 强健性 212
14.5.1 效率:只是算法问题 213
14.5 简明性和效率 213
14.4.1 不可使用的服务 213
14.4.2 不是预期的变量类型 213
14.5.2 效率优化技巧 214
14.5.3 简明性:最后阶段 215
14.5.4 简明性提示 215
14.6 使用HTML还是使用PHP模式 218
14.7 从设计中分离代码 224
14.7.1 函数 224
14.7.2 PHP中的层叠式样式表 224
14.7.3 模板和页面一致性 225
14.8 小结 226
第15章 基本的PHP错误 227
15.1 和安装有关的问题 227
15.1.1 现象:文件内容显示在浏览器窗口上 227
15.1.2 现象:HTTP不显示文本或浏览器提示保存文件或访问外部文件库 227
15.2.1 现象:完全为空的页面 228
15.2.2 现象:不完整或不是预期的页面 228
15.1.3 现象:没有找到服务器或主机/页面无法显示 228
15.2 显示问题 228
15.2.3 现象:PHP代码显示在Web浏览器中 230
15.3 载入页面失败 231
15.3.1 现象:不能找到文件 231
15.3.2 现象:打开被包含的文件失败 232
15.4 解析错误 232
15.4.1 现象:解析错误消息 232
15.4.2 缺少分号 232
15.4.3 没有$号 233
15.4.4 模式问题 233
15.4.5 被转义的引号 234
15.5.1 现象:HTTP error 403 235
15.6.1 现象:有关包含文件的警告 235
15.6 缺少包含文件 235
15.4.6 其他解析错误的原因 235
15.5 文件权限 235
15.7 未被设定的变量 236
15.7.1 现象:变量没有出现在打印字符串中 236
15.7.2 现象:数字变量出乎意料为0 236
15.7.3 未被设定的变量有何作用 236
15.7.4 大小写问题 237
15.7.5 范围问题 237
15.8.3 现象:不能重新声明my_function( ) 238
15.8.4 现象:错误的参数数目 238
15.8 函数问题 238
15.8.2 现象:调用未定义的函数 238
15.8.1 现象:调用未定义的函数my_function( ) 238
15.9 数学问题 239
15.9.1 现象:被0除 239
15.9.2 现象:不是预期的运算结果 239
15.9.3 现象:NaN(或NAN) 239
15.11 小结 240
15.10 超时 240
第2部分 PHP和数据库 243
第16章 为PHP选择适合的数据库 244
16.1 为什么需要使用数据库 244
16.1.1 避免冗余 244
16.1.2 避免笨拙的编程 245
16.1.3 搜索 245
16.1.4 安全问题 245
16.1.5 N层体系结构 245
16.2 选择数据库 246
16.2.1 不必选择 246
16.2.2 平面文件、关系数据库、对象关系数据库 246
16.2.3 ODBC/JDBC与本地API 247
16.2.4 可交换的数据库 247
16.3.4 线程和锁定 248
16.3.3 复杂联结 248
16.3.2 子查询 248
16.3.1 图形用户界面 248
16.3 展望高级性能 248
16.3.5 事务 249
16.3.6 过程与触发器 249
16.3.7 外键和完整性约束 249
16.3.8 数据库的复制 249
16.4 支持PHP的数据库 250
16.4.1 本书重点:MySQL 250
16.5 小结 251
第17章 SQL指南 252
17.1 SQL标准 252
17.2 SQL骨干 253
17.2.1 SELECT 253
17.2.2 INSERT 255
17.2.3 UPDATE 256
17.2.4 DELETE 256
17.3 数据库设计 256
17.4 数据库连接 258
17.5 权限与安全性 259
17.5.1 设置权限 259
17.5.2 在不同的位置存储数据库口令 260
17.5.3 使用PHP表单检查口令 260
17.5.4 学会备份 261
17.6 小结 261
第18章 PHP/MySQL函数 263
18.1 连接MySQL 263
18.2 建立MySQL查询 264
18.3 提取数据集 265
18.4 获取有关数据的数据 267
18.5 多个连接 268
18.6 建立错误检查 269
18.7 用PHP创建MySQL数据库 269
18.8 MySQL函数 270
18.9 小结 271
第19章 在表中显示查询 273
19.1 HTML表和数据库表 273
19.1.1 一对一映射 274
19.1.2 例子:单表显示程序 274
19.1.3 范例表 276
19.1.4 改善显示程序 277
19.2 复杂映射 279
19.2.1 多重查询与复杂打印 279
19.2.2 多重查询的例子 280
19.2.3 复杂的打印例子 281
19.3 创建范例表 283
19.4 小结 285
第20章 建立由查询语句得到的表单 286
20.1 HTML表单 286
20.2 自提交 286
20.3 处理表单提交 288
20.4.1 TEXT和TEXTAREA 290
20.4 依赖于变量的表单 290
20.4.2 CHECKBOX 292
20.4.3 RADIO 293
20.4.4 SELECT 294
20.5 依赖于查询的表单 295
20.6 小结 297
21.1 为什么需要Weblog 298
21.2 最简单的Weblog 298
第21章 Weblog 298
21.3 通过HTTP输入信息 302
21.4 添加数据库连接 304
21.5 潜在的附加功能 311
21.6 小结 311
第22章 用户评估系统 312
22.1 系统做什么 312
22.1.1 系统的目标 312
22.2 收集选票 313
22.1.3 数据库支持 313
22.1.2 结构 313
22.2.1 DisplayRatings( ) 317
22.2.2 GetFeedback( ) 317
22.2.3 HandleRatings( ) 317
22.3 显示总体结果 318
22.3.1 乱投的选票和规模 322
22.4 小结 322
23.1.1 不好的例子:每条语句有一个连接 323
23.1 减少连接次数和重用连接 323
第23章 PHP/数据库的效率和风格 323
23.1.2 多个结果不需要多个连接 324
23.1.3 永久的连接 325
23.2 使用数据库提供的功能 325
23.2.1 很可能比自己的方案快 325
23.2.2 一个坏例子:用了循环却没有限制它 326
23.2.3 创建日期和时间字段 327
23.2.4 寻找最后插入的记录 327
23.3 小结 329
24.1 没有连接 330
第24章 PHP/数据库常见问题 330
24.2 权限问题 332
24.3 未转义的引号 332
24.4 中断的SQL语句 334
24.4.1 拼写错误的名称 336
24.4.2 逗号引起的错误 336
24.4.3 未被引号引起来的字符串参数 336
24.4.4 未被设定的变量 337
24.5 数据太少或太多 337
24.6 清楚的检查 338
24.7 小结 338
第3部分 高级技术 339
25.1 什么是会话 340
25.1.1 问题是什么 340
第25章 会话 340
25.1.2 为什么关注这一点 341
25.2 相关内容 341
25.2.1 IP地址 341
25.2.2 隐藏变量 341
25.2.3 cookie 342
25.3 会话在PHP中是如何工作的 343
25.3.2 在会话中注册变量 344
25.3.1 使PHP知晓用户会话 344
25.3.3 数据的实际存储位置 345
25.4 会话函数 346
25.5 会话代码示例 347
25.6 配置问题 350
25.7 常见问题和解决方案 351
25.8 小结 351
第26章 cookie和HTTP 352
26.1 cookie 352
26.1.2 示例 353
26.1.1 setcookie()函数 353
26.1.3 删除cookie 355
26.1.4 读取cookie 355
26.1.5 GET、POST和cookie变量 356
26.1.6 cookie的缺陷 359
26.2 发送HTTP header 360
26.2.1 重定向示例 361
26.2.2 HTTP认证示例 361
26.3 小结 362
26.2.3 有关header的常见问题 362
第27章 PHP和JavaScript 364
27.1 用PHP输出JavaScript 364
27.1.1 关于对象的冲突 365
27.1.2 PHP不关心其输出 365
27.1.3 在何处使用JavaScript 366
27.2 PHP作为JavaScript的后备 366
27.3 静态JavaScript与动态JavaScript 368
27.3.1 动态生成表单 369
27.3.2 将数据从JavaScript传回PHP 373
27.4 小结 376
第28章 电子邮件 377
28.1 了解E-mail 377
28.1.1 E-mail系统模型 377
28.2 用PHP接收E-mail 381
28.3.1 Windows配置 382
28.3 用PHP发送E-mail 382
28.2.3 添加补充内容 382
28.2.2 在指导下进行开发 382
28.2.1 拒绝开发 382
28.3.2 UNIX配置 383
28.3.3 和邮件有关的函数 383
28.4 PHP的更多电子邮件功能 385
28.4.1 从表单发送邮件 385
28.4.2 从数据库发送邮件 387
28.4.3 自定义的PHP邮件应用程序 387
28.5 小结 389
第29章 PHP和XML 390
29.1 什么是XML 390
29.2 使用XML 392
29.3 文档和DTD 393
29.3.1 DTD的结构 395
29.3.2 合法性与非合法性解析器 397
29.4 SAX和DOM的比较 397
29.4.1 SAX 397
29.4.2 DOM 398
29.5 PHP的DOM函数 399
29.5.1 SAX 400
29.5.2 使用SAX 401
29.5.3 SAX选项 402
29.6 针对SAX的PHP函数 403
29.7 自定义的SAX应用程序 405
29.8 常见问题及解答 411
29.9 小结 412
第30章 使用面向对象编程技术 413
30.1 面向对象编程擅长于什么 413
30.1.1 面向对象技术 414
30.1.2 PHP中的对象、类和类型 415
30.1.3 属性 415
30.1.4 函数 416
30.1.5 构造函数 416
30.1.6 继承 416
30.1.7 覆盖 417
30.1.8 重载 418
30.1.9 作用域 418
30.1.10 赋值、别名和引用 419
30.1.11 显示和打印对象 422
30.1.12 自检 422
30.2 类型和类自检函数 422
30.3 对象序列化 426
30.4.1 COM和DCOM 427
30.4 扩展接口:COM、DCOM、Java和CORBA 427
30.5 面向对象应用程序示例 429
30.6 小结 432
第31章 安全性和密码学 434
31.1 可能遭受的攻击 434
31.1.1 站点毁损 435
31.1.2 访问源代码 436
31.1.3 阅读任意的文件 437
31.1.4 运行任意的程序 440
31.1.6 E-mail安全 441
31.1.5 病毒和其他电子恶意代码 441
31.2 加密 442
31.2.1 公开密钥加密 442
31.2.2 单密钥加密 443
31.2.3 为cookie加密 445
31.2.4 散列法 446
31.2.5 数字签名文件 447
31.3 FYI:安全Web站点 448
31.2.6 安全服务器层 448
31.4 小结 449
第32章 配置和调整 450
32.1 了解环境变量 450
32.2 理解PHP配置 450
32.2.1 编译时选项 451
32.2.2 CGI编译时选项 455
32.2.3 Apache配置文件 456
32.2.4 php.ini文件 458
32.3 改善PHP性能 461
32.4 小结 463
附录A C程序员关心的内容 465
附录B ASP程序员关心的内容 469
附录C HTML程序员关心的内容 477
附录D PHP资源 483
名词解释 489