图书目录

目    录

 

第1章  专业程序员必备技术 1

1.1  面向对象的PHP 1

1.1.1  实例化和多态性 2

1.1.2  接口 6

1.1.3  魔术方法和常量 7

1.1.4  设计模式 10

1.2  使用MySQL联接 19

1.2.1  INNER JOIN(内部联接) 20

1.2.2  OUTER JOIN(外部联接) 23

1.2.3  其他JOIN(联接)语法 24

1.2.4  复杂联接 26

1.3  MySQL合并查询(UNION) 27

1.4  MySQL查询的GROUP BY

子句 29

1.4.1  WITH ROLLUP 30

1.4.2  HAVING 31

1.5  MySQL中的逻辑运算和

流程控制 32

1.5.1  逻辑运算符 32

1.5.2  流控制 34

1.6  维护关系完整性 35

1.6.1  约束条件 35

1.6.2  NOT NULL(非空值) 35

1.6.3  UNSIGNED(无符号数) 36

1.6.4  ENUM(枚举)和SET(集合) 36

1.6.5  UNIQUE KEY(主键) 37

1.6.6  FOREIGN KEY(外键) 37

1.6.7  使用服务器SQL模式 40

1.6.8  存储引擎完整性 44

1.6.9  MySQL潜在的行为 45

1.6.10  其他 45

1.7  MySQL中的子查询 45

1.7.1  子查询 45

1.7.2  联接子查询 46

1.7.3  派生表 46

1.7.4  复杂子查询 47

1.8  使用正则表达式 49

1.8.1  通用模式 49

1.8.2  高级正则表达式 52

1.8.3  在PHP中使用正则表达式 54

1.8.4  MySQL中的正则表达式 59

1.9  本章小结 62

第2章  高级PHP概念 65

2.1  需要解决的难题 65

2.2  迭代器和PHP标准库(SPL) 67

2.2.1  应用程序的样本视图 67

2.2.2  Iterator接口 69

2.2.3  Countable接口 73

2.2.4  SeekableIterator接口和

Pagination类 74

2.2.5  ArrayAccess接口 76

2.3  lambda函数和闭包 78

2.3.1  先前方式:lambda风格

(lambda-style)函数 78

2.3.2  理解闭包 80

2.3.3  利用查询构造器生成原型 83

2.4  本章小结 84

第3章  MySQL驱动程序和存储

引擎 87

3.1  MySQL驱动程序 88

3.2  MySQL存储引擎简介 88

3.3  默认存储引擎 92

3.3.1  MyISAM 93

3.3.2  InnoDB 97

3.3.3  Memory 102

3.3.4  Blackhole(黑洞) 107

3.3.5  Archive 108

3.3.6  Merge 109

3.3.7  CSV(逗号分隔值) 111

3.3.8  Federated(联合) 111

3.4  MySQL提供的其他引擎 117

3.4.1  Falcon 117

3.4.2  Maria 119

3.5  插件引擎 119

3.5.1  InnoDB 插件 120

3.5.2  PBXT 121

3.5.3  XtraDB 122

3.6  独立的引擎产品 122

3.6.1  InfiniDB 122

3.6.2  TokuDB 123

3.6.3  Infobright 123

3.7  其他MySQL产品 123

3.7.1  存储引擎补丁产品 123

3.7.2  MySQL相关产品 124

3.7.3  其他引擎 125

3.7.4  集成的硬件引擎 126

3.7.5  其他解决方案 126

3.7.6  Wafflegrid 127

3.8  本章小结 127

第4章  通过缓存提高性能 129

4.1  eAccelerator和APC 130

4.1.1  安装和配置APC 130

4.1.2  安装和配置eAccelerator 131

4.1.3  用户缓存 132

4.1.4  检查缓存状态 133

4.1.5  使用APC和eAccelerator

的时机 135

4.2  memcached(分布式内存对象

缓存系统) 136

