导航:首页 > 编程语言 > php第一个程序

php第一个程序

发布时间:2024-03-31 05:50:49

‘壹’ php的发展史

PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf 为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。
在1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档。并且发布了PHP1.0!在这的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要求增加一些特性。比如循环语句和数组变量等等;在新的成员加入开发行列之后,Rasmus Lerdorf 在1995年6月8日将 PHP/FI 公开发布,希望可以透过社群来加速程序开发与寻找错误。这个发布的版本命名为 PHP 2,已经有 PHP 的一些雏型,像是类似 Perl 的变量命名方式、表单处理功能、以及嵌入到 HTML 中执行的能力。程序语法上也类似 Perl,有较多的限制,不过更简单、更有弹性。PHP/FI加入了对MySQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI。

ISAPI筛选器
在1997年,任职于 Technion IIT公司的两个以色列程序设计师:Zeev Surask
i 和 Andi Gutmans,重写了 PHP 的剖析器,成为 PHP 3 的基础。而 PHP 也在这个时候改称为PHP:Hypertext Preprocessor.[5]。经过几个月测试,开发团队在1997年11月发布了 PHP/FI 2。随后就开始 PHP 3 的开放测试,最后在1998年6月正式发布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 发布后开始改写PHP 的核心,这个在1999年发布的剖析器称为 Zend Engine[7],他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。
在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式发布,2004年7月13日则发布了PHP 5,PHP 5则使用了第二代的Zend Engine[5]。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强。PHP 4已经不会继续

PHP
更新,以鼓励用户转移到PHP 5。
2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和 Safe mode的功能。
PHP最新稳定版本:5.3.21(2013.1.17)
PHP最新发布版本:5.5.1(2013.7.18)修复了20个bug及其一些优化。
2013年6月20日,PHP开发团队自豪地宣布立即推出PHP 5.5.0。此版本包含了大量的新功能和bug修复。需要开发者特别注意的一点是不再支持 Windows XP 和 2003 系统。

‘贰’ php工作流程

PHP是运行与服务器端的脚本语言,实现了数据库与网页之间的数据交互。一个完整的PHP网站系统由以下几部分组成。
操作系统
网络中的 服务器也是一台计算机,因此需要操作系统。PHP有着良好的跨平台性,支持windows和linux等操作系统
web服务器
当一台计算机中安装操作系统后,还需要安装web服务器才能进行http访问。常见的web服务器软件有Apache、IIS、Nginx等
数据库
用于网站数据的存储和管理。PHP支持多种数据库,包括MySQL、sql server,oracle。db2
PHP软件
用于解析PHP脚本文件、访问数据库等,是运行PHP代码所必须的软件。
浏览器
是浏览网页的客户端。由于PHP脚本是在服务器端运行的,因此通过浏览器看到的是经过PHP处理后的html结果。。Zend引擎:Zend整体用纯C实现,是PHP的内核部分,他将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如:hashtable、OO)、内存分配机制及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。

2、Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension的典型应用)。

3、Sapi:Sapi全称Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。

4、上层应用:这就是我们平时编写的PHP程序,通过不同的spai方式得到各种各样的应用模式,如何通过webserver实现web应用、在命令行下已脚本方式运行等等。

‘叁’ php鏄浠涔堬纻

Php锛屾槸鑻辨枃瓒呯骇鏂囨湰棰勫勭悊璇瑷Hyprtext Preprocessor镄勭缉鍐欍 鏄涓绉岺TML鍐呭祵寮忕殑璇瑷锛屾槸涓绉嶅湪链嶅姟鍣ㄧ镓ц岀殑宓屽叆HTML鏂囨。镄勮剼链璇瑷锛岃瑷镄勯庢牸链夌被浼间簬C璇瑷銆傝骞挎硾杩愮敤銆

PHP 镫鐗圭殑璇娉曟贩钖堜简 C銆丣ava銆丳erl 浠ュ强 PHP 镊鍒涙柊镄勮娉曘傚畠鍙浠ユ瘆CGI鎴栬匬erl镟村揩阃熺殑镓ц屽姩镐佺绣椤点傜敤PHP锅氩嚭镄勫姩镐侀〉闱涓庡叾浠栫殑缂栫▼璇瑷鐩告瘆锛孭HP鏄灏嗙▼搴忓祵鍏ュ埌HTML鏂囨。涓铡绘墽琛岋纴镓ц屾晥鐜囨瘆瀹屽叏鐢熸垚HTML镙囱扮殑CGI瑕侀珮璁稿氾绂PHP杩桦彲浠ユ墽琛岀紪璇戝悗浠g爜锛岀紪璇戝彲浠ヨ揪鍒板姞瀵嗗拰浼桦寲浠g爜杩愯岋纴浣夸唬镰佽繍琛屾洿蹇銆侾HP鍏锋湁闱炲父寮哄ぇ镄勫姛鑳斤纴镓链夌殑CGI镄勫姛鑳絇HP閮借兘瀹炵幇锛岃屼笖鏀鎸佸嚑涔庢墍链夋祦琛岀殑鏁版嵁搴扑互鍙婃搷浣灭郴缁熴

‘肆’ PHP学习手册的目 录

