第一篇 PHP基础知识 1
第1章 相关知识 1
1.1PHP及相关术语 1
1.1.1软件系统相关术语 1
1.1.2PHP语言相关术语 3
1.2PHP的运行及开发环境 5
1.2.1运行环境 5
1.2.2运行平台的选择 5
1.2.3Apache对客户端与服务器端通信的作用 5
1.2.4准备工作 6
1.2.5安装Apache 6
1.2.6确认Apache安装成功 8
1.2.7PHP安装准备 9
1.2.8安装PHP 10
1.2.9确认PHP安装成功 12
1.2.10Apache与PHP的相关配置 12
1.2.11开发工具 14
1.2.12Eclipse的下载、安装及配置 15
1.3第1个PHP程序 17
1.3.1使用Eclipse编写源程序 17
1.3.2发布和运行PHP程序 20
1.4常见问题 21
1.4.1Apache安装常见问题 21
1.4.2MySQL安装常见问题 22
1.4.3PHP安装常见问题 22
1.4.4关于Eclipse的问题 22
第2章 语法 24
2.1语法基础 24
2.1.1使用PHP输出HTML 24
2.1.2使用显示函数输出HTML 25
2.1.3使用开始符、结束符嵌套HTML 26
2.1.4使用定界符显示HTML 26
2.1.5把PHP嵌入HTML 27
2.1.6PHP与JavaScript的交互 28
2.1.7使用PHP生成JavaScript 28
2.1.8在PHP与JavaScript中使用Cookie传递变量 29
2.1.9使用临时文件进行数据交换 31
2.1.10使用注释 33
2.2类型 34
2.2.1布尔型 34
2.2.2布尔型的类型转换 35
2.2.3整型 36
2.2.4整型的类型转换 36
2.2.5浮点型 38
2.2.6浮点型的类型转换 38
2.2.7字符串 38
2.2.8字符串与双引号 39
2.2.9字符串与定界符 40
2.2.10简单语法与复杂语法 41
2.2.11字符串型的类型转换 41
2.2.12数组 43
2.2.13简单的数组操作 44
2.2.14遍历数组 46
2.2.15数组的类型转换 46
2.2.16多维数组 48
2.2.17对象 48
2.2.18对象的类型转换 49
2.2.19资源 49
2.2.20NULL 50
2.2.21变量类型之间的转换 51
2.3变量 51
2.3.1命名规则 51
2.3.2变量类型 52
2.3.3变量范围 53
2.3.4全局与超全局变量 53
2.3.5静态变量 54
2.3.6可变变量 55
2.3.7外部变量 56
2.4预定义变量 58
2.4.1服务器变量:$_SERVER 58
2.4.2环境变量:$_ENV 59
2.4.3HTTPCookies变量:$_Cookie 60
2.4.4HTTPGET变量:$_GET 60
2.4.5HTTPPOST变量:$_POST 60
2.4.6HTTP文件上传变量:$_FILES 60
2.4.7Request变量:$_REQUEST 61
2.4.8Session变量:$_SESSION 61
2.4.9Global变量:$GLOBALS 62
2.5常量 62
2.5.1定义和使用常量 62
2.5.2预定义常量 63
2.6表达式与运算符 64
2.6.1表达式的组成 64
2.6.2运算符优先级 64
2.6.3算术运算符 66
2.6.4赋值运算符 66
2.6.5位运算符 66
2.6.6比较运算符 67
2.6.7错误控制运算符 68
2.6.8执行运算符 68
2.6.9递增/递减运算符 69
2.6.10逻辑运算符 69
2.6.11字符串运算符 70
2.6.12数组运算符 70
2.6.13类型运算符 70
2.7程序流程控制 71
2.7.1ifelseelseif分支控制 71
2.7.2whiledo-while循环控制 72
2.7.3forforeach循环控制 73
2.7.4switchcase开关控制 75
2.7.5break控制符 76
2.7.6continue控制符 78
2.7.7return控制符 80
2.7.8流程控制的替代语法 82
2.7.9包含运行文件操作 83
2.8引用 84
2.8.1建立引用 84
2.8.2引用的应用 84
2.8.3取消引用 85
2.9常见问题 85
2.9.1嵌套问题 85
2.9.2数组问题 85
2.9.3关于变量范围 86
2.9.4关于表单变量 86
第3章 函数、类与对象 87
3.1函数 87
3.1.1用户自定义函数 87
3.1.2函数的其他定义方式 88
3.1.3递归函数 89
3.1.4函数的参数 89
3.1.5函数的返回值 91
3.1.6变量函数 92
3.1.7系统函数 93
3.2类的实现与应用 93
3.2.1类的创建 93
3.2.2类的实例化与访问 94
3.2.3类的继承 95
3.2.4子类访问基类的方法 97
3.2.5方法的重载 98
3.2.6静态属性、方法与范围解析符 99
3.2.7静态属性、方法与类继承 100
3.2.8类与常量 101
3.3类的其他特性 102
3.3.1构造函数和析构函数 102
3.3.2带有参数的类 103
3.3.3类的访问控制 104
3.3.4克隆对象 106
3.3.5自动加载对象 107
3.3.6对象序列化 108
3.3.7魔术方法_sleep()和_wakeup() 109
3.3.8final关键字 111
3.3.9抽象方法与抽象类 111
3.3.10接口技术 112
3.4常见问题 115
3.4.1带有默认参数函数的使用方法 115
3.4.2静态方法与类的继承与重载 116
3.4.3类的封装与抽象类 116
第二篇 数据处理 117
第4章 数组 117
4.1创建数组的几种方法 117
4.1.1新建一个数组 117
4.1.2使用变量建立数组 118
4.1.3使用两个数组创建一个数组 118
4.1.4建立指定范围单元的数组 119
4.2数组中键名和值的操作 120
4.2.1检查数组中是否存在某个键名或值 120
4.2.2取得数组当前单元的键名 121
4.2.3把数组中的值赋予指定变量 121
4.2.4用给定的值填充数组单元 122
4.2.5交换数组中的键名和值 123
4.2.6返回数组中所有的键名或值 124
4.2.7用值将数组填补到指定长度 125
4.2.8删除、取代数组中现有值 126
4.2.9移除数组中重复的值 127
4.2.10在数组中搜索给定的值 127
4.3遍历数组的3种方法 128
4.3.1使用while、list与each访问数组 128
4.3.2使用for、foreach访问数组 129
4.4数组的排序 130
4.4.1对数组排序 130
4.4.2对数组逆向排序 130
4.4.3对多个数组或多维数组进行排序 131
4.4.4将数组顺序打乱 132
4.4.5对数组排序并保持索引关系 133
4.4.6对数组按照键名排序 133
4.4.7用“自然排序”算法对数组排序 134
4.4.8返回一个单元顺序相反的数组 135
4.5数组的栈操作 136
4.5.1出栈操作 136
4.5.2入栈操作 136
4.5.3将数组开头的单元移出数组 136
4.5.4在数组开头插入一个或多个单元 137
4.5.5数组的指针操作 137
4.5.6获取数组中的当前单元 138
4.6数组的计算 139
4.6.1计算数组单元数目 139
4.6.2统计数组中所有的值出现的次数 140
4.6.3计算数组的差集 140
4.6.4计算数组的交集 141
4.6.5计算数组中所有值的乘积、和 142
4.7其他数组函数 143
4.7.1数组与变量之间的转换 143
4.7.2合并数组 144
4.7.3从数组中随机取出单元 145
4.8常见问题 145
4.8.1数组的键名 145
4.8.2数组函数的参数 145
第5章 目录与文件 146
5.1操作目录 146
5.1.1打开目录句柄 146
5.1.2新建目录 146
5.1.3删除目录 147
5.1.4取得当前工作目录 147
5.1.5改变当前目录 148
5.1.6从目录句柄中读取条目 148
5.1.7列出指定路径中的文件和目录 149
5.1.8关闭目录句柄 149
5.1.9directory类 150
5.2操作文件的一般方法 150
5.2.1打开文件 150
5.2.2读取文件 151
5.2.3写入文件 152
5.2.4关闭文件 154
5.3文件的基本操作 154
5.3.1在当前目录新建文件 154
5.3.2新建临时文件 154
5.3.3新建具有唯一文件名的文件 155
5.3.4删除文件 155
5.3.5复制文件 156
5.3.6移动、重命名文件或目录 156
5.4写入文件 157
5.4.1fwrite()函数 157
5.4.2CSV文件格式与文件存储 157
5.4.3将字符串写入文件 158
5.5文件的读取与指针 159
5.5.1把整个文件读入到数组中 159
5.5.2将文件读取到字符串 160
5.5.3使用指定格式读取文件 160
5.5.4解析一个配置文件 161
5.5.5获取、设置文件内部指针位置 162
5.5.6从文件指针处读取字符 163
5.5.7从文件指针处读取数据 163
5.5.8CSV文件格式与文件读取 164
5.5.9从文件指针处读取数据并过滤HTML 165
5.5.10重置文件指针的位置 165
5.5.11文件尾部指针测试 166
5.6文件的上传与下载 166
5.6.1处理上传文件 166
5.6.2读取文件到输出缓冲区 167
5.6.3将文件输出到缓冲区 168
5.6.4实现文件下载 168
5.7文件属性的操作 169
5.7.1获取文件统计信息 169
5.7.2通过文件句柄获取文件统计信息 170
5.7.3获取文件相关信息 171
5.7.4修改文件访问和修改时间 172
5.7.5改变文件所属的组 173
5.7.6改变文件所有者 173
5.7.7改变文件权限 173
5.8文件操作的错误处理 174
5.8.1判断给定文件名是否是目录 174
5.8.2判断给定文件名是否可执行 175
5.8.3判断给定文件名是否是文件 175
5.8.4判断指定文件是否可读 176
5.8.5判断文件是否是通过HTTPPOST上传的 177
5.8.6判断给定的文件名是否可写 178
5.8.7检查文件或目录是否存在 178
5.9路径与磁盘操作 179
5.9.1获取文件路径的信息 179
5.9.2获取路径中的文件名部分 180
5.9.3获取路径中的目录部分 180
5.9.4寻找与模式匹配的文件路径 181
5.9.5获取目录中的可用空间 181
5.9.6获取一个目录的磁盘总大小 181
5.10常见问题 182
5.10.1关于文件读取 182
5.10.2文件系统函数的错误信息 182
第6章 COOKIE和SESSION的常用函数及应用 183
6.1COOKIE的相关函数及应用 183
6.1.1使用函数创建COOKIE 183
6.1.2创建COOKIE的其他方法 184
6.1.3使用COOKIE 185
6.1.4删除COOKIE 185
6.1.5COOKIE的简单应用 186
6.2SESSION的相关函数 191
6.2.1SESSION的设置函数 191
6.2.2注册SESSION变量 191
6.2.3访问SESSION变量 192
6.2.4删除SESSION变量 192
6.2.5设置SESSION标识 193
6.2.6设置SESSION名称 194
6.2.7SESSION的缓冲控制方式 194
6.2.8SESSION的编码 195
6.2.9SESSION的COOKIE参数 196
6.3SESSION的应用 197
6.3.1SESSION的错误处理 197
6.3.2SESSION应用示例 198
6.4常见问题 202
6.4.1COOKIE失效 202
6.4.2SESSION的跨页传递 203
第7章 字符串 204
7.1字符串显示函数 204
7.1.1输出字符串到屏幕 204
7.1.2字符串与文件 205
7.2字符串与数组 206
7.2.1将字符串分割成小块 206
7.2.2在字符串中插入字符串 207
7.2.3字符串转化为数组 208
7.2.4数组转化为字符串 209
7.3字符串与空格 210
7.3.1去掉字符串左边的字符 210
7.3.2去掉字符串右边的字符 211
7.3.3去掉字符串两边的字符 212
7.4字符串的比较 213
7.4.1字符串比较 213
7.4.2使用函数比较字符串 214
7.5字符串的替换与插入 215
7.5.1替换当前字符串中的字符 215
7.5.2在指定位置插入字符串 216
7.5.3字符串替换函数与模板 217
7.6字符串与HTML 218
7.6.1把字符转化为HTML实体形式 218
7.6.2把HTML实体转化为特殊字符 220
7.6.3换行符的转换 220
7.7字符串与加密 221
7.7.1使用MIMEbase64编码加密和解密数据 221
7.7.2编码和解码URL 222
7.7.3字符串与MD5 223
7.8其他字符串函数 223
7.8.1计算字符串长度 223
7.8.2二进制数据转换成十六进制 224
7.8.3ASCII码与字符串 224
7.8.4HTML的标签控制 224
7.8.5解析URL 225
7.8.6字母大小写的转换 225
7.9常见问题 226
7.9.1关于模板应用的问题 226
7.9.2关于HTML编码的问题 226
第8章 正则表达式 227
8.1POSIX扩展正则表达式函数 227
8.1.1正则表达式基础 227
8.1.2正则表达式替换 229
8.1.3正则表达式匹配 230
8.1.4不区分大小写的正则表达式替换 231
8.1.5不区分大小写的正则表达式匹配 231
8.1.6使用正则表达式分割数组 232
8.1.7用正则表达式不区分大小写将字符串分割到数组中 233
8.1.8产生不区分大小写匹配的正则表达式 233
8.2PERL兼容正则表达式函数 234
8.2.1返回与模式匹配的数组单元 235
8.2.2正则表达式匹配 235
8.2.3全局正则表达式匹配 236
8.2.4转义正则表达式字符 237
8.2.5正则表达式的搜索和替换 238
8.2.6用正则表达式分割字符串 239
8.3正则表达式应用实例 240
8.3.1正则表达式的应用 241
8.3.2匹配特定数字 242
8.3.3匹配特定字符串 242
8.3.4常用正则表达式 243
8.4常见问题 243
8.4.1关于正则表达式的语法 243
8.4.2关于字符串替换 244
8.4.3关于正则表达式的选择 244
第9章 图形处理 245
9.1创建和销毁图形 245
9.1.1创建和销毁图形的方法 245
9.1.2新建一个真彩色图形 246
9.1.3使用已有图片创建新图形 246
9.2几何图形与图形填充 247
9.2.1画一个单一像素 247
9.2.2画一条线段 248
9.2.3画椭圆弧 249
9.2.4画椭圆 250
9.2.5画一个矩形 251
9.2.6画一个多边形 252
9.2.7区域填充 253
9.2.8画一道椭圆弧且填充 255
9.2.9画一个椭圆并填充 256
9.2.10画一个矩形并填充 257
9.2.11画一个多边形并填充 258
9.2.12区域填充到指定颜色的边界为止 259
9.3获取图形信息 261
9.3.1取得当前安装的GD库的信息 261
9.3.2取得图形文件信息 261
9.3.3取得图形宽度与高度 262
9.3.4取得图形类型的MIME类型 263
9.4图形与颜色 263
9.4.1为图形分配颜色 264
9.4.2定义透明色 264
9.4.3颜色与索引 265
9.5图形的处理 266
9.5.1复制图形的一部分 266
9.5.2复制图形并调整大小 267
9.5.3实现高清晰度缩略图 268
9.5.4对图形使用过滤器 269
9.5.5用给定角度旋转图形 271
9.5.6设定画线的风格 271
9.5.7设定画线用的画笔图形 272
9.5.8设定画线的宽度 273
9.5.9将某个颜色定义为透明色 274
9.5.10设定用于填充的贴图 274
9.6图形与字体 275
9.6.1输出一个字符 275
9.6.2输出字符串 276
9.6.3在图形中使用指定字体 277
9.6.4输出中文字符 278
9.7图形的输出 279
9.7.1将图形以PNG格式输出到浏览器或文件 279
9.7.2将图形以JPEG格式输出到浏览器或文件 280
9.7.3将图形以GIF格式输出到浏览器或文件 281
9.8其他图形函数 282
9.8.1取得服务器支持的图形类型 282
9.8.2检查图形是否为真彩色图形 283
9.9常见问题 283
9.9.1关于分配颜色 283
9.9.2关于图形格式 283
9.9.3关于中文字符 284
9.9.4关于函数参数 284
第三篇 数据库开发及应用 285
第10章 数据库的选择、创建及管理 285
10.1常用数据库简介 285
10.1.1小型关系型数据库MySQL 285
10.1.2开放源代码的数据库PostgreSQL 286
10.1.3轻量级数据库SQLite 286
10.2MySQL的安装配置与管理 286
10.2.1安装MySQL前的准备 286
10.2.2安装MySQL 287
10.2.3配置MySQL 288
10.2.4管理工具 293
10.2.5PHP配置文件与MySQL访问 293
10.2.6安装phpMyAdmin 294
10.2.7配置phpMyAdmin 294
10.2.8运行phpMyAdmin 298
10.3数据库的创建与管理 298
10.3.1创建及管理数据库 299
10.3.2备份和恢复数据库 300
10.4表的创建与管理 300
10.4.1MySQL字段类型 300
10.4.2创建表 302
10.4.3添加字段 305
10.4.4修改字段 308
10.4.5运行SQL语句 308
10.5SQL语法 310
10.5.1新建数据项 310
10.5.2查询数据 311
10.5.3更新数据 311
10.5.4删除数据 312
10.6常见问题 313
10.6.1字段原则 313
10.6.2SQL语法 313
第11章 PHP访问MySQL数据库 314
11.1使用PHP访问MySQL 314
11.1.1建立与关闭链接 314
11.1.2选择数据库 315
11.1.3运行SQL语句 316
11.1.4数据库编码 317
11.1.5以数字作为键名处理一行返回结果 317
11.1.6以字段作为键名处理一行返回结果 318
11.1.7更灵活的结果处理函数 319
11.1.8对象与结果集 321
11.1.9错误信息的处理 321
11.1.10其他MySQL函数 323
11.2使用自建类对MySQL进行访问 324
11.2.1创建MySQL类 324
11.2.2自建类的使用 329
11.2.3与SQL有关的方法 330
11.2.4与返回值有关的方法 330
11.2.5与错误信息有关的方法 331
11.2.6与表有关的方法 332
11.2.7其他方法 333
11.3使用ADODB访问MySQL 334
11.3.1安装ADODB 334
11.3.2使用ADODB链接MySQL 334
11.3.3使用ADODB插入记录 336
11.3.4使用ADODB取出记录 337
11.3.5使用ADODB更新记录 339
11.3.6使用ADODB删除记录 341
11.3.7使用ADODB实现分页 342
11.3.8使用ADODB输出CSV文件 343
11.4常见问题 344
11.4.1链接数据库 344
11.4.2字符集 344
第四篇 项目规划、版本管理和安全 345
第12章 项目规划 345
12.1软件开发流程 345
12.1.1瀑布式开发流程 345
12.1.2迭代式开发流程 346
12.2需求分析 346
12.2.1需求分析的工作 346
12.2.2功能需求 347
12.2.3软件特性 347
12.2.4项目需求 348
12.3编程方式 348
12.3.1面向过程 348
12.3.2面向对象 349
12.3.3编程方式的选择 350
12.4数据存储 350
12.4.1选择适合项目的存储方式 350
12.4.2配置信息与缓存 351
12.4.3数据库的选择 351
12.4.4项目功能与数据库 351
12.5常见问题 352
12.5.1关于开发流程 352
12.5.2关于需求分析 352
第13章 关于安全 353
13.1文件系统 353
13.1.1外部变量产生的安全问题 353
13.1.2特殊字符攻击 354
13.2数据库安全问题 355
13.2.1数据库权限与安全 355
13.2.2SQL注入与防范 359
13.3代码安全防范 361
13.3.1防范外部变量威胁 361
13.3.2数据加密 362
13.3.3函数与类的访问控制 364
13.3.4错误信息 366
13.4常见问题 366
13.4.1关于目录安全 366
13.4.2加强数据库安全性 366
第14章 版本管理 367
14.1SVN下载与安装 367
14.1.1SVN下载与安装 367
14.1.2SVN配置与运行 368
14.2SVN命令行客户端 370
14.2.1导入项目 370
14.2.2导出项目 371
14.2.3更新本地项目 372
14.2.4查看项目状态 373
14.2.5项目对比 374
14.2.6恢复项目 374
14.2.7项目提交 374
14.3SVN可视化管理界面 375
14.3.1TortoiseSVN下载与安装 375
14.3.2创建项目仓库 377
14.3.3导出项目 377
14.3.4更新本地项目 378
14.3.5项目提交 378
14.4SVN与开发工具 379
14.4.1开发工具的配置 379
14.4.2导入项目 382
14.4.3导出项目 383
14.5常见问题 385
14.5.1SVN运行问题 385
14.5.2SVN与CVS 385
14.5.3SVN命令运行乱码 385
第五篇 PHP实践及应用程序调试 387
第15章 实例:用户管理 387
15.1需求分析 387
15.1.1规划程序功能 387
15.1.2设计数据库与表 388
15.2公用程序的编写与引用 388
15.2.1实现认证码功能的文件 388
15.2.2与数据访问相关的公用文件 390
15.3用户注册页面的设计与实现 391
15.3.1用户注册页面设计 392
15.3.2实现用户注册 392
15.3.3处理用户提交的数据 397
15.4用户登录页面的设计与实现 399
15.5用户资料信息的设计与实现 402
15.5.1用户资料修改页面 402
15.5.2用户密码修改页面 404
15.5.3用户密码找回页面 407
15.6常见问题 409
15.6.1用户权限 409
15.6.2安全问题 409
第16章 实例:内容管理系统 410
16.1PHP与Smarty 410
16.1.1Smarty介绍 410
16.1.2Smarty的安装与使用 410
16.2需求分析 411
16.2.1规划程序功能 411
16.2.2规划数据库 411
16.3页面设计与程序编码 413
16.3.1公用文件的编写与引用 413
16.3.2前台脚本与模板 414
16.3.3管理员登录模块 417
16.3.4菜单管理模块 419
16.3.5内容发布模块 423
16.4常见问题 428
16.4.1数据库设计 428
16.4.2数据库存储 429
第17章 异常处理与调试 430
17.1异常处理函数 430
17.1.1程序运行过程描述 430
17.1.2返回最后的错误信息 431
17.1.3设置显示错误信息的级别 432
17.2异常处理 432
17.2.1异常处理类的使用 432
17.2.2扩展异常处理类 434
17.3PHP的调试方法 436
17.3.1错误报告 436
17.3.2定位错误代码 438
17.4常见问题 439
17.4.1关于错误报告 439
17.4.2调试信息 439
第六篇 PHP与Ajax组合应用 441
第18章 PHP与Ajax 441
18.1Ajax引擎与数据提交 441
18.1.1Ajax工作原理 441
18.1.2Ajax初始化 442
18.1.3使用GET方法提交请求 443
18.1.4使用POST方法提交请求 444
18.2PHP与数据格式 446
18.2.1PHP、JavaScript、XML 446
18.2.2PHP、JavaScript、JSON 449
18.2.3PHP与JavaScript 453
18.2.4Ajax通用类 456
18.3Ajax与开发框架 461
18.3.1SAjax安装与使用 461
18.3.2使用SAjax显示服务器时间 469
18.3.3使用SAjax提交表单 470
18.3.4SAjax的返回数据类型 472
18.4常见问题 473
18.4.1POST与GET方法 474
18.4.2中文乱码 474
第19章 实例:基于PHP和Ajax的用户管理 475
19.1需求分析 475
19.1.1用户界面 475
19.1.2PHP脚本 475
19.2页面设计与程序编码 475
19.2.1用户注册页面 476
19.2.2用户登录与资料管理界面 481
19.2.3响应客户端请求的PHP脚本 486
19.2.4找回密码页面 494
19.3常见问题 496
19.3.1客户端界面规划 496
19.3.2数据格式与编码 496
附录 PHP应用技巧 497