4.2.1  memcached简介 136

4.2.2  memcached的作用 136

4.2.3  memcached工作机制 137

4.2.4  如何使用memcached 139

4.2.5  Gearman简介 142

4.2.6  缓存策略 142

4.3  安装memcached 143

4.4  启动memcached 146

4.4.1  启动脚本 147

4.4.2  测试memcached安装 149

4.4.3  memcached客户端 151

4.5  libmemcached 151

4.5.1  libmemcached特性 152

4.5.2  libmemcached实用程序 152

4.5.3  安装libmemcached 153

4.6  libmemcached实用程序 153

4.6.1  memcat 153

4.6.2  memflush 154

4.6.3  memcp 154

4.6.4  memstat 155

4.6.5  memrm 155

4.6.6  memslap 155

4.6.7  memerror 156

4.7  PECL/memcached 157

4.7.1  连接与实例化 158

4.7.2  设置客户端行为 160

4.7.3  存放和检索数据 161

4.7.4  追加和前置 165

4.7.5  删除 166

4.7.6  递增和递减 166

4.7.7  多键获取(Multi-get) 167

4.7.8  多键设置(Multi-set) 168

4.7.9  利用byKey方法和多键

获取/设置缓存位置 169

4.7.10  延迟获取(getDelayed) 171

4.7.11  CAS 173

4.7.12  统计信息 175

4.7.13  服务器列表 177

4.7.14  错误处理 177

4.8  实用缓存 178

4.8.1  memcached代理:moxi 184

4.8.2  其他“memcapable”

主键-值存储器 185

4.8.3  Tokyo Tyrant 186

4.9  本章小结 187

第5章  memcached和MySQL 189

5.1  MySQL Memcached函数 189

5.2  MySQL Memcached函数

工作机制 190

5.3  安装MySQL Memcached

函数 191

5.3.1  前提条件 191

5.3.2  配置源代码 192

5.3.3  编译源代码 192

5.3.4  安装UDF 192

5.3.5  检查安装 193

5.4  使用MySQL Memcached

函数 194

5.4.1  建立与memcached 

服务器的连接 195

5.4.2  数据设置函数 196

5.4.3  数据获取函数 202

5.4.4  递增和递减 202

5.4.5  行为函数 204

5.4.6  统计函数 208

5.4.7  版本函数 210

5.4.8  触发器(以及UDF)趣事 210

5.4.9  利用简单选择语句的

直读式缓存 214

5.4.10  更新 217

5.5  本章小结 218

第6章  高级MySQL 219

6.1  视图 219

6.1.1  访问权限 221

6.1.2  关于视图的其他信息 223

6.2  存储过程和函数 224

6.2.1  一般属性 224

6.2.2  存储例程逻辑 226

6.2.3  使用存储例程权限和

元数据 228

6.2.4  扩展存储例程 229

6.2.5  存储例程的缺点 229

6.2.6  用户自定义函数 229

6.3  触发器 229

6.3.1  未使用触发器 230

6.3.2  触发器语法 230

6.3.3  插入触发器 231

6.3.4  更新触发器 232

6.3.5  删除触发器 233

6.3.6  置换(Replace)触发器 234

6.3.7  触发器权限 235

6.4  事务 235

6.4.1  原子性 236

6.4.2  一致性 238

6.4.3  隔离性 240

6.4.4  持久性 246

6.4.5  隐式提交 248

6.5  复制 248

6.5.1  复制的用途 249

6.5.2  复制配置 249

6.5.3  测试MySQL复制 252

6.5.4  MySQL复制工作机制 254

6.5.5  测试MySQL复制 257

6.5.6  重要配置选项 258

6.5.7  重要复制命令 259

6.5.8  破坏复制 260

6.5.9  有选择地使用复制 261

6.5.10  MySQL复制的问题 262

6.5.11  MySQL复制的优势 263

6.6  事件 263

6.6.1  创建事件 264