第一篇 基础篇
第1章 了解PHP 18
1.1 什么是PHP 19
1.2 选择PHP的理由 19
1.3 如何学好编程 22
1.4 准备PHP的开发条件 24
1.4.1 下载PHP及相关软件 24
1.4.2 代码编辑工具 24
1.4.3 下载PHP用户手册 26
1.5 本章小结 26
第2章 准备开发PHP的条件 27
2.1 AppServ—Windows版PHP集成化安装包 28
2.1.1 用AppServ搭建PHP开发环境 28
2.1.2 测试AppServ是否安装成功 30
2.2 XAMPP—Linux版PHP集成化安装包 31
2.2.1 用XAMPP搭建PHP开发环境 32
2.2.2 在Linux操作系统下启动、停止XAMPP 33
2.2.3 设置Linux版XAMPP中MySQL数据库root用户的密码 33
2.2.4 在Linux操作系统下编写第一个PHP程序 33
2.3 PHP开发环境的关键配置信息 34
2.3.1 Apache服务器的基本配置 34
2.3.2 PHP.INI文件的基本配置 35
2.4 解决PHP的常见配置问题 36
2.4.1 解决Apache服务器端口冲突 36
2.4.2 更改Apache服务器
默认存储的文件路径 36
2.4.3 在PHP.INI文件中更改上传文件的大小 37
2.4.4 增加PHP扩展模块 37
2.4.5 检测PHP是否支持MySQL数据库 38
2.5 Dreamweaver开发工具 38
2.5.1 情景应用一——Dreamweaver中编码格式的选择 38
2.5.2 情景应用二——Dreamweaver创建表格 39
2.5.3 情景应用三——Dreamweaver创建表单 43
2.5.4 情景应用四——Dreamweaver创建站点 45
2.5.5 情景应用五——Dreamweaver创建第一个PHP程序 46
2.6 本章小结 47
第3章 了解Web页面的设计 48
3.1 XHTML基础 49
3.1.1 XHTML语言的语法 49
3.1.2 XHTML文件的结构 51
3.1.3 编辑文字版面 53
3.1.4 插入图像与链接 55
3.1.5 编写XHTML表格 57
3.1.6 设计XHTML表单 58
3.1.7 情景应用一——编写用户注册信息页 61
3.1.8 情景应用二:文件域上传文件 62
3.2 CSS样式应用 63
3.2.1 将CSS样式嵌入到HTML中 63
3.2.2 CSS选择符 65
3.2.3 常见的CSS样式属性 67
3.2.4 情景应用——打造经典的导航栏 72
3.3 设计页面布局 74
3.3.1 <div>和<span>标记 74
3.3.2 区块模型 74
3.3.3 区块浮动 75
3.3.4 情景应用——设置一行两列浮动布局 77
3.4 实战练习 78
3.4.1 CSS+DIV设计网站首页 78
3.4.2 DIV标签设计论坛后台管理页面 79
3.5 本章小结 81
第4章 PHP开发基础 82
4.1 PHP的工作原理 83
4.2 学习运用代码注释 83
4.2.1 使用PHP注释 84
4.2.2 使用HTML注释 84
4.2.3 有效使用注释 85
4.3 PHP的常量应用 85
4.3.1 声明和使用常量 85
4.3.2 预定义常量 87
4.4 PHP的变量应用 88
4.4.1 理解变量 88
4.4.2 声明变量 88
4.4.3 变量作用域 89
4.4.4 可变变量 91
4.5 PHP的数据类型 92
4.5.1 标量数据类型 92
4.5.2 复合数据类型 96
4.5.3 特殊数据类型 97
4.5.4 转换数据类型 98
4.5.5 检测数据类型 100
4.6 PHP的运算符 101
4.6.1 算术运算符 101
4.6.2 字符串运算符 102
4.6.3 赋值运算符 102
4.6.4 位运算符 103
4.6.5 递增或递减运算符 103
4.6.6 逻辑运算符 104
4.6.7 比较运算符 105
4.6.8 三元运算符 105
4.6.9 运算符的使用规则 106
4.7 PHP的自定义函数 107
4.7.1 定义和调用函数 108
4.7.2 在函数间传递参数 109
4.7.3 函数的返回值 110
4.8 实战练习 111
4.8.1 网站中最新动态模块的中文字符串截取 111
4.8.2 论坛发布内容模块中对内容的格式化输出 112
4.9 本章小结 113
第5章 PHP流程控制语句 115
5.1 程序三种控制结构 116
5.1.1 顺序结构 116
5.1.2 选择(分支)结构 116
5.1.3 循环结构 116
5.2 条件控制语句 117
5.2.1 if条件控制语句 117
5.2.2 switch多分支语句 119
5.2.3 情景应用一——if语句判断美女征婚条件 121
5.2.4 情景应用二——switch网页框架 122
5.3 循环控制语句 123
5.3.1 while循环语句 124
5.3.2 do...while循环语句 124
5.3.3 for循环语句 125
5.3.4 foreach循环语句 127
5.3.5 情景应用一——while语句循环读取数据库中数据 128
5.3.6 情景应用二——for循环语句开发一个乘法口诀表 129
5.4 跳转语句 130
5.4.1 break跳转语句 130
5.4.2 continue跳转语句 131
5.4.3 return跳转语句 132
5.5 包含语句 133
5.5.1 include()语句 133
5.5.2 require()语句 134
5.5.3 include_once()语句 135
5.5.4 require_once()语句 135
5.5.5 include()语句和require()语句的区别 136
5.5.6 include_once()语句和require_once()语句的区别 138
5.6 实战练习 138
5.6.1 删除数据库中指定的数据表 138
5.6.2 for循环语句实现多图片上传 139
5.7 本章小结 140
第6章 字符串操作 141
6.1 初识字符串 142
6.2 转义、还原字符串 142
6.3 截取字符串 143
6.4 分割、合成字符串 145
6.5 替换字符串 146
6.5.1 str_ireplace()函数 146
6.5.2 substr_replace()函数 148
6.6 检索字符串 148
6.6.1 strstr()函数 148
6.6.2 substr_count()函数 149
6.7 去掉字符串首尾空格和特殊字符 150
6.7.1 ltrim()函数 150
6.7.2 rtrim()函数 151
6.7.3 trim()函数 152
6.8 字符串与HTML转换 152
6.9 情景应用 154
6.9.1 超长文本的分页输出 154
6.9.2 查询关键字描红 155
6.9.3 购物车中数据的读取 156
6.10 实战练习 157
6.10.1 PHP 5新型字符串输出XML数据信息 157
6.10.2 图像验证码的相关操作 158
6.11 本章小结 159
第7章 正则表达式 160
7.1 什么是正则表达式 161
7.2 正则表达式的语法规则 162
7.2.1 行定位符(^和$) 162
7.2.2 单词定界符(、B) 162
7.2.3 字符类([ ]) 163
7.2.4 选择字符(|) 163
7.2.5 连字符(-) 163
7.2.6 排除字符([^]) 164
7.2.7 限定符(? * + {n,m}) 164
7.2.8 点号字符(.) 164
7.2.9 转义字符() 165
7.2.10 反斜线() 165
7.2.11 括号字符(()) 166
7.2.12 情景应用一——整合实用的正则表达式 166
7.2.13 情景应用二——调用正则表达式验证中文 168
7.3 PCRE兼容正则表达式函数 169
7.3.1 字符串的匹配与查找 169
7.3.2 情景应用一——应用正则表达式匹配电话号码格式 170
7.3.3 字符串的替换 172
7.3.4 情景应用二——应用正则表达式实现UBB使用帮助 173
7.3.5 字符串的分割 173
7.4 实战练习 174
7.4.1 正则表达式验证用户
7.4.1 注册信息的合理性 174
7.4.2 正则表达式验证提交的
7.4.1 购买数量是否是正整数 176
7.5 本章小结 177
第8章 初探数组 178
8.1 数组概述 179
8.2 数组类型 179
8.3 声明数组 180
8.3.1 用户创建数组 180
8.3.2 函数创建数组 181
8.3.3 创建二维数组 181
8.4 遍历、输出数组 182
8.4.1 遍历数组 183
8.4.2 输出数组元素 184
8.5 PHP的数组函数 185
8.5.1 统计数组元素个数 185
8.5.2 向数组中添加元素 185
8.5.3 获取数组中最后一个元素 186
8.5.4 删除数组中重复元素 186
8.5.5 获取数组中指定元素的键名 186
8.5.6 字符串与数组的转换 187
8.5.7 情景应用——读取网上调查中的数据 188
8.6 PHP的全局数组 189
8.6.1 $_SERVER[ ]全局数组 189
8.6.2 $_GET[ ]和$_POST[ ]全局数组 190
8.6.3 $_COOKIE全局数组 190
8.6.4 $_ENV[ ]全局数组 191
8.6.5 $_REQUEST[ ]全局数组 191
8.6.6 $_SESSION[ ]全局数组 191
8.6.7 $_FILES[ ]全局数组 191
8.6.8 情景应用——$_FILES[ ]全局数组在文件上传中的应用 191
8.7 实战练习 193
8.7.1 生成在线考试题 193
8.7.2 通过获取客户端IP地址限制投票次数 193
8.8 本章小结 195
第9章 日期与时间 196
9.1 PHP的时间观念 197
9.1.1 在PHP.INI文件中设置时区 197
9.1.2 通过date_default_timezone_set函数设置时区 197
9.2 UNIX时间戳 198
9.2.1 获取任意日期、时间的时间戳 198
9.2.2 获取当前时间戳 199
9.2.3 日期、时间转换为UNIX时间戳 199
9.3 日期和时间处理 201
9.3.1 格式化日期和时间 201
9.3.2 获取日期和时间信息 202
9.3.3 检验日期和时间的有效性 203
9.4 情景应用 204
9.4.1 获取系统当前时间和时间戳 204
9.4.2 比较两个时间的大小 204
9.4.3 倒计时 205
9.5 实战练习 205
9.5.1 计算程序的运行时间 205
9.5.2 网页闹钟 206
9.6 本章小结 207
第二篇 核心篇
第10章 文件和目录处理技术 210
10.1 基本的文件处理技术 211
10.1.1 打开一个文件 211
10.1.2 读取文件内容 214
10.1.3 向文件中写入数据 218
10.1.4 关闭文件指针 220
10.2 目录操作技术 220
10.2.1 打开指定目录 220
10.2.2 读取目录结构 221
10.2.3 关闭目录指针 222
10.3 文件的上传技术 223
10.3.1 开启文件上传功能 223
10.3.2 全局变量$_FILES应用 224
10.3.3 将上传文件移动到指定目录 225
10.3.4 文件下载技术 226
10.4 情景应用 227
10.4.1 通过文本文件统计网站访问量 227
10.4.2 规范化的文件上传 229
10.5 实战练习 231
10.5.1 从文本文件中读取注册服务条款 231
10.5.2 规范化的多文件上传 232
10.6 本章小结 233
第11章 图形图像处理技术 234
11.1 了解GD2函数库 235
11.2 设置GD2函数库 235
11.3 学习常用的图像处理技术 235
11.3.1 创建画布 236
11.3.2 颜色处理 237
11.3.3 绘制文字 237
11.3.4 输出图像 239
11.3.5 销毁图像 240
11.3.6 情景应用一——在照片上书写文字 240
11.3.7 情景应用二——GD2函数生成图像验证码 241
11.4 运用Jpgraph类库绘制图像 242
11.4.1 Jpgraph类库简介 242
11.4.2 Jpgraph的安装 242
11.4.3 情景应用一——柱状图展示2010年第一季度编程词典销量 243
11.4.4 情景应用二——折线图分析2010年公司销售额 245
11.4.5 情景应用三——多饼形图分析2010年图书销量 246
11.5 实战练习 248
11.5.1 GD2函数生成带有干扰线的图像验证码 248
11.5.2 Jpgraph创建折线图分析图书销售走势 249
11.5.3 Jpgraph创建3D饼形图展示部门业绩比较 250
11.6 本章小结 251
第12章 Cookie和会话控制 252
12.1 会话的操作 253
12.1.1 创建会话 253
12.1.2 配置PHP的会话 255
12.2 会话的高级应用 259
12.2.1 SESSION临时文件 259
12.2.2 SESSION缓存 259
12.2.3 SESSION数据库存储 261
12.3 Cookie的操作 263
12.3.1 设置Cookie 264
12.3.2 访问Cookie 265
12.3.3 删除Cookie 266
12.4 情景应用 267
12.4.1 登录验证 267
12.4.2 Cookie自动登录 269
12.5 实战练习 270
12.5.1 防止页面刷新 270
12.5.2 控制客户端Cookie 271
12.6 本章小结 272
第13章 面向对象 273
13.1 一切皆是对象 274
13.1.1 什么是类 274
13.1.2 对象的由来 274
13.1.3 面向对象的特点 275
13.2 类的声明 275
13.2.1 类的定义 275
13.2.2 成员属性 276
13.2.3 成员方法 277
13.3 类的实例化 277
13.3.1 创建对象 278
13.3.2 访问类中成员 278
13.3.3 特殊的访问方法——“$this”和“::” 279
13.3.4 构造方法和析构方法 280
13.4 面向对象的封装特性 281
13.4.1 public(公共成员) 282
13.4.2 private(私有成员) 282
13.4.3 protected(保护成员) 283
13.5 面向对象的继承特性 283
13.5.1 类的继承——extends关键字 283
13.5.2 类的继承——parent::关键字 284
13.5.3 覆盖父类方法 285
13.6 抽象类和接口 286
13.6.1 抽象类 286
13.6.2 接口 287
13.7 面向对象的多态性 289
13.7.1 通过继承实现多态 289
13.7.2 通过接口实现多态 290
13.8 面向对象的关键字 290
13.8.1 final关键字 291
13.8.2 static关键字——声明静态类成员 291
13.8.3 clone关键字——克隆对象 292
13.8.4 对象比较 293
13.8.5 instanceof关键字——对象类型检测 293
13.9 面向对象的魔术方法 293
13.9.1 _set()和_get()方法 294
13.9.2 _isset()和_unset()方法 294
13.9.3 _call()方法 294
12.9.4 _toString()方法 295
13.9.5 _autoload()方法 295
13.9.6 情景应用一——封装一个数据库连接类 296
13.9.7 情景应用二——封装一个数据库操作类 297
13.10 实战练习 298
13.10.1 分页类 299
13.10.2 万用表格 300
13.11 本章小结 301
第14章 MySQL数据库设计 302
14.1 MySQL概述 303
14.1.1 MySQL的特点 303
14.1.2 SQL和MySQL 303
14.2 MySQL服务器的启动和关闭 304
14.2.1 启动MySQL服务器 304
14.2.2 连接MySQL服务器 305
14.2.3 关闭MySQL服务器 305
14.3 操作MySQL数据库 306
14.3.1 创建新数据库 306
14.3.2 选择指定数据库 306
14.3.3 删除指定数据库 306
14.4 操作MySQL数据表 307
14.4.1 创建一个表 307
14.4.2 查看数据表结构 308
14.4.3 修改数据表结构 309
14.4.4 重命名数据表 310
14.4.5 删除指定数据表 310
14.5 操作MySQL数据 311
14.5.1 向数据表中添加数据(INSERT) 311
14.5.2 更新数据表中数据(UPDATE) 312
14.5.3 删除数据表中数据(DELETE) 312
14.5.4 查询数据表中数据 313
14.5.5 情景应用一——数据排序 316
14.5.6 情景应用二——limit控制输出数据的开始位置和记录数 316
14.6 MySQL数据类型 316
14.6.1 数字类型 317
14.6.2 字符串类型 317
14.6.3 日期和时间数据类型 319
14.7 用phpMyAdmin管理MySQL数据库 319
14.7.1 管理数据库 319
14.7.2 管理数据表 320
14.7.3 管理数据记录 322
14.7.4 导入/导出数据 324
14.8 实战练习 325
14.8.1 批量添加记录(LOAD DATA和MYSQLIMPORT) 325
14.8.2 在phpMyAdmin中重置MySQL服务器登录密码 326
14.9 本章小结 326
第15章 数据库编程技术 327
15.1 PHP操作MySQL数据库的步骤 328
15.2 PHP操作MySQL数据库的方法 329
15.2.1 mysql_connect()函数连接MySQL服务器 329
15.2.2 mysql_select_db()函数选择MySQL数据库 330
15.2.3 mysql_query()函数执行SQL语句 330
15.2.4 mysql_fetch_array()函数将结果集返回到数组中 331
15.2.5 mysql_fetch_row()函数从结果集中获取一行作为枚举数组 333
15.2.6 mysql_num_rows()函数获取查询结果集中的记录数 333
15.3 管理MySQL数据库中的数据 334
15.3.1 向数据库中添加数据 334
15.3.2 编辑数据库数据 335
15.3.3 从数据库中删除数据 336
15.3.4 批量数据操作 336
15.4 情景应用 337
15.4.1 通用查询 337
15.4.2 分组统计 338
15.4.3 对查询结果分页显示 339
15.4.4 站内搜索 340
15.5 实战练习 341
15.5.1 对查询结果进行跳转分页显示 341
15.5.2 高级查询 341
15.6 本章小结 342
第三篇 高级篇
第16章 PDO数据库抽象层 346
16.1 什么是PDO 347
16.1.1 PDO概述 347
16.1.2 PDO特点 347
16.1.3 安装PDO 347
16.2 PDO连接数据库 348
16.2.1 PDO构造函数 348
16.2.2 情景应用一——连接MySQL数据库 348
16.2.3 情景应用二——连接MS SQL Server数据库 349
16.2.4 情景应用三——连接Oracle数据库 350
16.3 PDO中执行SQL语句 350
16.3.1 exec()方法 351
16.3.2 query()方法 351
16.3.3 预处理语句——prepare()和execute() 352
16.3.4 情景应用一——通过PDO向数据库中添加数据 353
16.3.5 情景应用二——通过PDO更新数据库中数据 354
16.4 PDO中获取结果集 355
16.4.1 fetch()方法 355
16.4.2 fetchAll()方法 357
16.4.3 fetchColumn()方法 358
16.5 PDO中捕获SQL语句中的错误 359
16.5.1 使用默认模式——PDO::ERRMODE_SILENT 359
16.5.2 使用警告模式——PDO::ERRMODE_WARNING 360
16.5.3 使用异常模式——PDO::ERRMODE_EXCEPTION 361
16.6 PDO中错误处理 362
16.6.1 errorCode()方法 362
16.6.2 errorInfo()方法 363
16.7 PDO中事务处理 364
16.8 PDO中存储过程 366
16.9 实战练习 367
16.9.1 PDO读取MS SQL Server数据库中数据 367
16.9.2 PDO读取Oracle数据库中数据 368
16.10 本章小结 369
第17章 ADODB数据库抽象层 370
17.1 ADODB概述 371
17.1.1 ADODB的优点与缺点 371
17.1.2 ADODB的安装与操作流程 371
17.2 连接数据库系统和数据库 372
17.2.1 连接数据库系统——ADONewConnection()函数 372
17.2.2 数据库持久化连接——PConnect()函数 372
17.2.3 数据库非持久化连接——Connect()函数 372
17.2.4 情景应用一——ADODB连接MySQL数据库 373
17.2.5 情景应用二——ADODB连接Access数据库 374
17.2.6 情景应用三——ADODB连接MS SQL Server数据库 374
17.2.7 情景应用四——ADODB连接Oracle数据库 375
17.3 通过公共变量控制数据的存取方式 376
17.4 ADODB执行SQL语句 377
17.4.1 执行SQL语句——execute()函数 377
17.4.2 控制SELECT查询语句的起始位置——SelectLimit()函数 378
17.4.3 添加、更新数据——GetInsertSQL()、GetUpdateSQL()函数 379
17.4.4 操作SQL语句的其他方法 380
17.5 ADODB控制结果集 380
17.5.1 控制指针的方法 381
17.5.2 控制结果集内容的方法 382
17.5.3 日期格式和数据类型的转换 383
17.6 ADODB中的分页 384
17.6.1 ADODB分页函数 384
17.6.2 一个小巧的分页函数——ADODB_Pager()函数 385
17.7 ADODB中的错误处理 386
17.7.1 ADODB中的错误处理函数 386
17.7.2 ADODB中自定义的错误处理机制 387
17.7.3 情景应用——通过日志文件存储错误信息 388
17.8 ADODB中的事务处理 389
17.9 实战练习 390
17.9.1 封装ADODB连接数据库类 390
17.9.2 封装ADODB操作数据库类 391
17.9.3 封装ADODB分页类 392
17.9.4 通过事务处理机制保证数据转换的顺利完成 393
17.10 本章小结 395
第18章 PHP的字符编码 396
18.1 了解网页字符编码 397
18.1.1 ASCII 字符集 397
18.1.2 ISO 8859 字符集 397
18.1.3 GB2312与GBK编码 398
18.1.4 Unicode字符集 398
18.1.5 UTF-8编码 398
18.2 PHP网页的字符编码 399
18.2.1 设置编码格式 399
18.2.2 转换编码格式 400
18.2.3 检测字符串的编码 402
18.3 PHP开发中的乱码问题 403
18.3.1 解决页面中的乱码问题 403
18.3.2 数据库中的字符集编码问题 405
18.3.3 避免截取中文字符串时出现乱码 406
18.4 PHP区域化设置 407
18.4.1 PHP网页的区域化 407
18.4.2 使用setlocale()函数设置区域化 408
18.5 实战练习 409
18.5.1 避免截取超长文本时出现乱码 409
18.5.2 了解PHP编码规则 410
18.5.3 了解PHP编码风格 410
18.6 本章小结 412
第19章 程序调试与错误处理 413
19.1 基本调试策略 414
19.2 常见错误分析 414
19.2.1 语法错误 414
19.2.2 定义错误 417
19.2.3 逻辑错误 418
19.2.4 运行错误 419
19.2.5 环境错误 421
19.3 PHP.INI中的错误处理机制 422
19.3.1 控制错误显示及显示方式 423
19.3.2 控制错误的级别 423
19.4 程序调试方法 424
19.4.1 应用DIE语句调试 424
19.4.2 应用mysql_error()语句输出错误信息 425
19.4.3 应用try{}catch{}M语句抛出并捕获异常 425
19.5 错误处理技巧 427
19.5.1 隐藏错误 427
19.5.2 自定义错误页面 427
19.5.3 延长服务器执行时间——处理超时错误 428
19.6 情景应用 429
19.6.1 如何分析、解决PHP与MySQL连接错误 429
19.6.2 解决数据库乱码问题 431
19.7 实战练习 432
19.7.1 封装属于自己的异常处理类 432
19.7.2 使用错误处理器记录日志 433
19.8 本章小结 434
第20章 Smarty模板技术 435
20.1 走进Smarty模板引擎 436
20.1.1 Smarty模板引擎下载 437
20.1.2 Smarty模板引擎安装 437
20.1.3 Smarty模板引擎配置 437
20.1.4 情景应用一——走进Smarty模板引擎 439
20.1.5 情景应用二——封装Smarty模板的配置方法 440
20.2 Smarty模板设计——静态页处理 442
20.2.1 基本语法(注释、函数和属性) 442
20.2.2 Smarty模板设计变量 443
20.2.3 变量调节器 444
20.2.4 情景应用一——Smarty模板中日期、时间的格式化输出 445
20.2.5 情景应用二——通过组合修改器分隔多个变量调节器 445
20.2.6 内建函数(动态文件、模板文件的包含和流程控制语句) 446
20.2.7 情景应用三——Smarty模板创建网页框架 448
20.2.8 情景应用四——section语句循环输出数据库中的数据 450
20.2.9 自定义函数 451
20.2.10 配置文件 454
20.3 Smarty程序设计——动态文件操作 455
20.3.1 SMARTY_PATH常量 455
20.3.2 Smarty程序设计变量 455
20.3.3 Smarty方法 456
20.3.4 Smarty缓存 456
20.3.5 情景应用——开启网站注册页面的缓存 458
20.4 实战练习 460
20.4.1 Smarty+ADODB完成数据的分页输出 460
20.4.2 Smarty中通过truncate方法截取字符串 461
20.4.3 用Register_Function方法注册模板函数 462
20.4.4 Smarty模板中的关键字描红 464
20.5 本章小结 464
第四篇 实战篇
第21章 企业网站开发模板 466
21.1 明日企业网概述 467
21.2 开发背景 467
21.3 需求分析 467
21.4 功能结构 468
21.5 数据库设计 469
21.5.1 数据库概念设计 469
21.5.2 创建数据库及数据表 470
21.6 技术攻关 471
21.6.1 Smarty模板 471
21.6.2 最简单的网页框架 473
21.6.3 ADODB类库 473
21.6.4 封装分页类 474
21.7 首页设计 475
21.7.1 首页概述 475
21.7.2 首页技术分析 476
21.7.3 首页的实现过程 476
21.8 产品展示设计 478
21.8.1 产品展示概述 478
21.8.2 产品展示技术分析 478
21.8.3 产品展示实现过程 479
21.9 后台管理系统设计 480
21.9.1 后台管理系统概述 481
21.9.2 后台管理系统技术分析 481
21.9.3 后台管理系统实现过程 482
21.10 程序调试与错误处理 486
21.10.1 SQL语句的返回机制 486
21.10.2 错误处理 487
21.11 开发总结 488
附录 专业术语表 489

