第 1章 安 装 10
1.1 属于自己的Web服务器 10
1.1.1 服务器安装方法1:手动安装所有的软件 11
1.1.2 服务器安装方法2:预打包安装 12
1.1.3 服务器安装方法3:虚拟服务器 12
1.2 你自己的虚拟机 14
1.2.1 在Windows上安装 14
1.2.2 在macOS上安装 14
1.2.3 在Linux上安装 14
1.3 启动Vagrant 15
第 2章 PHP简介 19
2.1 基本的语法和语句 21
2.2变量、操作符和注释 24
2.2.1 变量 24
2.2.2 操作符 24
2.2.3 注释 25
2.3 控制结构 26
2.3.1 if语句 26
2.3.2 循环 31
2.4 数组 39
2.5 用户交互和表单 46
在链接中传递变量 47
2.6 在表单中传递变量 54
Get还是Post 57
2.7 弥补缝隙 57
2.7.1 使用PHP模板 58
2.7.2 安全性问题 60
2.7.3 多个模板,一个控制器 63
2.8 接触数据库 66
第3章 MySQL简介 67
3.1 数据库简介 67
3.2 使用MySQL Workbench运行SQL查询 68
3.3 创建数据库 72
3.4 SQL语言 73
3.5 创建表 76
3.6 将数据插入表中 80
3.7 一点警告 84
3.8 查看存储的数据 85
3.9 修改存储的数据 89
3.10 删除存储的数据 90
3.11 让PHP进行输入 91
第4章 在Web上发布MySQL数据 92
4.1 蓝图 92
4.2 创建MySQL用户账户 93
4.3 使用PHP连接MySQL 96
4.4 面向对象编程一瞥 101
配置连接 103
4.5 用PHP发送SQL查询 107
4.6 处理SELECT结果集 111
4.7 提前考虑 120
4.8 将数据插入数据库 131
4.9 从数据库删除数据 142
4.10 完成任务 149
第5章 关系数据库设计 150
5.1 该署名的时候署名 150
5.2 首要原则:保持实体分离 152
5.3 查询多个表 157
5.4 简单关系 163
5.5 多对多关系 165
5.6 一对多和多对一 169
第6章 PHP结构化编程 170
6.1 包含文件 170
6.1.1 包含HTML内容 170
6.1.2 包含PHP代码 172
6.1.3 包含的类型 176
6.2 定制函数和函数库 177
变量作用域 180
6.3 将代码分解为可复用的函数 186
6.3.1 使用函数来替代查询 194
6.3.2 更新笑话 196
6.3.3 在Web站点上编辑笑话 197
6.3.4 删除函数 200
6.3.5 选择函数 202
6.4 最佳方法 203
第7章 改进插入和更新函数 205
7.1 改进更新笑话的函数 205
7.1.1 去除末尾的逗号 209
7.1.2 改进插入笑话的函数 211
7.2 处理日期 215
显示笑话日期 221
7.3 自己制作工具 224
7.4 通用型函数 225
7.5 使用这些函数 231
7.6 重复的代码是敌人 235
创建一个用于添加和编辑的页面 236
7.7 进一步打磨 241
7.8 继续前进 245
第8章 对象和类 246
8.1 类 247
8.2 公有和私有 251
8.3 对象 251
8.4 类变量 252
8.5 构造方法 259
8.6 类型提示 262
8.7 私有变量 264
8.8 使用DatabaseTable类 267
8.9 更新控制器以使用类 271
8.10 DRY 275
8.11 创建一个控制器类 276
8.12 单点入口 281
8.13 保持DRY原则 288
8.14 模板变量 294
8.15 小心extract 296
第9章 创建一个可扩展的框架 299
9.1 搜索引擎 300
9.2 让内容更加通用 302
9.3 提前考虑:用户注册 304
9.4 依赖性 309
9.5 URL重写 316
9.6 整理 320
遵从OOP 320
9.7 在不同站点上复用代码 328
9.8 通用的还是特定于项目的? 328
让EntryPoint更通用 330
9.9 自动加载和命名空间 337
9.10 区分大小写 339
9.11 实现自动加载程序 340
9.12 重定向 342
9.13 命名空间 344
9.14 用PSR-4自动加载 347
9.15 Composer简介 350
9.16 REST简介 350
9.17 使用接口增强依赖性结构 360
9.18 你自己的框架 362
第 10章 允许用户注册账户 364
10.1 验证E-mail地址 374
10.2 防止同一个人注册两次 375
10.3 安全地存储密码 380
10.4 注册完成 383
第 11章 cookie、session和访问控制 387
11.1 cookie 388
11.2 PHP会话 393
统计使用会话的访问 396
11.3 访问控制 396
11.3.1 登录 397
11.3.2 受保护的页面 405
11.3.3 接口和返回类型 410
11.3.4 使用验证类 413
11.3.5 登录错误消息 414
11.4 创建一个登录表单 416
11.5 退出 421
11.5.1 给登录用户增加添加笑话的功能 423
11.5.2 用户许可 426
11.5.3 任务完成了? 428
11.6 天高任鸟飞 432
第 12章 MySQL管理 433
12.1 备份MySQL数据库 434
12.1.1 使用MySQL Workbench进行数据库备份 434
12.1.2 使用mysqldump进行数据库备份 436
12.1.3 使用二进制日志的增量备份 438
12.2 MySQL访问控制技巧 441
12.2.1 主机名问题 442
12.2.2 锁在外面了 444
12.3 索引 445
多列索引 449
12.4 外键 452
12.5 安全比说抱歉好 454
第 13章 关 系 455
13.1 对象关系映射器 459
13.1.1 公有属性 460
13.1.2 实体类中的方法 461
13.1.3 使用来自DatabaseTable类的实体类 464
13.1.4 笑话对象 472
13.1.5 使用Joke类 476
13.1.6 引用 476
13.1.7 简化列表控制器动作 477
13.2 整理 480
缓存 481
13.3 笑话分类 483
列表页面 488
13.4 指定笑话的分类 491
给笑话指定分类 504
13.5 按照分类显示笑话 507
13.6 编辑笑话 513
13.7 用户角色 517
13.8 创建一个表单以分配许可 524
13.8.1 作者列表 525
13.8.2 编辑作者权限 526
13.8.3 设置许可 529
13.8.4 一种不同的方法 530
13.8.5 快速了解二进制 532
13.8.6 位计算能力 533
13.8.7 回到PHP 534
13.8.8 在数据库中存储按位许可 536
13.8.9 连接表或按位计算 537
13.8.10 整理 538
13.8.11 编辑其他人的笑话 539
13.9 大功告成 543
第 14章 用正则表达式进行内容格式 544
14.1 正则表达式 545
14.2 用正则表达式进行字符串替换 547
14.2.1 强调文本 548
14.2.2 段落 554
14.2.3 超链接 556
14.3 综合应用 558
14.4 排序、限定和偏移 564
14.4.1 排序 564
14.4.2 用LIMIT和OFFSET分页 569
14.4.3 分类中的分页 577
14.5 达到专业水准 581
下一步如何学习 582
附录A 使用示例代码 584
A.1一些警告 584
附录B Linux故障排除 585