6.6.2  启用事件调度程序 265

6.6.3  变更事件 266

6.6.4  事件特权 267

6.6.5  事件元数据 268

6.7  本章小结 269

第7章  使用用户自定义函数

扩展MySQL 271

7.1  UDF简介 272

7.2  开发UDF 272

7.2.1  UDF开发需求 273

7.2.2  UDF必需的函数 273

7.3  一个实际的UDF例子 274

7.3.1  UDF高层设计 275

7.3.2  设计UDF使用的算法 276

7.3.3  实现程序 276

7.3.4  生成UDF 290

7.3.5  安装UDF 293

7.3.6  运行新的UDF 293

7.4  与PHP一起使用UDF 295

7.4.1  建立和断开与MySQL

的连接 295

7.4.2  返回结果集数组 296

7.5  其他的UDF SQL语句 298

7.6  调试UDF 299

7.6.1  将gdb附加到一个已经

运行的进程 299

7.6.2  设置断点并单步执行

代码 301

7.6.3  处理字面值 302

7.6.4  调试小结 303

7.7  本章小结 303

第8章  编写扩展PHP 305

8.1  建立构建环境 305

8.2  使用EXT_SKEL创建扩展 306

8.2.1  创建和编译框架代码 307

8.2.2  使用函数定义文件 310

8.2.3  产生帮助文件 311

8.3  使用CODEGEN_PECL

建立扩展 311

8.3.1  建立基本的XML文件 312

8.3.2  定义函数 314

8.3.3  定义常量、INI指令和

全局变量 315

8.3.4  定义对象、方法和属性 316

8.4  PHP扩展中的变量 318

8.4.1  设置和测试zval 319

8.4.2  读取和比较zval 320

8.4.3  处理字符串 322

8.4.4  高级内存管理 324

8.5  在扩展中使用函数 326

8.5.1  基本定义 326

8.5.2  使用参数 327

8.5.3  定义参数信息 330

8.5.4  返回值 330

8.5.5  内置函数 331

8.5.6  创建和使用PHP API

函数 332

8.5.7  更多注意事项及创建

辅助函数 335

8.6  输入/输出 335

8.6.1  标准输出 336

8.6.2  文件和流 336

8.6.3  网络 339

8.6.4  错误和警告 341

8.7  数组和哈希表 342

8.7.1  建立和访问数组 342

8.7.2  访问和修改哈希表 343

8.8  对象和接口 344

8.8.1  创建一个类 344

8.8.2  与对象交互 350

8.9  常量、INI指令和全局变量 351

8.9.1  常量 351

8.9.2  全局变量和INI指令 352

8.10  描述扩展 355

8.10.1  打印描述 355

8.10.2  建立一个表 356

8.10.3  指定Logo 356

8.11  本章小结 357

第9章  全文搜索 359

9.1  MYSQL全文索引 359

9.1.1  使用MySQL全文索引 360

9.1.2  MySQL全文索引存在

的问题 362

9.2  更好的解决方案:

Sphinx全文搜索引擎 363

9.2.1  Sphinx的配置和安装 364

9.2.2  Sphinx.conf设置 365

9.2.3  启动Sphinx 374

9.2.4  搜索Sphinx 376

9.2.5  Delta索引 381

9.2.6  合并索引 386

9.3  使用Sphinx开发

应用程序 387

9.4  本章小结 391

第10章  PHP和MySQL中的

多任务 393

10.1  Gearman 393

10.2  Gearman简介 394

10.2.1  安装和运行Gearman 396

10.2.2  使用Gearman 

MySQL UDF 399

10.2.3  PHP和Gearman 401

10.3  Narada:一个搜索引擎

应用程序 404

10.3.1  下载Narada 404

10.3.2  Narada组件 405

10.3.3  搜索引擎应用程序的

数据库表 407

10.3.4  Sphinx设置 408

10.3.5  Gearman Worker 419

