第1章 安装 1
1.1 属于自己的Web服务器 1
1.1.1 服务器安装方法1:手动安装所有的软件 2
1.1.2 服务器安装方法2:预打包安装 2
1.1.3 服务器安装方法3:虚拟服务器 3
1.2 你自己的虚拟机 4
1.2.1 在Windows上安装 4
1.2.2 在macOS上安装 4
1.2.3 在Linux上安装 4
1.3 启动Vagrant 4
第2章 PHP简介 8
2.1 基本的语法和语句 9
2.2 变量、操作符和注释 11
2.2.1 变量 11
2.2.2 操作符 11
2.2.3 注释 12
2.3 控制结构 12
2.3.1 if语句 12
2.3.2 循环 16
2.4 数组 21
2.5 用户交互和表单 25
2.6 在表单中传递变量 29
2.7 弥补缝隙 31
2.7.1 使用PHP模板 31
2.7.2 安全性问题 32
2.7.3 多个模板,一个控制器 34
2.8 接触数据库 36
第3章 MySQL简介 37
3.1 数据库简介 37
3.2 使用MySQL Workbench运行SQL查询 38
3.3 创建数据库 41
3.4 SQL语言 42
3.5 创建表 44
3.6 将数据插入表中 46
3.7 一点警告 49
3.8 查看存储的数据 50
3.9 修改存储的数据 52
3.10 删除存储的数据 53
3.11 让PHP进行输入 53
第4章 在Web上发布MySQL数据 55
4.1 蓝图 55
4.2 创建MySQL用户账户 56
4.3 使用PHP连接MySQL 58
4.4 面向对象编程一瞥 61
4.5 用PHP发送SQL查询 64
4.6 处理SELECT结果集 67
4.7 提前考虑 71
4.8 将数据插入数据库 78
4.9 从数据库删除数据 84
4.10 完成任务 89
第5章 关系数据库设计 90
5.1 该署名时署名 90
5.2 首要原则:保持实体分离 92
5.3 查询多个表 94
5.4 简单关系 98
5.5 多对多关系 99
5.6 一对多和多对一 101
第6章 PHP结构化编程 102
6.1 包含文件 102
6.1.1 包含HTML内容 102
6.1.2 包含PHP代码 103
6.1.3 包含的类型 105
6.2 定制函数和函数库 106
6.3 将代码分解为可复用的函数 112
6.3.1 使用函数来替代查询 115
6.3.2 更新笑话 117
6.3.3 在Web站点上编辑笑话 117
6.3.4 删除函数 119
6.3.5 选择函数 120
6.4 最佳方法 121
第7章 改进插入和更新函数 122
7.1 改进更新笑话的函数 122
7.1.1 去除末尾的逗号 124
7.1.2 改进插入笑话的函数 125
7.2 处理日期 127
7.3 自己制作工具 132
7.4 通用型函数 133
7.5 使用这些函数 137
7.6 重复的代码是敌人 139
7.7 进一步打磨 143
7.8 继续前进 145
第8章 对象和类 146
8.1 类 146
8.2 公有和私有 149
8.3 对象 149
8.4 类变量 150
8.5 构造方法 154
8.6 类型提示 155
8.7 私有变量 157
8.8 使用DatabaseTable类 158
8.9 更新控制器以使用类 161
8.10 DRY 163
8.11 创建一个控制器类 164
8.12 单点入口 167
8.13 保持DRY原则 171
8.14 模板变量 174
8.15 小心extract 176
第9章 创建一个可扩展的框架 178
9.1 搜索引擎 179
9.2 让内容更加通用 180
9.3 提前考虑:用户注册 181
9.4 依赖性 184
9.5 URL重写 188
9.6 整理 190
9.7 在不同站点上复用代码 194
9.8 通用的,还是特定于项目的? 194
9.9 自动加载和命名空间 199
9.10 区分大小写 200
9.11 实现自动加载程序 201
9.12 重定向 201
9.13 命名空间 203
9.14 用PSR-4自动加载 204
9.15 Composer简介 206
9.16 REST简介 206
9.17 使用接口增强依赖性结构 211
9.18 你自己的框架 213
第10章 允许用户注册账户 214
10.1 验证E-mail地址 219
10.2 防止同一个人注册两次 220
10.3 安全地存储密码 222
10.4 注册完成 224
第11章 cookie、session和访问控制 227
11.1 cookie 227
11.2 PHP会话 230
11.3 访问控制 232
11.3.1 登录 233
11.3.2 受保护的页面 237
11.3.3 接口和返回类型 239
11.3.4 使用验证类 241
11.3.5 登录错误消息 241
11.4 创建一个登录表单 242
11.5 退出 245
11.5.1 给登录用户增加添加笑话的功能 246
11.5.2 用户许可 248
11.5.3 任务是否完成了 249
11.6 天高任鸟飞 251
第12章 MySQL管理 252
12.1 备份MySQL数据库 252
12.1.1 使用MySQL Workbench进行数据库备份 253
12.1.2 使用mysqldump进行数据库备份 254
12.1.3 使用二进制日志的增量备份 255
12.2 MySQL访问控制技巧 256
12.2.1 主机名问题 257
12.2.2 锁在外面了 258
12.3 索引 259
12.4 外键 263
12.5 安全比说抱歉好 264
第13章 关系 265
13.1 对象关系映射器 267
13.1.1 公有属性 268
13.1.2 实体类中的方法 268
13.1.3 使用来自DatabaseTable类的实体类 270
13.1.4 笑话对象 274
13.1.5 使用Joke类 276
13.1.6 引用 276
13.1.7 简化列表控制器动作 277
13.2 整理 279
13.3 笑话分类 280
13.4 指定笑话的分类 284
13.5 按照分类显示笑话 293
13.6 编辑笑话 296
13.7 用户角色 298
13.8 创建一个表单以分配许可 302
13.8.1 作者列表 302
13.8.2 编辑作者权限 303
13.8.3 设置许可 304
13.8.4 一种不同的方法 305
13.8.5 快速了解二进制 306
13.8.6 位计算能力 306
13.8.7 回到PHP 307
13.8.8 在数据库中存储按位许可 308
13.8.9 连接表或按位计算 309
13.8.10 整理 309
13.8.11 编辑其他人的笑话 310
13.9 大功告成 312
第14章 用正则表达式进行内容格式化 313
14.1 正则表达式 313
14.2 用正则表达式进行字符串替换 315
14.2.1 强调文本 315
14.2.2 段落 318
14.2.3 超链接 320
14.3 综合应用 321
14.4 排序、限定和偏移 324
14.4.1 排序 324
14.4.2 用LIMIT和OFFSET分页 327
14.4.3 分类中的分页 331
14.5 达到专业水准 334
附录A 使用示例代码 335
附录B Linux故障排除 336