‘伍’ 求一点PHP对TXT文件和文章的操作教程

PHP教程.安装PHP
安装PHP
本章将按下列步骤编译安装以下软件:
* Apache v.1.3.4 -- 世界上最流行的Web服务器。
* gcc v.2.8.1 -- 来源于GNU的C和C++编译器。
* MySQL v.3.22.16b-gamma -- 世界范围内许多人使用的数据库。
* PHP v.3.0.11 -- 本书所主要介绍的软件。从http://www.php.net(或此站点的镜象站点)直接下载可以得到较新的版本。本章的其它步骤仍然适用。
* expact -- 用于读取和处理XML文档的函数库。
* phplib -- 用于进行会话管理的PHP函数库。
* libiodbc -- 主要用于存取在非UNIX计算机中数据库的ODBC函数库。
* MyODBC -- PHP、iODBC和MySQL之间的函数库。
即便如此,本章也并不是介绍编译应用程序所需要的那些指令,而只是简单的进行描述。总之,本书的重点是介绍PHP语言,而不是C语言。每一个应用程序的编译对我来说都十分清楚,希望每个读者也能没有困难的进行编译。假如你确实碰到了一些问题,可以在某个IRC频道中有礼貌的询问,或者可以尝试使用新闻组(可以从http://www.dejanews.com访问)得到帮助来解决问题。然而,最好的帮助还是来自http://www.php.net 上的PHP邮件列表。
在开始编译过程之前,让我们先讨论一下如何从错误中恢复。在得到有关错误的帮助以后,可以采用以下的命令重新初始化源码目录:
* rm config.cache--几乎所有的Linux应用程序都使用configure命令来检查自己的系统,以寻找有关如何剪裁编译过程的信息。检查的结果将存贮在一个名为config.cache的文件中。如果移走此文件,将迫使配置程序从头开始重新检查系统。
* make distclean--所有的用C语言编写的Linux应用程序都是用make程序编译的。make程序会寻找每一个源文件,以确认是需要编译还是已经编译过的。make distclean命令可以“重置”所有的源程序,以便能重新编译它们。
* make clean--有的应用程序不支持make distclean命令,而用make clean命令来代替。make clean命令“重置”所有的源程序,以便能重新编译它们。
即使要安装的一些应用程序不支持以上的每个命令,但是试一下这些命令也不会有什么害处。

注意:Red Hat v5.2使用glibc库。如果用户从互联网中下载或更新在本章中安装的程序时,必须知道glibc的信息。使用者可以使用rpm -q glibc命令来查出已经安装的glibc库的版本号。在作者的系统中,使用rpm -q glibc命令将显示glibc-2.0.7.29。

2.1 基本概念
也许读者以前从没有编译过Linux应用程序,在这里介绍一些基本概念,以便在出现问题时有可能诊断出问题所在。
tar
tar,即tape archiver,它可以把几个文件组合成一个文件,并可以选择是否进行压缩。这个命令过去通常用来进行备份,以便使数据存储在磁带中。当tar文件被压缩时,它们有一个.gz的后缀;当tar文件没有压缩时,它们有一个.tar的后缀。
gcc
gcc 是GNU的C编译器。它的工作是把人可以看懂的源代码文件编译成机器可以读懂的目标文件。C源文件通常有.c的后缀名,目标文件通常有.o的后缀名。如果编译工作不能正常进行,就是碰到了一个编译期的错误,或者说:语法错误。在大多数情况下,不彻底的编译通常是编译器找不到一个或几个包含文件而产生的。包含文件都有一个.h的扩展名,通常用来定义不同的系统信息,以及将多个不同的.c文件所共有的信息收集在一起。
make
make是一个常用的工具程序,是用来帮助进行编译的。它的工作是用来只编译那些还没有编译过的源文件。编译.c文件将生成一个.o文件,如果.c文件比.o文件更新,也就是说到上次编译之前,源文件被编辑过,那么make将会重新编译.c文件。make指令一般是寻找一个Makefile文件,在这个文件中包含有一个或多个能执行的目标,例如,make clean会告诉make执行清除目标。
ld
ld是GNU的链接程序。它的工作是把所有的目标文件和库链接起来,创建一个单一的可执行文件。幸运的是,基本上不用手工运行这个程序,因为Makefile将会考虑到所有的编译细节。
ldconfig
ldconfig会为在多个库目录(在/etc/ld.so.conf中指定)中寻找共享库。共享库常被多个的应用程序使用,它们的文件名中的某个地方有.so,例如,libqt.so.1.42是一个共享库。在编译完毕之后,有可能需要在/etc/ld.so.conf文件中增加一个目录,并且运行ldconfig -v命令。
./configure
configure将会在计算机中寻找一些关键信息,例如,安装的是哪一种C编译器,包含文件在哪里等等。然后,configure将会按照所用的计算机配置重新修改Makefile文件。应该使用./configure来在当前目录下运行程序,以避免偶然运行$PATH环境变量中的目录下的其他程序。
符号连接
符号连接允许使用者可以为一个已经现有的文件指定另一个不同的名字。例如,使用者有可能想把一个名为libqt.so.1.42的文件称为libqt.so.1。符号连接基本上可以使用户把一个文件复制到另一个不同的目录下面,但事实上并没有真正复制此文件。第二个文件实例只是简单地指向第一个文件实例。使用符号连接至少可以有两点好处,第一点是符号连接可以节省硬盘空间,少到只有16字节;第二点有一点微妙,让我们先看一下一个名为libqt.so.1且指向libqt.so.1.42的符号连接。如果需要升级到libqt.so.1.88,该怎么办呢?用户只要简单地改变符号连接,使libqt.so.1指向libqt.so.1.88,而非libqt.so.1.42即可。这意味着涉及到libqt.so.1的程序将自动地使用这个库的新版本。按照惯例,符号连接常用于完整的发布版本号。换句话说,libqt.so.1.88和libqt.so.2.32应该有两个不同的动态连接(分别为libqt.so.1和libqt.so.2)。
2.2 编译前的准备工作
以下步骤将为系统做好编译前的准备工作。
1. mkdir /usr/local/src -- 我选用/usr/local树作为所安装应用程序的根目录。其他人可能选用/usr/opt、/opt或/var目录。为了更方便的按照本章中的指令操作,请选用/usr/local目录作为根目录。当编译完成以后,用户可以把这些文件复制到不同的目录中。

注意:为了能完成本章中的其它步骤,使用者必须具备root权限。

2. cd /usr/local/src--转到源文件目录下。
3. 下载以下文件(可以从http://www.mtolive.com/phpbook站点下载),或者从本书随机附带的光盘中,复制这些文件到/usr/local/src目录下:
. apache_1.3.4.tar.gz
. gcc-2.8.1.tar.gz
. mysql-3.22.16b-gamma.tar.gz
. php-3.0.11.tar.gz
. expat.tar.gz
. phplib.tar.gz
. libiodb-2.50.3
. myodbc-2.50.24-src
4. 使用tar命令解压缩以上文件。tar的x选项为解开选项,v选项将在屏幕上显示文档中解出来的文件名,z选项为解压缩选项,f选项用于在命令行中指定.tar文件名。
tar xvzf apache_1.3.4.tar.gz
tar xvzf gcc-2.8.1.tar.gz
tar xvzf mysql-3.22.16b-gamma.tar.gz
tar xvzf php-3.0.11.tar.gz
tar xvzf expat.tar.gz
tar xvzf phplib.tar.gz
5. gcc -v
确定系统中现有gcc的版本。如果你的系统不是v2.7.2.3,在下面的操作步骤中采用你的gcc版本号替换v.2.7.2.3。
6. cp `which gcc` /usr/bin/gcc-2.7.2.3
如果需要,把现有的gcc备份,以便以后使用。Linux的另一个优点是可以很容易在目录下存储一个程序的多个版本。
7. httpd -v
确定系统中的Apache的版本号。如果你的系统中的Apache不是v1.3.4,在下面的操作步骤中使用你的版本号替换v1.3.4。
8. mv `which httpd` /usr/sbin/httpd-1.3.4
如果需要,把现有的Apache备份,以便以后使用。

2.3 编译C编译器gcc
使用者应该安装、编译程序的第一个程序就是C编译器。随Red Hat v5.2附带的C编译器是gcc v2.7.2.3,由于它的版本比较低,以至于不能正确的编译PHP。然而gcc v.2.7.3可以用来编译版本较高的gcc v2.8.1。
编译新版本的gcc需要执行:
1. cd /usr/local/src/gcc-2.8.1
转到gcc的顶级目录下。
2. ./configure -prefix=/usr/local/gcc
运行配置程序,强制安装程序在后面的安装过程中使用/usr/local/gcc作为gcc的安装目录。
3. make bootstrap LANGUAGES="c c++" BOOT_CFLAGS="-g -02"
编译新的C和C++编译器。
4. make install LANGUAGES="c c++" BOOT_CFLAGS="-g -02"
安装新的C和C++编译器。
5. mv /usr/local/gcc/bin/gcc /usr/local/gcc/bin/gcc-2.8.1
把新的gcc编译器重新命名,使它的名字中含有版本号。
6. ln -s \
/usr/local/gcc/bin/gcc-2.8.1 \
/usr/bin/gcc-
给新编译过的gcc可执行文件创建一个符号连接/usr/bin/gcc。
7. gcc -v
显示gcc的版本号。如果编译和安装都正常的话,将显示v.2.8.1。

2.3 编译MySQL
现在来编译MySQL。在编译工作完成之后,就可以使用MySQL的应用程序来测试安装。
1. cd /usr/src/mysql-3.22.16a-gamma
转到MySQL的顶级目录下。
2. ./configure --prefix=/usr/local/mysql
运行配置程序,强制安装程序在后面的安装过程中使用/usr/local/mysql作为MySQL的安装目录。
3. make
编译MySQL。
4. make install
安装MySQL。
5. echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
将MySQL库所在的目录添加进配置文件中。这样,当Linux启动或者执行ldconfig命令时,将会在该配置文件中的目录里搜索库文件。
6. ldconfig -v | grep libmysqlclient
ldconfig命令能读取/etc/ld.so.conf文件中列出的目录,并对在那些目录里找到的库文件进行缓冲。grep命令在ldconfig命令的大量输出结果中查找MySQL库文件,并限定文本以类似下面方式进行显示:
libmysqlclient.so.6 => libmysqlclient.so.6.0.0.
7. echo "/usr/local/mysql/bin/safe_mysqld > /dev/null &" >> /etc/rc.d/rc.local
将MySQL启动指令添加到/etc/rc.d/rc.local文件中,这样每次启动Linux后就会自动运行MySQL。
8. ./scripts/mysql_install_db
初始化数据库。
9. /usr/local/mysql/bin/safe_mysqld > /dev/null &
启动MySQL服务器作为后台程序,为了测试安装,MySQL服务器必须启动。
10. ln -s \
/usr/local/mysql/bin/mysql \
/usr/bin/mysql
我比较喜欢在/usr/bin目录下为安装目录建立符号链接。这一方法减少了PATH环境变量中的目录数量,还可以将不希望其他人运行的MySQL工具程序隐藏起来,(例如,mysqladmin命令)。另一方法是将命令PATH="$PATH:/usr/local/mysql/bin"放在/etc/profile文件中。以上两种方法都很可以采用。
11. ln -s\
/usr/local/mysql/bin/mysqlshow \
/usr/bin/mysqlshow
该指令是让一般用户都可以运行mysqlshow命令。

2.4 测试MySQL
在继续Apache和PHP编译之前,首先来测试MySQL的安装是否成功。正式发布的MySQL带有许多有用的工具,这里我们只使用mysql和mysqlshow命令来进行测试。(如果对数据库不熟悉,请不用担心,诸如用户、表、记录等数据库的概念将在第六章“数据库和SQL”中加以介绍。)
mysqladmin的作用是建立和删除数据库、检查SQL的状态,以及其他一些用途。首先,通过检查版本号以确认是否已经正确安装了MySQL:

>PATH="usr/local/mysql/bin:$PATH"
>mysqladmin version
Ver 7.8 Distrib 3.22.16a-gamma, for pc-linux-gun on i686 TCX Datakonsult AB, by Monty
Server version 3.22.16a-gamma
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /tmp/mysql.sock
Uptime: 2 hours 30 min 39 sec

Threads: 1 Questions: 7 Slow queries: 0
Opens: 6 Flush tables: 1 Open tables: 2

可以用以下命令观看mysqladmin的所有功能.

mysqladmin --help | less

也许mysqlshow是更让人激动的工具,它能够列出数据库、表和字段名,如下所示:

清单2.1 mysqlshow--显示数据库,表和字段名清单

Page 18(第13行)-19(倒数第10行) , 清单 2.1

最后要介绍的MySQL工具是mysql,这个程序将深入到MySQL的中心,并且可以使你可以立刻在Linux命令行提示下执行SQL语句。在shell模式下运行mysql。

Page 19(倒数第5行)-20(倒数第5行)

小心:设置密码要使用password()函数。如果需要进一步了解,请查阅MySQL文档。

小心:在系统进入正常工作模式的时候,请选用一个比“password”更好的root密码。

2.5 编译iODBC和MyODBC
iODBC是一个实现开放性数据库互连(Open Database connectivity)协议的函数库。它主要用于连接运行于Microsoft Windows的数据库引擎。
1. cd /usr/local/src/libiodbc-2.50.3
转到iODBC目录。
2. ./configure \
--prefix=/usr/local/iodbc \
--with-iodbc-inidir=/usr/local/etc
运行配置程序,并强制设置iODBC为安装到目录/usr/local/iodbc下。此外,应确认odbc的初始化文件为/etc/odbc.ini。
3. make
4. make install
把库文件复制到目录/usr/local/iodbc/lib下,并且把包含文件复制到目录/usr/local/iodbc/include下。
5. cd /usr/local/src/myodbc-2.50.24
转到MyODBC目录下。
6. ./configure \
--prefix=/usr/local/myodbc \
--with-mysql-sources=/usr/local/mysql-3.22.16a-gamma \
--with-odbc-ini=/etc/odbc.ini \
--with-iodbc=/usr/local/iodbc
运行MyODBC配置程序。
7. make
8. make install
把库复制到目录/usr/local/myodbc/lib下。
2.6 编译PHP
编译PHP比编译以前的应用程序更复杂,这是因为编译PHP事实上是expat、Apache和PHP的组合。编译的结果将生成一个带有PHP的Apache版本。为了要编译PHP,可以采用以下步骤:
1. cd /usr/local/src/expat
转到expat目录。
2. make
编译expat源文件。
3. 把以下命令加到Makefile文件中,必须保证在输入ar和ralib之前使用的是Tab键。
libexpat.a: $(OBJS)
ar -rc $@ $(OBJS)
ranlib $@
4. make libexpat.a
把expat目标文件组合成库文件。
5. mv libexpat.a /usr/local/lib
PHP配置文件在/usr/local/lib目录下寻找libexpat.a文件。把libexpat.a文件移到PHP配置文件已知的目录下,可以为以后的操作减少麻烦。
6. cd /usr/local/src/php-3.0.11
转到PHP的顶级目录下。
7. mkdir /usr/local/include/xml
确认/usr/local/include/xml目录是存在的。
8. ln -s \
/usr/local/src/expat/xmltok/xmltok.h \
/usr/local/include/xml/xmltok.h
当能创建符号连接时,为什么还要复制呢?
9. ln -s \
/usr/local/src/expat/xmlparse.h \
/usr/local/include/xml/xmlparse.h
这是PHP为了能够正确地被编译所需要的另一个包含文件。
10. cd /usr/local/src/apache_1.3.4
转到Apache的顶级目录下。
11. ./configure -prefix=/usr/local/apache
运行配置程序,强制设置Apache安装目录为/usr/local/apache。
12. cd /usr/local/src/php-3.0.11
转到PHP的顶级目录下。
13. ./configure \
--with-apache=../apache_1.3.4 \
--with-iodbc=/usr/local/iodbc \
--with-mysql=/usr/local/mysql \
--with-xml
运行配置程序,并且告诉配置程序支持Apache、MySQL和XML。
14. make
编译PHP源文件。
15. make install
安装已编译的文件。PHP库文件会被放在Apache的模块目录下,这样可以在编译Apache时能找到它们。
16. cd /usr/local/src/apache_1.3.4
转到Apache的顶级目录下。
17. ./configure \
--prefix=/usr/local/apache \
--active-mole=src/moles/php3/libphp3.a
再一次配置Apache,这次告诉Apache要加载PHP模块。
18. make
编译Apache源文件。
19. make install
安装已编译的文件。
20. mv \
/usr/local/apache/bin/httpd \
/usr/local/apache/bin/httpd-1.3.4
重新命名新创建的httpd可执行文件,这样就能够安装多种版本。
21. ln -s \
/usr/local/apache/bin/httpd-1.3.4 \
/usr/sbin/httpd
建立一个指向新的可执行文件的符号链接。
22. httpd -v
证实可以访问新的可执行文件。该命令的执行结果将显示版本1.3.4,而且建立日期也应该正确无误。
23. 编辑/usr/local/apache/conf/http.conf文件,搜索AddType并确认下列行未加注释。
AddType application/x-httpd-php3 .phtml
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
24. 接着编辑/usr/local/apache/conf/http.conf文件,搜索DirectoryIndex并将index.php3放在行尾。
25. 创建一个名为/usr/local/local/php3.ini的文件,该文件应包含如下的命令行:
include_path=.:/usr/local/apache/php/
auto_prepend_file=/usr/local/apache/php/prepend.php3
track_vars = on
magic_quotes_gpc = on
sendmail_path /usr/sbin/sendmail -t
26. ln -s \
/usr/local/src/php-3.0.11/doc/manual.html \
/usr/local/src/php-3.0.11/doc/index.html
建立一个符号链接,这样绝大多数Web浏览器就会正确地自动显示PHP文件起始页。
27. ln -s \
/usr/local/src/php-3.0.11/doc \
/usr/local/apache/htdocs/phpdocs
建立一个符号链接,这样就可以通过http://localhost/phpdocs/, 来访问PHP文档。
28. 创建一个叫做/usr/local/apache/htdocs/robots.txt的文件,这样就可避免搜索引擎为PHPLIB,phpMyAdmin和PHP文件建立索引,新创建的文件应包括如下设置行:
#robots.txt for (hostname)
User-agent *
Disallow: /phpdocs/
Disallow: /php/
Disallow:/phpMyAdmin/

2.7 安装PHPLIB
在阅读第15章“处理并发的访问”之前,应先安装PHPLIB,可以按照下列步骤进行安装:
1. 以root用户或其他任何可以在/usr/local/apache目录下写文件的用户注册。
2. cd /usr/local/apache/
在开始下载文件之前,进入到Web服务器的顶级目录下。
3. 从如下Web网址下载最新版本的文件,注意gz后缀的文件名,以免它的文件名phplib.tar.gz被改动。
http://phplib.shonline.de/
4. tar xv2f phplib.tar.gz
解压缩PHPLIB模块。
5. 编辑/usr/local/lib/php3.ini文件,应包括下列设置内容:

include_path=.:/usr/local/apache/phplib-6.1/php
auto_prepend_file = /usr/local/apache/phplib-
6.1/php/prepend.php3
track_vars = on
magic_quotes_gpc = on
sendmail_path /usr/sbin/sendmail -t

6. 建立一个名为poe_sessions的mysql数据库。我一般使用phpMyAdmin,如果愿意,也可以使用SQL命令创建数据库。
7. cd /usr/local/apache/phplib-6.1/stuff
进入建表目录下。
8. mysql php_book --user=root --password <
create_database.mysql
创建PHPLIB所需要的数据库表。
9. 使用以下值在mysql数据库表中增加一条新记录:

host: %
password: <-- no password.
select_priv: Yes
insert_priv: Yes
update_priv: Yes
delete_priv: Yes
for users named "kris","user01",and "user02".

注意:也可以使用如下SQL语句:

INSERT INTO
user
(
Host
,User
,Password
,Select_priv
,Insert_priv
,Update_priv
,Delete_priv
)
VALUES (
'%'
, 'kris'
, ''
, 'Y', 'Y', 'Y', 'Y'
)

10. 使用以下值在mysql数据库的db表中增加一条新记录:

host: %
db: poe_sessions
select_priv: Yes
insert_priv: Yes
update_priv: Yes
delete_priv: Yes
for users named "kris","user01",and "user03".

注意:也可以使用如下SQL程序。

INSERT INTO
db
(
Host
,Db
,User
,Select_priv
,Insert_priv
,Update_priv
,Delete_priv
)
VALUES (
'%'
, 'poe_sessions '
, 'kris'
, 'Y', 'Y', 'Y', 'Y'
)

11. /usr/local/mysql/bin/mysqladmin -u root -p reload
重新装载MySQL权限表。
12. 在php_book数据库中创建两个PHPLIB已认证的用户(user01和user02),可以使用如下SQL语句:

INSERT INTO
auto_user
(
uid
,username
,password
,perms
) VALUES (
''
,'user01'
,'test'
,'admin'
)

INSERT INTO
auth_user
(
uid
,username
,password
,perms
) VALUES (
''
,'user02'
,'test'
,'admin'
)

13. mv\ /use/local/apache/phplib-6.1/pages \
/use/local/apach/htdocs
将演示子目录置于Web服务器的根目录下,这样就可以用浏览器访问它。
14. 编辑文本文件/usr/local/apache/htdocs/robots.txt,使它包括如下内容:

Disallow: /phplib/

15. 使用Web浏览器访问http://localhost/phplib/。将会看到如图2.1所示页面。

Page 29 图2.1

图2.1 重新装载两次以后出现的PHPLIB演示页面

2.8 测试Linux环境下的ODBC
对所装软件进行基本测试是很重要的,特别是需要手工编辑配置文件时。如下的测试可确保你的MySQL驱动程序运行正常,并且编译的iODBC库文件也是正确无误的。
1. 使用清单2.1所列的内容,建立一个名为/usr/local/etc/odbc.ini的文件。

清单 2.2 /usr/local/etc/odbc.ini- 系统ODBC 配置文件
;
;odbc.ini
;

[ODBC Data Sources]
mysql = mysql

[php_book]
driver = /usr/local/myodbc/lib/libmyodbc.so
host = localhost
database = mysql
user = root

2. cd /usr/local/src/libiodbc-2.50.3/samples
3. ./odbctest
运行ODBC测试程序。
4. DSN=mysql;PWD=password
告诉测试程序要访问的数据源。
5. select host,user from user
在提示符下执行一个SQL语句,如果有回应,说明iODBC和MySQL已经可以使用了。
现在,在计算机中已经安装好了ODBC,由于它的安装步骤不太清晰而且文档又很少,所以本章中讲述了其安装和测试指令,然而鉴于ODBC主要是一项Microsoft技术,且很少在Linux中用到,所以这里是本书中最后一次有关介绍。
2.9 总结:
本章讲述了如何获取PHP,及在计算机中进行安装所需要的步骤,编译了内建PHP的特定版本Apache 服务器。同时,还安装了将在第15章“中场四:处理并发访问”中用所到的PHPLIB。

‘陆’ php学习有什么要求

HP 学习目录

├─PHP视频教程 1 LAMP网站构建

│ ├─PHP教程 1.1.1 新版视频形式介绍
│ ├─PHP教程 1.1.2 BS结构软件类型介绍
│ ├─PHP教程 1.1.3 现在是Web2.0的时代
│ ├─PHP教程 1.1.4 Web开发标准
│ ├─PHP教程 1.1.5 认识脚本语言
│ ├─PHP教程 1.2.1 动态网站开发所需的web构件1
│ ├─PHP教程 1.2.2 动态网站开发所需的web构件2
│ ├─PHP教程 1.2.3 动态网站开发所需的web构件3
│ ├─PHP教程 1.3.1 Web的工作原理
│ ├─PHP教程 1.3.2 Web工作原理之url解析
│ ├─PHP教程 1.3.3 Web工作原理之动态网站解析
│ ├─PHP教程 1.4.1 介绍了三种主流的Web应用平台
│ ├─PHP教程 1.4.2 主要三种Web平台进行对比
│ └─PHP教程 1.5.1 介绍LAMP网站开发组合概述及发展趋势

├─PHP视频教程 2 从搭建你的PHP开发环境开始

│ ├─PHP教程 2.1.1 PHP的几种运行环境
│ ├─PHP教程 2.2.1 安装PHP的运行环境
│ └─PHP教程 2.2.2 PHP运行环境的介绍

├─PHP视频教程 3 PHP基本语法

│ ├─PHP教程 3.1.1 PHP的功能介绍
│ ├─PHP教程 3.2.1 第一个PHP程序
│ ├─PHP教程 3.3.1 PHP语言标记及指令分隔符“分号”
│ ├─PHP教程 3.3.2 PHP程序注释及空白的使用
│ ├─PHP教程 3.4.1 PHP变量在计算机内存中的存储方式
│ ├─PHP教程 3.4.2 PHP变量的声明及变量的命名
│ ├─PHP教程 3.4.3 PHP可变变量
│ ├─PHP教程 3.4.4 PHP引用变量1
│ ├─PHP教程 3.4.5 PHP引用变量2
│ ├─PHP教程 3.5.1 PHP变量类型的介绍
│ ├─PHP教程 3.5.2 PHP布尔类型(boolean)
│ ├─PHP教程 3.5.3 PHP整型(integer)和浮点型(float或double)
│ ├─PHP教程 3.5.4 PHP字符串的声明及定义
│ ├─PHP教程 3.5.5 PHP字符串中单双引号的区别
│ ├─PHP教程 3.5.6 PHP字符串的定界符声明
│ ├─PHP教程 3.5.7 PHP变量的其它数据类型
│ ├─PHP教程 3.6.1 PHP数据类型转换及强制类型转换
│ ├─PHP教程 3.6.2 PHP数据类型转换之自动类型转换
│ ├─PHP教程 3.7.1 PHP常量的介绍
│ ├─PHP教程 3.7.2 PHP常量的声明和使用
│ ├─PHP教程 3.7.3 预定义常量
│ ├─PHP教程 3.8.1 PHP中的运算符号有哪些
│ ├─PHP教程 3.8.2 PHP算术运算符
│ ├─PHP教程 3.8.3 PHP自加自减运算
│ ├─PHP教程 3.8.4 PHP自加自减运算需要注意的地方
│ ├─PHP教程 3.8.5 PHP赋值运算符
│ ├─PHP教程 3.8.6 PHP比较运算符
│ ├─PHP教程 3.8.7 PHP逻辑运算符
│ ├─PHP教程 3.8.8 PHP逻辑运算符的特性(短路)
│ ├─PHP教程 3.8.9 PHP中的位运算符1
│ ├─PHP教程 3.8.10 PHP中的位运算符2
│ ├─PHP教程 3.8.11 PHP中的位运算符3
│ ├─PHP教程 3.8.12 PHP其他运算符
│ └─PHP教程 3.8.13 PHP运算符的优先级和表达式

├─PHP视频教程 4 PHP的流程控制结构

│ ├─PHP教程 4.1.1 PHP流程控制概述
│ ├─PHP教程 4.1.2 PHP分支结构
│ ├─PHP教程 4.2.1 PHP单一条件分支结构和双向条件分支结构
│ ├─PHP教程 4.2.2 58PHP多向条件分支结构(elseif子句)
│ ├─PHP教程 4.2.3 PHP多向条件分支(switch语句)1
│ ├─PHP教程 4.2.4 PHP多向条件分支(switch语句)2
│ ├─PHP教程 4.2.5 PHP巢状分支结构
│ ├─PHP教程 4.2.6 PHP实例(简单计算器)1
│ ├─PHP教程 4.2.7 PHP实例(简单计算器)2
│ ├─PHP教程 4.2.8 PHP实例(简单计算器)3
│ ├─PHP教程 4.2.9 PHP实例(简单计算器)4
│ ├─PHP教程 4.3.1 PHP循环结构的介绍
│ ├─PHP教程 4.3.2 PHP循环结构while语句
│ ├─PHP教程 4.3.3 PHP循环结构while的应用
│ ├─PHP教程 4.3.4 PHP循环结构do-while语句
│ ├─PHP教程 4.3.5 PHP循环结构for语句
│ ├─PHP教程 4.3.6 PHP循环结构for语句的应用
│ ├─PHP教程 4.3.7 特殊流程控制语句
│ └─PHP教程 4.3.8 PHP流程控制语句goto

├─PHP视频教程 5 PHP的函数应用

│ ├─PHP教程 5.1.1 PHP函数的定义和应用
│ ├─PHP教程 5.2.1 PHP自定义函数的语法格式
│ ├─PHP教程 5.2.2 PHP自定义函数中的参数
│ ├─PHP教程 5.2.3 PHP自定义函数中的返回值(return)
│ ├─PHP教程 5.3.1 PHP局部变量
│ ├─PHP教程 5.3.2 PHP全局变量
│ ├─PHP教程 5.3.3 PHP静态变量
│ ├─PHP教程 5.4.1 PHP常规参数的函数
│ ├─PHP教程 5.4.2 PHP引用参数的函数
│ ├─PHP教程 5.4.3 PHP默认参数的函数
│ ├─PHP教程 5.4.4 PHP可变个数参数的函数
│ ├─PHP教程 5.4.5 PHP变量函数
│ ├─PHP教程 5.4.6 PHP回调函数
│ ├─PHP教程 5.4.7 PHP制作回调函数1
│ ├─PHP教程 5.4.8 PHP制作回调函数2
│ ├─PHP教程 5.4.9 PHP制作回调函数3
│ ├─PHP教程 5.4.10 PHP系统函数
│ ├─PHP教程 5.5.1 PHP递归函数
│ ├─PHP教程 5.6.1 PHP加载自定义的函数库
│ ├─PHP教程 5.7.1 PHP5.3的新特性匿名函数
│ ├─PHP教程 5.8.1 PHP闭包函数(closures)的概念
│ └─PHP教程 5.8.2 PHP闭包函数(closures)的特性

├─PHP视频教程 6 PHP中的数组与数据结构

│ ├─PHP教程 6.1.1 PHP数组的概述
│ ├─PHP教程 6.1.2 PHP数组的基本概念及分类
│ ├─PHP教程 6.2.1 PHP数组声明的特性
│ ├─PHP教程 6.2.2 PHP索引和关联数组及需要注意的细节
│ ├─PHP教程 6.2.3 PHP使用array()声明数组
│ ├─PHP教程 6.2.4 PHP删除数组中的值应用实例(猴子选大王)
│ ├─PHP教程 6.2.5 PHP二维数组
│ ├─PHP教程 6.2.6 PHP多维数组
│ ├─PHP教程 6.3.1 使用for循环遍历数组
│ ├─PHP教程 6.3.2 使用foreach语句遍历数组
│ ├─PHP教程 6.3.3 使用foreach语句遍历数组的应用
│ ├─PHP教程 6.3.4 list()函数的语法结构
│ ├─PHP教程 6.3.5 each()函数的特性
│ ├─PHP教程 6.3.6 使用list( )、each( )和while循环遍历数组
│ ├─PHP教程 6.3.7 使用数组的内部指针控制函数遍历数组
│ ├─PHP教程 6.4.1 PHP超全局数组(预定义变量)概述
│ ├─PHP教程 6.4.2 服务器变量$_SERVER和环境变量$_ENV
│ ├─PHP教程 6.4.3 PHP超全局数组介绍1
│ ├─PHP教程 6.4.4 PHP超全局数组介绍2
│ ├─PHP教程 6.5.1 PHP常用数组函数的分类
│ ├─PHP教程 6.5.2 PHP数组中和键值搜索相关的函数1
│ ├─PHP教程 6.5.3 PHP数组中和键值搜索相关的函数2
│ ├─PHP教程 6.5.4 PHP数组中和键值搜索相关的函数3
│ ├─PHP教程 6.5.5 PHP数组中统计数组元素的个数与唯一性的函数
│ ├─PHP教程 6.5.6 PHP使用回调函数处理数组的函数array_filter()
│ ├─PHP教程 6.5.7 PHP使用回调函数处理数组的函数array_walk()
│ ├─PHP教程 6.5.8 PHP使用回调函数处理数组的函数array_map()
│ ├─PHP教程 6.5.9 PHP中的冒泡(起泡)排序算法
│ ├─PHP教程 6.5.10 PHP二分法进行快速排序的原理
│ ├─PHP教程 6.5.11 使用PHP程序进一步理解快速排序法
│ ├─PHP教程 6.5.12 PHP数组的排序函数1
│ ├─PHP教程 6.5.13 PHP数组的排序函数2
│ ├─PHP教程 6.5.14 PHP数组的排序函数3
│ ├─PHP教程 6.5.15 PHP多维数组的排序函数
│ ├─PHP教程 6.5.16 PHP拆分、合并、分解与结合数组函数1
│ ├─PHP教程 6.5.17 PHP拆分、合并、分解与结合数组函数2
│ ├─PHP教程 6.5.18 PHP数组与数据结构的函数
│ └─PHP教程 6.5.19 PHP其他有用的数组处理函数

─PHP视频教程 7 PHP面向对象的程序设计

├─PHP教程 7.1.1 PHP面向对象之面向过程详解
├─PHP教程 7.1.2 PHP面向对象之面向对象编程思想详解
├─PHP教程 7.1.3 PHP面向对象的重要优势及案例分析
├─PHP教程 7.1.4 PHP类和对象之间的关系
├─PHP教程 7.2.1 PHP如何抽象一个类
├─PHP教程 7.2.2 PHP类中的成员属性和成员方法
├─PHP教程 7.3.1 PHP实例化对象
├─PHP教程 7.3.2 PHP画图理解对象在内存中的形式
├─PHP教程 7.3.3 特殊的对象引用”$this”
├─PHP教程 7.3.4 PHP构造方法
├─PHP教程 7.3.5 PHP析构方法
├─PHP教程 7.4.1 复习前面的面向对象知识
├─PHP教程 7.5.1 PHP面向对象封装性1
├─PHP教程 7.5.2 PHP面向对象封装性2](http://www.jianshu.com/p/2713d9252da4)
├─PHP教程 7.5.3 PHP面向对象封装性之魔术方法1
├─PHP教程 7.5.4 PHP面向对象封装性之魔术方法2
├─PHP教程 7.6.1 PHP类的继承
├─PHP教程 7.6.2 PHP类的访问类型控制
├─PHP教程 7.6.3 PHP继承中的重载(覆盖)
├─PHP教程 7.7.1 PHP常见的关键字
├─PHP教程 7.7.2 static关键字的使用1
├─PHP教程 7.7.3 static关键字的使用2
├─PHP教程 7.7.4 单态(单例、单件)设计模式
├─PHP教程 7.7.5 const关键字
├─PHP教程 7.7.6 魔术方法__toString()
├─PHP教程 7.7.7 魔术方法__clone()
├─PHP教程 7.7.8 魔术方法__call()
├─PHP教程 7.7.9 对象串行化(序列化)1
├─PHP教程 7.7.10 对象串行化(序列化)2
├─PHP教程 7.7.11 PHP数组的串行化(JSON格式)
├─PHP教程 7.7.12 魔术方法__set_state()
├─PHP教程 7.7.13 PHP 5.3以后新增的魔术方法
├─PHP教程 7.7.14 自动加载类__autoload()
├─PHP教程 7.8.1 PHP抽象方法和抽象类1
├─PHP教程 7.8.2 PHP抽象方法和抽象类2
├─PHP教程 7.8.3 PHP面向对象接口技术
├─PHP教程 7.8.4 PHP接口应用的一些细节
├─PHP教程 7.8.5 PHP面象对象的特性多态
├─PHP教程 7.9.1 PHP多态的应用实例
├─PHP教程 7.10.1 PHP图形计算器需求分析
├─PHP教程 7.10.2 PHP图形计算器功能设计
├─PHP教程 7.10.3 PHP图形计算器主程序的实现
├─PHP教程 7.10.4 PHP图形计算器主程序的步骤及代码
├─PHP教程 7.10.5 PHP图形计算器主程序完成检验
├─PHP教程 7.11.1 与类有关的魔术常量和函数
├─PHP教程 7.12.1 PHP命名空间的概述
├─PHP教程 7.12.2 PHP定义子命名空间
├─PHP教程 7.12.3 PHP在同一文件中定义多个命名空间
├─PHP教程 7.12.4 PHP命名空间和动态语言特征
└─PHP教程 7.12.5 PHP使用命名空间:别名导入

├─PHP视频教程 8 PHP字符串处理

│ ├─PHP教程 8.1.1 字符串的处理方式1
│ ├─PHP教程 8.1.2 字符串的处理方式2
│ ├─PHP教程 8.2.1 常用的字符串输出函数1
│ ├─PHP教程 8.2.2 常用的字符串输出函数2
│ ├─PHP教程 8.3.1 去除空格和字符串填补及大小写转换函数
│ ├─PHP教程 8.3.2 和HTML标签相关的字符串格式化函数
│ ├─PHP教程 8.3.3 字符串格式化函数
│ ├─PHP教程 8.4.1 字符串比较函数
│ ├─PHP教程 8.5.1 字符串面试题1
│ ├─PHP教程 8.5.2 字符串面试题2
│ └─PHP教程 8.5.3 字符串面试题3

├─PHP视频教程 9 PHP正则表达式

│ ├─PHP教程 9.1.1 选择PHP正则表达式的处理函数库
│ ├─PHP教程 9.2.1 正则表达式语法介绍1
│ ├─PHP教程 9.2.2 正则表达式语法介绍2
│ ├─PHP教程 9.2.3 正则表达式中的原子1
│ ├─PHP教程 9.2.4 正则表达式中的原子2
│ ├─PHP教程 9.2.5 正则表达式中的元字符1
│ ├─PHP教程 9.2.6 正则表达式中的元字符2
│ ├─PHP教程 9.2.7 正则表达式中元字符中的小括号
│ ├─PHP教程 9.2.8 模式修正符(单个字符)1
│ ├─PHP教程 9.2.9 模式修正符(单个字符)2
│ ├─PHP教程 9.3.1 字符串的匹配与查找之(strstr、strpos、substr)
│ ├─PHP教程 9.3.2 字符串的匹配与查找之(preg_match)
│ ├─PHP教程 9.3.3 字符串的匹配与查找之(preg_match_all与preg_grep)
│ ├─PHP教程 9.3.4 字符串的分割与连接(explode、implode join、preg_split)
│ ├─PHP教程 9.3.5 字符串的替换(str_replace)
│ ├─PHP教程 9.3.6 字符串的替换(preg_replace)1
│ ├─PHP教程 9.3.7 字符串的替换(preg_replace)2
│ ├─PHP教程 9.3.8 字符串中正则的其它函数
│ ├─PHP教程 9.2.10 如何自己编写正则表达式(url)
│ └─PHP教程 9.2.11 编写email正则表达式

├─PHP视频教程 10 PHP的错误和异常处理

│ ├─PHP教程 10.1.1 错误报告及设置级别
│ ├─PHP教程 10.1.2 自定义PHP的错误报告处理方式
│ ├─PHP教程 10.1.3 设置错误日志
│ ├─PHP教程 10.2.1 PHP异常处理1
│ ├─PHP教程 10.2.2 PHP异常处理2
│ ├─PHP教程 10.2.3 自定义异常类
│ └─PHP教程 10.2.4 捕获多个异常

├─PHP视频教程 11 PHP日期时间

│ ├─PHP教程 11.1.1 PHP中应用日期和时间1
│ ├─PHP教程 11.1.2 PHP中应用日期和时间2
│ └─PHP教程 11.1.3 PHP日历核心程序编写

├─PHP视频教程 12 PHP文件系统处理

│ ├─PHP教程 12.1.1 文件系统概述
│ ├─PHP教程 12.1.2 文件的属性
│ ├─PHP教程 12.2.1 解析目录路径
│ ├─PHP教程 12.2.2 遍历目录
│ ├─PHP教程 12.2.3 统计目录中的个数和大小
│ ├─PHP教程 12.2.4 建立与删除目录
│ ├─PHP教程 12.2.5 复制、移动目录
│ ├─PHP教程 12.3.1 文件的一些基本操作函数
│ ├─PHP教程 12.3.2 文件的打开与关闭
│ ├─PHP教程 12.3.3 文件的内容操作
│ ├─PHP教程 12.3.4 简单留言版
│ ├─PHP教程 12.3.5 文件的锁定机制
│ ├─PHP教程 12.4.1 文件上传的设置
│ ├─PHP教程 12.4.2 文件上传的处理
│ ├─PHP教程 12.4.3 处理多个文件上传
│ ├─PHP教程 12.4.4 文件上传类
│ └─PHP教程 12.4.5 文件下载

─PHP视频教程 13 GD库

│ ├─PHP教程 13.1.1 PHP中GD库的使用
│ ├─PHP教程 13.1.2 使用GD库画图
│ ├─PHP教程 13.1.3 绘制各种图形
│ ├─PHP教程 13.1.4 画时钟
│ ├─PHP教程 13.2.1 设计验证码类
│ ├─PHP教程 13.2.2 验证码类的编写1
│ ├─PHP教程 13.2.3 验证码类的编写2
│ ├─PHP教程 13.2.4 验证码类完善
│ ├─PHP教程 13.3.1 图片背景管理
│ ├─PHP教程 13.3.2 图片的缩放和剪切
│ ├─PHP教程 13.3.3 添加图片水印
│ ├─PHP教程 13.3.4 图片的旋转和翻转
│ └─PHP教程 13.3.5 图像处理类

├─PHP视频教程 14 数据库

│ ├─PHP教程 14.1.1 复习数据库
│ ├─PHP教程 14.1.2 phpMyAdmin的使用
│ ├─PHP教程 14.1.3 php访问MySQL
│ ├─PHP教程 14.1.4 在PHP脚本中操作MySQL数据库1
│ ├─PHP教程 14.1.5 在PHP脚本中操作MySQL数据库2
│ ├─PHP教程 14.1.6 在PHP脚本中操作MySQL数据库3
│ ├─PHP教程 14.1.7 在PHP脚本中操作MySQL数据库4
│ ├─PHP教程 14.2.1 分页需求分析
│ ├─PHP教程 14.2.2 分页类中分页的编写
│ ├─PHP教程 14.2.3 分页类中列表页的编写
│ ├─PHP教程 14.2.4 分页类的优化
│ ├─PHP教程 14.2.5 《细说PHP》分页类的使用
│ ├─PHP教程 14.3.1 图书管理需求分析
│ ├─PHP教程 14.3.2 添加图书
│ ├─PHP教程 14.3.3 图书列表
│ ├─PHP教程 14.3.4 修改图书
│ ├─PHP教程 14.3.5 删除图书
│ ├─PHP教程 14.3.6 上传图书封面
│ ├─PHP教程 14.3.7 修改图书封面
│ ├─PHP教程 14.3.8 图书列表分页
│ └─PHP教程 14.3.9 多搜索加分页

├─PHP视频教程 15 PDO

│ ├─PHP教程 15.1.1 数据库抽象层PDO
│ ├─PHP教程 15.1.2 创建PDO对象
│ ├─PHP教程 15.1.3 PDO与连接有关的选项
│ ├─PHP教程 15.1.4 PDO的错误处理模式
│ ├─PHP教程 15.1.5 使用PDO执行SQL语句
│ ├─PHP教程 15.1.6 PDO事务处理
│ ├─PHP教程 15.2.1 PDO对预处理语句的支持
│ ├─PHP教程 15.2.2 使用PDO准备语句并执行语句1
│ ├─PHP教程 15.2.3 使用PDO准备语句并执行语句2
│ ├─PHP教程 15.2.4 PDO的预处理查询1
│ ├─PHP教程 15.2.5 PDO的预处理查询2
│ └─PHP教程 15.2.6 用PDO存取大数据对象

├─PHP视频教程 16 memcache管理与应用

│ ├─PHP教程 16.1.1 memcache应用说明
│ ├─PHP教程 16.1.2 memcache工作原理
│ ├─PHP教程 16.1.3 memcache的安装
│ ├─PHP教程 16.1.4 Memcache的常用命令操作
│ ├─PHP教程 16.1.5 php的memcache功能扩展模块安装
│ ├─PHP教程 16.1.6 PHP中操作memcache
│ ├─PHP教程 16.1.7 在PHP中设置分布式memcache存取1
│ └─PHP教程 16.1.8 在PHP中设置分布式memcache存取2

─PHP视频教程 17 PHP会话控制

├─PHP教程 17.1.1 http协议和web本质1
├─PHP教程 17.1.2 http协议和web本质2
├─PHP教程 17.1.3 http协议和web本质3
├─PHP教程 17.2.1 会话控制概述
├─PHP教程 17.3.1 会话控制之Cookie概述
├─PHP教程 17.3.2 Cookie的操作
├─PHP教程 17.3.3 Cookie的应用1
├─PHP教程 17.3.4 Cookie的应用2
├─PHP教程 17.4.1 会话控制session的工作机制
├─PHP教程 17.4.2 session的应用
├─PHP教程 17.4.3 session的配置选项
├─PHP教程 17.4.4 sessoion自动垃圾回收机制
├─PHP教程 17.4.5 基于url传递session的id
├─PHP教程 17.4.6 邮件系统实例1
├─PHP教程 17.4.7 邮件系统实例2
├─PHP教程 17.5.1 自定义session的存储机制
├─PHP教程 17.5.2 如何自定义session的处理方式1
├─PHP教程 17.5.3 如何自定义session的处理方式2
├─PHP教程 17.5.4 自定义session类
├─PHP教程 17.5.5 使用数据库来存储session信息1
├─PHP教程 17.5.6 使用数据库来存储session信息2
├─PHP教程 17.5.7 使用数据库来存储session信息3
└─PHP教程 17.5.8 使用memcache来存储session

PHP视频教程 18 PHP的模板引擎Smarty

├─PHP教程 18.1.1 什么是模板引擎
├─PHP教程 18.2.1 自定义模板引擎类1
├─PHP教程 18.2.2 自定义模板引擎类2
├─PHP教程 18.2.3 使用自定义的模板引擎
├─PHP教程 18.3.1 选择Smarty模板引擎
├─PHP教程 18.3.2 Smarty的安装初使化示例1
├─PHP教程 18.3.3 Smarty的安装初使化示例2
├─PHP教程 18.3.4 需要学习Smarty的哪儿些内容
├─PHP教程 18.4.1 模板中的变量应用
├─PHP教程 18.4.2 从配置文件读取变量
├─PHP教程 18.4.3 在模板中使用保留变量
├─PHP教程 18.5.1 变量调节(修改)器
├─PHP教程 18.5.2 变量调节(修改)器和应用
├─PHP教程 18.5.3 使用registerPlugin来注册变量调节器
├─PHP教程 18.5.4 使用插件来注册变量调节器
├─PHP教程 18.5.5 smarty中的函数
├─PHP教程 18.5.6 smarty中的内置函数
├─PHP教程 18.6.1 smarty中自定义函数
├─PHP教程 18.6.2 smarty中自定义函数插件实例
├─PHP教程 18.7.1 smarty中内置函数的使用
├─PHP教程 18.7.2 smarty变量声明
├─PHP教程 18.7.3 smarty流程控制
├─PHP教程 18.7.4 smarty中for、while循环
├─PHP教程 18.7.5 smarty中{function}标签
├─PHP教程 18.7.6 smarty2中的foreach
├─PHP教程 18.7.7 smarty3中的foreach
├─PHP教程 18.7.8 smarty中的section
├─PHP教程 18.8.1 smarty模板继承
├─PHP教程 18.9.1 页面静态化加分页原理
└─PHP教程 18.9.2 在smarty中控制缓存

阅读全文

与php第一个程序相关的资料

热点内容
powermill编程培训班 浏览:489
pdf与word文档区别 浏览:57
MC你如何将材质包装进服务器 浏览:701
单片机的外文资料 浏览:547
什么是白盒加密算法 浏览:804
乐书pdf 浏览:427
a星寻路算法在3d中 浏览:137
抗震等级不同箍筋加密区范围不同 浏览:471
xshell上传文件命令 浏览:781
优先级队列java 浏览:156
轻量化腾讯云服务器有什么用 浏览:462
编译原理自编译语言 浏览:425
闲鱼app为什么这么多 浏览:692
安卓手机玩游戏不卡怎么设置 浏览:568
编译链接装载书 浏览:539
面试腾讯公司程序员 浏览:110
一个字母y是什么app 浏览:144
魔兽大脚解压安装教程 浏览:10
超时代共享文件夹破解版 浏览:445
命令与征服红色警戒3攻略 浏览:728