10.3.6  索引页面 425

10.3.7  一段特殊的代码 428

10.3.8  总体示意图 428

10.3.9  运行Narada 429

10.3.10  Narada的待办事项

列表 431

10.3.11  其他的作业服务器

系统 431

10.4  本章小结 432

第11章  重写规则 433

11.1  使用重写规则 433

11.1.1  重写规则的目的和

结构 434

11.1.2  理解和控制重写规

则流 435

11.1.3  条件规则 436

11.1.4  日志和优化 438

11.2  重写映射 439

11.2.1  内置映射 439

11.2.2  随机和文本查找 440

11.2.3  使用PHP和MySQL 441

11.3  本章小结 444

第12章  用户认证 445

12.1  设计数据库 446

12.2  基于HTTP的认证 448

12.2.1  基础认证 448

12.2.2  摘要认证 451

12.3  纯粹的PHP认证 454

12.3.1  使用PHP会话 454

12.3.2  建立安全cookie 458

12.4  访问控制列表 460

12.5  本章小结 461

第13章  深入INFORMATION_

SCHEMA 463

13.1  使用INFORMATION_

SCHEMA 463

13.2  表对象的表 465

13.3  其他数据库对象表 466

13.4  MYSQL状态表 468

13.4.1  PROCESSLIST (5.1) 468

13.4.2  SESSION_

STATUS/GLOBAL_

STATUS (5.1) 470

13.4.3  SESSION_

VARIABLES/GLOBAL_

VARIABLES (5.1) 471

13.5  MYSQL元数据表 472

13.5.1  CHARACTER_SETS 472

13.5.2  COLLATIONS 473

13.5.3  COLLATION_

CHARACTER_SET_

APPLICABILITY 473

13.6  MYSQL ACL 权限表 474

13.6.1  USER_PRIVILEGES 474

13.6.2  SCHEMA_

PRIVILEGES 474

13.6.3  TABLE_PRIVILEGES 475

13.6.4  COLUMN_

PRIVILEGES 476

13.7  INFORMATION_

SCHEMA扩展 476

13.8  SHOW命令对照 477

13.9  本章小结 478

第14章  安全性 479

14.1  加固MySQL服务器 479

14.1.1  默认安装 480

14.1.2  操作系统安全 481

14.1.3  MySQL安全权限 481

14.1.4  额外的数据库安全

措施 485

14.1.5  审计 486

14.2  编码数据 486

14.2.1  双向编码 486

14.2.2  单向编码 490

14.3  PHP安全处方 491

14.3.1  防止SQL注入 491

14.3.2  防止重放攻击 492

14.3.3  防止跨站脚本攻击 494

14.3.4  防止跨站请求伪造 496

14.3.5  自动化攻击 498

14.4  本章小结 499

第15章  命令行和Web服务 501

15.1  创建命令行脚本 501

15.1.1  读取命令行输入 502

15.1.2  输入提示 504

15.1.3  完成后的类 505

15.1.4  建立Cron作业 506

15.1.5  补充:彩色输出 506

15.2  建立Web服务 507

15.2.1  RESTful Web服务 508

15.2.2  SOAP Web服务 515

15.2.3  使用SOAP库 516

15.3  本章小结 524

第16章  优化和调试 525

16.1  调试PHP 525

16.2  优化查询 526

16.2.1  简化SQL 527

16.2.2  确定SQL语句 527

16.2.3  优化SELECT 528

16.2.4  优化UPDATE 537

16.2.5  优化DELETE 537

16.2.6  优化INSERT 539

16.2.7  优化REPLACE 540

16.2.8  优化INSERT…ON

DUPLICATE KEY

UPDATE 540

16.3  调试MYSQL 541

16.3.1  错误日志 542

16.3.2  慢查询日志 543

16.3.3  进程列表 544

16.3.4  其他命令 546

16.3.5  在MySQL中使用调

试器 546

16.4  本章小结 547