本文节选自 《PHP与MySQL权威指南》第1.3节“ httpd.conf深入剖析”
Apache服务器的配置文件位于C:\ProgramFiles\Apache Software Foundation\Apache2.2\conf\目录下,一般会使用httpd.conf、access.conf和srm.conf三个配置文件来配置Apache服务器的行为。
httpd.conf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述;srm.conf是服务器的资源映射文件,它告诉服务器各种文件的MIME类型,以及如何支持这些文件;access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制;这三个配置文件控制着服务器各个方面的特性,因此为了服务器的正常运行需要设置好这三个文件。
实际上,目前常用的Apache版本已经将原来的httpd.conf、srm.conf与access.conf中的所有配置参数均放在了配置文件 httpd.conf中,只是为了兼容老版本(使用这三个配置文件的方式来源于NCSA-httpd)才使用了三个配置文件,而所提供的access.conf和srm.conf文件中没有具体的配置。由于在新版本的Apache中,所有的设置都被放在了httpd.conf中,因此只需要调整这个文件中的配置即可。下面使用默认提供的httpd.conf为例,解释Apache服务器的各个配置选项。不必因为它提供的配置参数太多而烦恼,基本上这些参数都很直观,也可以在不加改动的情况下运行Apache服务器。但是,如果需要调整Apache服务器的性能,以及增加对某种特性的支持,就需要了解这些配置参数的含义。本节将对httpd.conf文件进行详细的讲解。
本节将重点介绍Apache对主站点进行配置的一些基本配置选项,如下所示。
Apache的主要优势就是能更好地支持多处理器,在编译时通过使用--with-mpm选项来决定Apache的工作模式。如果知道当前的Apache使用的工作机制,则可以通过httpd -l命令列出Apache的所有模块,从而就可以知道其工作方式。
(1)prefork。如果httpd -l列出了prefork.c,则需要对下面的这段参数进行配置:
StartServers 5 #启动Apache时启动的Httpd进程个数
MinSpareServers 5 #服务器保持的最小空闲进程数
MaxSpareServers 10 #服务器保持的最大空闲进程数
MaxClients 150 #最大并发连接数
MaxRequestsPerChild 1000 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000
在该工作模式下,服务器启动后将启动5个httpd进程(如果加上父进程,一共6个,通过ps -ax|grephttpd命令可以看到)。当有用户请求连接时,Apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers。该模式是为了兼容一些旧版本的程序。
(2)worker。如果httpd -l列出worker.c,则需要对下面的内容进行配置:
StartServers 2 #启动Apache时启动的httpd进程个数
MaxClients 150 #最大并发连接数
MinSpareThreads 25 #服务器保持的最小闲线程数
MaxSpareThreads 75 #服务器保持的最大闲线程数
ThreadsPerChild 25 #每个子进程产生的线程数
MaxRequestsPerChild 0 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000
该模式由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。服务器在启动后会启动两个进程,每个进程产生的线程数是固定的(由ThreadsPerChild决定),因此启动时有50个线程。当50个线程不够用时,服务器自动fork一个进程,再产生25个线程。
(3)perchild。如果httpd -l列出perchild.c,则需要对下面的内容进行配置:
NumServers 5 #服务器启动时启动的子进程数
StartThreads 5 #每个子进程启动时启动的线程数
MinSpareThreads 5 #内存中的最小空闲线程数
MaxSpareThreads 10 #内存中得最大空闲线程数
MaxThreadsPerChild 2000 #每个线程最多被请求多少次后推出。0表示不受限制
MaxRequestsPerChild 10000 #每个子进程服务多少次后被重新fork,0表示不受限制
该模式下,子进程的数量是固定的,线程数不受限制。当客户端连接到服务器时,由空闲的线程提供服务。如果空闲的线程数不够,子进程就会自动产生线程来为新的连接服务。该模式用于多站点服务器。
默认情况下,Apache安装时会显示版本号及操作系统的版本,甚至会显示服务器上安装了哪些Apache模块。这些信息可能会被黑客利用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。我们可以通过修改ServerTokens模块对所显示的内容进行设置。
ServerTokens用来设置http头部返回的Apache版本信息。一般会带有如下几个参数,这些参数的含义和作用说明如下。
在Apache的httpd.conf中,KeepAlive表示保持连接活跃,类似于MySQL的永久连接。换句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再连接一次,避免每次请求都要新建一个连接而加重服务器的负担。
KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过了KeepAliveTimeOut的时间,第一次连接就会中断,再新建第二个连接。所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么Apache就会频繁地建立新连接,当然会耗费不少的资源;反过来,如果 KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么Apache中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。所以,到底要把KeepAliveTimeOut设置为多少,则要根据网站的流量和服务器的配置而定。相关配置说明如下:
-------------------
《PHP与MySQL权威指南》 目录:
推荐序
作者简介
前言
第一部分 准 备 篇
第1章 Apache基础 / 2
1.1 Apache介绍 / 2
1.1.1 Apache工作原理 / 2
1.1.2 Apache的特点 / 2
1.2 Windows下Apache的部署 / 3
1.2.1 Windows下Apache的安装和配置 / 3
1.2.2 启动、停止和重新启动Apache服务 / 6
1.2.3 Apache支持PHP语言 / 8
1.3 httpd.conf深入剖析 / 10
1.3.1 站点的基本配置 / 10
1.3.2 服务器优化配置 / 10
1.3.3 HTTP响应头的信息配置 / 11
1.3.4 持久性连接配置 / 12
1.4 日志记录 / 12
1.4.1 日志的配置 / 12
1.4.2 错误日志 / 14
1.4.3 访问日志 / 14
1.5 虚拟主机 / 16
1.5.1 基于主机名的虚拟主机 / 16
1.5.2 基于IP地址的虚拟主机 / 18
1.6 URL重写 / 18
1.6.1 mod_rewrite模块 / 18
1.6.2 常用指令 / 19
1.7 实战案例 / 25
1.7.1 防止图片盗链 / 25
1.7.2 Apache伪静态 / 25
1.7.3 用户访问权限设置 / 26
1.8 小结 / 28
第2章 PHP与MySQL开发环境的搭建 / 29
2.1 在Windows上安装IIS / 29
2.2 PHP的安装和配置 / 30
2.2.1 在Windows下的安装和配置 / 30
2.2.2 在Linux下的安装和配置 / 34
2.3 MySQL的安装和配置 / 37
2.3.1 Windows下的安装和配置 / 37
2.3.2 Linux下的安装和配置 / 40
2.4 PHP与MySQL连接 / 41
2.5 小结 / 43
第二部分 PHP篇
第3章 PHP基础 / 46
3.1 PHP的工作原理 / 46
3.2 PHP的版本变迁 / 46
3.3 PHP的特性 / 47
3.4 PHP的应用范围 / 48
3.5 PHP的基本语法 / 48
3.5.1 PHP 标记 / 48
3.5.2 PHP 中的注释 / 48
3.5.3 编写你的第一个PHP应用 / 49
3.6 PHP中的变量与常量 / 49
3.6.1 变量 / 49
3.6.2 常量 / 52
3.7 表达式 / 53
3.7.1 表达式分类 / 53
3.7.2 表达式的应用 / 54
3.7.3 操作数 / 55
3.7.4 操作符 / 55
3.8 PHP中的数据类型 / 56
3.8.1 布尔型 / 56
3.8.2 整型 / 56
3.8.3 字符串 / 56
3.8.4 数组 / 57
3.8.5 对象 / 58
3.8.6 其他类型 / 58
3.9 强制类型转换 / 59
3.9.1 显式和隐式强制类型转换 / 59
3.9.2 有用的强制类型转换函数 / 59
3.10 PHP的语句 / 59
3.10.1 循环语句 / 59
3.10.2 条件判断语句 / 61
3.11 小结 / 62
第4章 字符串和正则表达式 / 63
4.1 什么是字符串 / 63
4.2 定义一个字符串 / 63
4.2.1 使用单引号 / 63
4.2.2 使用双引号 / 63
4.2.3 使用定界符 / 64
4.3 获取字符串 / 65
4.4 拼接字符串 / 66
4.5 字符串的格式化 / 66
4.6 修改字母大小写 / 68
4.7 计算字符串长度和字符数目 / 68
4.8 字符串查找函数 / 70
4.8.1 字符串的查找 / 70
4.8.2 取得字符串的位置 / 71
4.9 字符串的复制和替换 / 71
4.9.1 字符串的复制 / 72
4.9.2 字符串的替换 / 72
4.10 字符串的比较 / 72
4.11 正则表达式的概念和语法 / 73
4.11.1 基本模式匹配 / 73
4.11.2 字符集 / 74
4.11.3 重复 / 75
4.12 使用正则表达式查找子字符串 / 76
4.13 使用正则表达式分割字符串 / 76
4.14 小结 / 77
第5章 数组 / 78
5.1 数组的基本概念 / 78
5.1.1 什么是数组 / 78
5.1.2 数组操作符 / 78
5.2 数字索引数组 / 79
5.2.1 数字索引数组的初始化 / 79
5.2.2 访问数组的内容 / 79
5.2.3 使用循环访问数组 / 80
5.3 数组的创建和添加 / 81
5.3.1 创建数组 / 81
5.3.2 添加数组 / 81
5.4 数组元素的添加和删除 / 82
5.4.1 在数组头添加元素 / 82
5.4.2 在数组尾添加元素 / 82
5.4.3 从数组头删除元素 / 83
5.4.4 从数组尾删除元素 / 83
5.5 数组的遍历 / 84
5.6 字符串与数组之间的转换 / 85
5.7 多维数组 / 85
5.8 数组的排序 / 86
5.8.1 sort()和rsort() / 86
5.8.2 asort()和arsort() / 87
5.8.3 ksort()和krsort() / 87
5.8.4 随机排序函数shuffle() / 87
5.8.5 多维数组的排序 / 87
5.9 数组判断函数 / 88
5.10 数组的合并与拆分 / 89
5.10.1 合并函数array_merge() / 89
5.10.2 合并函数array_combine() / 90
5.10.3 拆分函数 array_chunk() / 90
5.10.4 返回数组交集的函数array_intersect() / 91
5.10.5 将数组转换成标量变量 / 91
5.11 快速初始化数组 / 92
5.11.1 range()函数 / 92
5.11.2 array_fill()函数 / 92
5.12 在数组中查找值 / 93
5.13 定位数组元素 / 93
5.13.1 搜索数组 / 94
5.13.2 获取数组键 / 94
5.13.3 获取数组值 / 95
5.14 小结 / 95
第6章 PHP对文件的操作 / 96
6.1 打开/关闭文件 / 96
6.1.1 打开文件 / 96
6.1.2 关闭文件 / 97
6.2 读取文件 / 97
6.2.1 fread()和file()函数 / 97
6.2.2 fpassthru()函数 / 98
6.2.3 fgets()和fgetss()函数 / 98
6.2.4 fgetcsv()函数 / 99
6.3 写入文件 / 99
6.4 方便的文件处理函数 / 100
6.5 其他文件处理函数 / 101
6.6 移动文件指针小案例 / 102
6.7 文件锁定 / 102
6.8 小结 / 103
第7章 PHP函数与代码的重用性 / 104
7.1 定义和调用函数 / 104
7.2 参数 / 105
7.2.1 按值传递 / 106
7.2.2 按引用传递 / 107
7.2.3 默认参数值 / 107
7.3 函数内的变量范围 / 108
7.3.1 局部变量 / 108
7.3.2 静态变量 / 108
7.3.3 全局变量 / 109
7.4 函数的作用域和可用性 / 110
7.5 用变量存储函数的名称 / 111
7.6 递归函数 / 112
7.7 使用和包含文件 / 113
7.7.1 include与require 的应用 / 113
7.7.2 PHP模板化 / 115
7.8 小结 / 116
第8章 面向对象的程序设计 / 117
8.1 类和对象的关键概念 / 117
8.1.1 类 / 117
8.1.2 对象 / 118
8.1.3 字段 / 119
8.1.4 属性 / 120
8.1.5 常量 / 121
8.1.6 方法 / 121
8.1.7 $this关键字 / 122
8.2 构造方法和析构方法 / 122
8.2.1 构造方法 / 123
8.2.2 析构方法 / 124
8.3 静态类成员 / 125
8.3.1 静态属性 / 125
8.3.2 静态方法 / 125
8.4 对象克隆 / 126
8.4.1 clone一个对象 / 126
8.4.2 _clone()方法 / 127
8.5 继承 / 127
8.5.1 如何继承一个类 / 127
8.5.2 使用parent::关键字 / 128
8.5.3 instanceof关键字 / 129
8.5.4 覆盖父类的方法 / 129
8.6 多态 / 130
8.7 抽象类和接口 / 132
8.7.1 抽象类 / 132
8.7.2 接口 / 132
8.7.3 抽象类与接口的区别 / 134
8.8 命名空间 / 134
8.9 PHP5中的特殊方法 / 137
8.9.1 __toString() / 137
8.9.2 __autoload() / 138
8.9.3 __get()方法和__set()方法 / 138
8.9.4 __call / 139
8.10 小结 / 139
第9章 PHP的错误、异常处理和调试 / 140
9.1 常见的错误类型 / 140
9.1.1 语法错误 / 140
9.1.2 逻辑错误 / 140
9.1.3 未定义错误 / 141
9.1.4 环境错误 / 141
9.1.5 运行错误 / 142
9.2 错误处理机制 / 142
9.2.1 错误级别列表 / 142
9.2.2 错误处理函数 / 144
9.2.3 自定义错误页面 / 144
9.2.4 错误日志 / 145
9.3 异常处理 / 146
9.3.1 异常的基本使用 / 146
9.3.2 PHP的基本异常类 / 147
9.3.3 try、throw和catch / 147
9.3.4 创建自定义的exception类 / 148
9.3.5 多个异常 / 149
9.3.6 重新抛出异常 / 151
9.3.7 设置顶层异常处理器(Top Level Exception Handler) / 152
9.3.8 异常的规则 / 152
9.4 使用Xdebug进行调试 / 152
9.4.1 Xdebug的安装 / 153
9.4.2 Xdebug的使用 / 154
9.4.3 Xdebug的特制函数 / 155
9.5 小结 / 156
第10章 PHP与HTML的交互 / 157
10.1 PHP和Web表单 / 157
10.1.1 表单基本操作 / 157
10.1.2 表单安全性 / 159
10.1.3 常用表单数据的验证方法 / 162
10.2 通过PHP上传文件 / 164
10.2.1 PHP文件上传/资源指令 / 164
10.2.2 上传错误消息 / 164
10.2.3 PHP文件上传示例 / 165
10.3 小结 / 167
第三部分 MySQL篇
第11章 MySQL部署与基本使用 / 170
11.1 MySQL概述 / 170
11.1.1 MySQL为何如此流行 / 170
11.1.2 MySQL特性 / 171
11.2 登录与退出MySQL / 173
11.3 创建、删除数据库和用户 / 174
11.4 MySQL用户管理及权限分配 / 174
11.4.1 MySQL访问权限系统 / 175
11.4.2 设置用户权限 / 176
11.4.3 GRANT和REVOKE命令 / 177
11.5 MySQL优化 / 179
11.6 小结 / 181
第12章 数据库操作:PHP+MySQL / 182
12.1 mysql扩展 / 182
12.1.1 数据库连接 / 182
12.1.2 向数据库中插入数据 / 183
12.2 mysqli扩展 / 186
12.2.1 mysqli的面向对象和面向过程编程方式 / 186
12.2.2 预准备语句 / 189
12.2.3 多查询 / 191
12.3 数据库抽象层 / 192
12.3.1 PDO / 192
12.3.2 ADODB / 195
12.4 小结 / 200
第13章 MySQL中SQL语句的应用 / 201
13.1 SQL语句的基本应用 / 201
13.2 常数列的最大值 / 202
13.3 拥有某列最大值的行 / 202
13.4 按组排列的最大值 / 203
13.5 提取某列在组间的最大值 / 203
13.6 使用用户变量 / 203
13.7 使用AUTO_INCREMENT / 204
13.8 常用的字符串函数 / 205
13.9 常用的日期和时间函数 / 208
13.10 导入数据 / 211
13.10.1 LOAD DATA INFILE / 211
13.10.2 mysqlimport / 212
13.11 导出数据
13.11.1 SELECT INTO OUTFILE / 213
13.11.2 mysqldump / 214
13.12 小结 / 214
第14章 MySQL数据库开发 / 215
14.1 MySQL的数据列类型 / 215
14.1.1 数值类型列 / 215
14.1.2 字符串类型列 / 216
14.2 字符集支持 / 217
14.3 索引的使用 / 219
14.3.1 数据库索引 / 219
14.3.2 主要索引介绍 / 220
14.3.3 索引最佳实践 / 221
14.4 事务处理 / 222
14.4.1 非事务实现方法 / 222
14.4.2 事务实现方法 / 223
14.5 外键与数据的完整性 / 227
14.6 数据库内部语句和语法 / 234
14.6.1 ALTER DATABASE语法 / 234
14.6.2 ALTER TABLE语法 / 234
14.6.3 CREATE DATABASE语法 / 238
14.6.4 CREATE INDEX语法 / 239
14.6.5 CREATE TABLE语法 / 239
14.6.6 DROP DATABASE语法 / 243
14.6.7 DROP INDEX语法 / 244
14.6.8 DROP TABLE语法 / 244
14.6.9 RENAME TABLE语法 / 244
14.7 数据库操作语句和语法 / 245
14.7.1 DELETE语法 / 245
14.7.2 DO语法 / 246
14.7.3 HANDLER语法 / 247
14.7.4 INSERT语法 / 248
14.7.5 LOAD DATA INFILE语法 / 253
14.7.6 FIELDS分隔符 / 254
14.7.7 REPLACE语法 / 257
14.7.8 SELECT语法 / 258
14.7.9 TRUNCATE语法 / 261
14.7.10 UPDATE语法 / 262
14.7.11 EXPLAIN语法 / 263
14.8 存储过程 / 267
14.9 小结 / 268
第15章 MySQL数据管理 / 269
15.1 MySQL的分区 / 269
15.1.1 RANGE分区 / 271
15.1.2 LIST分区 / 273
15.1.3 RANGE和LIST分区的管理 / 275
15.2 MySQL的备份 / 280
15.3 MySQL的恢复 / 281
15.4 MySQL复制 / 281
15.5 小结 / 283
第16章 MySQL的存储引擎及表类型 / 284
16.1 MyISAM存储引擎 / 285
16.1.1 MyISAM启动选项 / 286
16.1.2 损坏的MyISAM表 / 287
16.1.3 未被适当关闭的表的问题 / 288
16.2 InnoDB存储引擎 / 288
16.2.1 InnoDB配置 / 289
16.2.2 InnoDB启动选项 / 293
16.2.3 创建InnoDB表空间 / 296
16.2.4 处理InnoDB初始化问题 / 297
16.2.5 备份和恢复InnoDB数据库 / 297
16.2.6 添加和删除InnoDB数据和日志文件 / 298
16.3 MERGE存储引擎 / 299
16.4 MEMORY(HEAP)存储引擎 / 302
16.5 BDB(BerkeleyDB)存储引擎 / 303
16.5.1 BDB支持的操作系统 / 303
16.5.2 BDB启动选项 / 303
16.6 EXAMPLE存储引擎 / 304
16.7 FEDERATED存储引擎 / 304
16.7.1 FEDERATED存储引擎的描述 / 304
16.7.2 如何使用FEDERATED表 / 305
16.7.3 FEDERATED存储引擎的局限性 / 306
16.8 ARCHIVE存储引擎 / 306
16.9 CSV存储引擎 / 307
16.10 BLACKHOLE存储引擎 / 307
16.11 MySQL最新版本的功能 / 308
16.12 小结 / 308
第17章 phpMyAdmin / 309
17.1 phpMyAdmin的安装与配置 / 309
17.1.1 phpMyAdmin的安装 / 309
17.1.2 phpMyAdmin的配置 / 310
17.1.3 phpMyAdmin配置完成后可能遇到的问题 / 311
17.2 phpMyAdmin的使用 / 311
17.2.1 phpMyAdmin的登录 / 311
17.2.2 phpMyAdmin基本功能介绍 / 312
17.2.3 数据库管理 / 317
17.2.4 数据表管理 / 318
17.2.5 数据记录管理 / 322
17.3 小结 / 323
第四部分 二次开发实战篇
第18章 Smarty应用 / 326
18.1 什么是模板引擎 / 328
18.2 Smarty模板引擎 / 329
18.3 Smarty的安装及初始化配置 / 330
18.3.1 安装Smarty / 331
18.3.2 初始化Smarty类库的默认设置 / 331
18.3.3 程序注释 / 333
18.3.4 简单示例 / 333
18.4 Smarty的使用步骤 / 335
18.5 变量使用 / 336
18.5.1 模板中输出PHP分配的变量 / 336
18.5.2 使用保留变量 / 338
18.6 变量调解器 / 339
18.7 模板的控制结构 / 349
18.7.1 条件选择结构:if-elseif-else / 350
18.7.2 foreach / 351
18.7.3 section / 352
18.8 Smarty缓存 / 353
18.8.1 在Smarty中控制缓存 / 354
18.8.2 每个页面使用多个缓存 / 355
18.8.3 为缓存实例消除处理开销 / 356
18.8.4 清除缓存 / 357
18.8.5 关闭局部缓存 / 358
18.9 小结 / 359
第19章 Zend 系列开发工具 / 360
19.1 Zend Core集成环境 / 360
19.1.1 Zend Core介绍 / 360
19.1.2 Zend Core的安装 / 361
19.2 Zend Optimizer优化器 / 365
19.2.1 Zend Optimizer介绍 / 365
19.2.2 Zend Optimizer的安装 / 365
19.2.3 Zend Optimizer的优化及配置 / 368
19.3 Zend Studio 开发工具 / 369
19.3.1 Zend Studio介绍 / 369
19.3.2 Zend Studio的下载与安装 / 371
19.3.3 Zend Studio功能及组件 / 374
19.3.4 Zend Studio的用户界面 / 375
19.3.5 Zend Studio项目管理 / 386
19.4 Zend Server服务器 / 393
19.4.1 Zend Server简介 / 393
19.4.2 Zend Server安装 / 395
19.5 Zend Guard安全卫士 / 397
19.5.1 Zend Guard简介 / 398
19.5.2 Zend Guard安装 / 398
19.5.3 使用Zend Guard加密文件 / 400
19.6 Zend Platform应用平台 / 406
19.6.1 Zend Platform 概述 / 406
19.6.2 Zend Platform的安装 / 407
19.7 小结 / 412
第20章 SVN版本控制及团队管理 / 413
20.1 基本概念 / 413
20.1.1 什么是版本控制 / 413
20.1.2 什么是 Subversion / 413
20.1.3 什么是版本库 / 414
20.2 SVN服务器的安装与配置 / 414
20.2.1 基于svnserve的SVN配置 / 414
20.2.2 基于Apache的SVN服务器 / 421
20.3 客户端工具TortoiseSVN / 424
20.3.1 什么是TortoiseSVN / 425
20.3.2 下载与安装TortoiseSVN / 425
20.3.3 TortoiseSVN使用 / 428
20.4 小结 / 449
第21章 UCenter开发实战 / 450
21.1 UCenter总述 / 450
21.1.1 UCenter简介 / 450
21.1.2 UCenter安装 / 452
21.1.3 使用UCenter / 458
21.2 UCenter源代码分析 / 463
21.2.1 UCenter系统架构 / 464
21.2.2 UCenter的目录结构 / 464
21.2.3 UCenter核心代码:/index.php / 465
21.2.4 UCenter核心代码:/admin.php / 468
21.3 UCenter接口原理 / 469
21.3.1 接口函数定义的程序文件/uc_client/client.php / 469
21.3.2 通知接口文件uc.php / 488
21.4 UCenter接口开发实例—读取论坛主题或帖子数量信息 / 493
21.5 小结 / 496
第22章 Discuz! 论坛开发实战 / 497
22.1 Discuz!总述 / 497
22.1.1 Discuz!简介 / 497
22.1.2 Discuz!特性 / 498
22.1.3 Discuz!安装 / 498
22.1.4 使用Discuz! / 503
22.2 Discuz!的源代码分析 / 510
22.2.1 Discuz!系统架构 / 510
22.2.2 Discuz!数据库结构 / 510
22.2.3 Discuz!的目录及文件结构 / 513
22.2.4 Discuz!核心代码:/include/common.inc.php / 514
22.2.5 Discuz!核心代码:/include/global.func.php / 533
22.2.6 Discuz!核心代码:/include/db_mysql.class.php / 538
22.2.7 Discuz!核心代码:/include/template.func.php / 540
22.2.8 Discuz!核心代码:/include/cache.func.php / 543
22.2.9 Discuz!核心代码:/admincp.php / 545
22.3 Discuz!的二次开发实例—多语言切换(一) / 548
22.3.1 改造目录结构 / 548
22.3.2 修改数据库 / 548
22.3.3 修改language()函数 / 549
22.3.4 修改template()函数 / 549
22.3.5 修改parse_template()函数 / 550
22.4 Discuz!的二次开发实例—多语言切换(二) / 551
22.4.1 插件模块概述 / 551
22.4.2 多语言切换后台管理 / 555
22.4.3 获取用户选择或系统设定的语言包信息 / 558
22.4.4 制作语言包切换菜单 / 559
22.4.5 编写插件语言包 / 561
22.5 小结 / 561
第23章 UCenter Home SNS系统开发实战 / 562
23.1 UCenter Home总述 / 562
23.1.1 UCenter Home简介 / 562
23.1.2 UCenter Home的安装 / 563
23.1.3 UCenter Home的使用 / 568
23.2 UCenter Home源代码分析 / 582
23.2.1 UCenter Home目录及文件结构 / 582
23.2.2 核心代码:/source/common.php / 583
23.2.3 核心代码:/source/function_common.php / 587
23.2.4 核心代码:/source/class_mysql.php / 594
23.2.5 核心代码: /do.php / 595
23.3 UCenter Home的内部机制 / 598
23.3.1 UCenter Home模板机制 / 598
23.3.2 UCenter Home缓存机制 / 600
23.3.3 UCenter Home登录验证机制 / 602
23.3.4 UCenter Home道具机制 / 604
23.3.5 UCenter Home任务的计划机制 / 605
23.3.6 UCenter Home动态机制 / 608
23.3.7 UCenter Home评论机制 / 611
23.3.8 UCenter Home权限机制 / 613
23.4 UCenter Home的二次开发实例—《记账本》插件 / 616
23.4.1 《记账本》代码设计 / 616
23.4.2 《记账本》插件的安装说明 / 621
23.5 小结 / 621
第24章 ShopNC多用户商城开发实战 / 622
24.1 ShopNC总述 / 622
24.1.1 ShopNC综合多用户商城系统简介 / 622
24.1.2 ShopNC的安装 / 622
24.2 ShopNC多用户商城的源代码分析 / 625
24.2.1 ShopNC多用户商城的系统特性 / 625
24.2.2 ShopNC系统结构 / 626
24.2.3 ShopNC模板引擎 / 627
24.2.4 核心模块的简要说明 / 627
24.2.5 核心模块的详细描述 / 628
24.2.6 核心模块的使用说明 / 675
24.3 ShopNC插件的开发 / 677
24.4 ShopNC支付接口 / 683
24.5 ShopNC商品页静态化 / 685
24.6 ShopNC商品图片上传 / 686
24.7 小结 / 688
第25章 PHPCMS V9内容管理系统开发实战 / 689
25.1 PHPCMS V9总述 / 689
25.1.1 PHPCMS简介 / 689
25.1.2 PHPCMS V9的新特性 / 690
25.1.3 PHPCMS V9的安装 / 694
25.2 PHPCMS源码分析 / 698
25.2.1 目录及文件结构 / 698
25.2.2 模板语法规则 / 702
25.3 PHPCMS V9二次开发介绍 / 703
25.3.1 开发接口概述 / 703
25.3.2 系统类库与函数库的调用 / 703
25.3.3 理解模块和控制器 / 704
25.3.4 二次开发的命名规范 / 704
25.3.5 二次开发的流程 / 704
25.3.6 二次开发技巧 / 705
25.4 PC标签的使用说明 / 706
25.4.1 PC标签概述 / 706
25.4.2 PC标签的语法 / 707
25.4.3 PC标签的保留参数 / 707
25.4.4 PC标签数据的显示 / 708
25.4.5 PC标签的分类 / 708
25.4.6 PC标签工具箱 / 708
25.5 PHPCMS和UCenter的整合 / 711
25.5.1 PHPSSO简介 / 711
25.5.2 PHPSSO与UCenter的整合 / 711
25.5.3 PHPSSO与UCenter整合的常见问题 / 715
25.6 PHPCMS二次开发实例—留言本 / 716
25.6.1 需求分析 / 717
25.6.2 数据库和数据表的设计 / 718
25.6.3 创建模块目录 / 718
25.6.4 创建数据模型类文件 / 719
25.6.5 开发模块控制器和函数 / 720
25.7 小结 / 736
附录A Comsenz产品开发—UCenter 1.5 数据字典 / 737
附录B Discuz! 7.0.0 数据字典 / 743
附录C UC Home 2.0数据字典 / 765
附录D ShopNC 2.0数据字典 / 793
附录E PHPCMS V9数据字典 / 812
后记 / 849