导航:首页 > 编程语言 > 18哥php

18哥php

发布时间:2023-09-13 05:35:45

A. php有哪些优化技巧

优化的点有很多,看具体使用环境:

1、 用单引号代替双引号来包含字符串,这样做会更快一些。因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译注:PHP 手册中说 echo 是语言结构,不是真正的函数,故把函数 加上了双引号)。

2、如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近 4 倍。

3、$row['id'] 的速度是$row[id]的 7 倍。

4、echo 比 print 快,并且使用 echo 的多重参数(译注:指用逗号而不是句点)代替字符串 连接,比如 echo $str1,$str2。

5、在执行 for 循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用 foreach 代替。

6、注销那些不用的变量尤其是大数组,以便释放内存。

7、尽量避免使用__get,__set,__autoload。

8、require_once()代价昂贵。

9、include 文件时尽量使用绝对路径,因为它避免了 PHP 去 include_path 里查找文件的速 度,解析操作系统路径所需的时间会更少。

10、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用 $_SERVER['REQUEST_TIME'] 要好于 time()

11、函数代替正则表达式完成相同功能。

12、str_replace 函数比 preg_replace 函数快,但 strtr 函数的效率是 str_replace 函数的四倍。

13、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么 可以考虑额外写一段替换代码, 使得每次传递参数是一个字符, 而不是只写一行代码接受数 组作为查询和替换的参数。

14、使用选择分支语句(译注:即 switch case)好于使用多个 if,else if 语句。

15、用@屏蔽错误消息的做法非常低效,极其低效。

16、打开 apache 的 mod_deflate 模块,可以提高网页的浏览速度。

17、数据库连接当使用完毕时应关掉,不要用长连接。

18、错误消息代价昂贵。

19、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

20、递增一个全局变量要比递增一个局部变量慢 2 倍。

21、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢 3 倍。

22、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢 9 至 10 倍。

23、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局 部变量)。PHP 大概会检查看是否存在全局变量。

24、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了 10 个方法,但性能上没有变化。

25、派生类中的方法运行起来要快于在基类中定义的同样的方法。

26、调用带有一个参数的空函数,其花费的时间相当于执行 7 至 8 次的局部变量递增操作。 类似的方法调用所花费的时间接近于 15 次的局部变量递增操作。

27、Apache 解析一个 PHP 脚本的时间要比解析一个静态 HTML 页面慢 2 至 10 倍。尽量 多用静态 HTML 页面,少用脚本。

28、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套 PHP 缓存机制通常 可以提升 25%至 100%的性能,以免除编译开销。

29、尽量做缓存,可使用 memcached。memcached 是一款高性能的内存对象缓存系统, 可用来加速动态 Web 应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使 得脚本不必为每个请求做重新编译。

30、 当操作字符串并需要检验其长度是否满足某种要求时, 你想当然地会使用 strlen()函数。 此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C 的内置数据结构,用 于存储 PHP 变量)中存储的已知字符串长度。但是,由于 strlen()是函数,多多少少会有些 慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP 不区分函 数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用 isset() 技巧加速执行你的代码。 (举例如下) if (strlen($foo) < 5) { echo “Foo is too short”$$ } (与下面的技巧做比较) if (!isset($foo{5})) { echo “Foo is too short”$$ } 调用 isset()恰巧比 strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它 的执行不需要函数查找和字母小写化。 也就是说, 实际上在检验字符串长度的顶层代码中你 没有花太多开销。

31、当执行变量$i 的递增或递减时,$i++会比++$i 慢一些。这种差异是 PHP 特有的,并不 适用于其他语言, 所以请不要修改你的 C 或 java 代码并指望它们能立即变快, 没用的。 ++$i 更快是因为它只需要 3 条指令(opcodes),$i++则需要 4 条指令。后置递增实际上会产生一 个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的 一种,正如 Zend 的 PHP 优化器所作的那样。牢记这个优化处理不失为一个好主意,因为 并不是所有的指令优化器都会做同样的优化处理, 并且存在大量没有装配指令优化器的互联 网服务提供商(ISPs)和服务器。

32、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很 多内存。

33、并非要用类实现所有的数据结构,数组也很有用。

34、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

35、当你需要时,你总能把代码分解成方法。

36、尽量采用大量的 PHP 内置函数。

37、如果在代码中存在大量耗时的函数,你可以考虑用 C 扩展的方式实现它们。

38、 评估检验(profile)你的代码。 检验器会告诉你, 代码的哪些部分消耗了多少时间。 Xdebug 调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

39、mod_zip 可作为 Apache 模块,用来即时压缩你的数据,并可让数据传输量降低 80%。

40、在可以用 file_get_contents 替代 file、fopen、feof、fgets 等系列方法的情况下,尽量 用 file_get_contents,因为他的效率高得多!但是要注意 file_get_contents 在打开一个 URL 文件时候的 PHP 版本问题;

41、尽量的少进行文件操作,虽然 PHP 的文件操作效率也不低的;

42、优化 Select SQL 语句,在可能的情况下尽量少的进行 Insert、Update 操作(在 update 上,我被恶批过);

43、尽可能的使用 PHP 内部函数(但是我却为了找个 PHP 里面不存在的函数,浪费了本可 以写出一个自定义函数的时间,经验问题啊!);

44、 循环内部不要声明变量, 尤其是大变量: 对象(这好像不只是 PHP 里面要注意的问题吧?);

45、多维数组尽量不要循环嵌套赋值;

46、在可以用 PHP 内部字符串操作函数的情况下,不要用正则表达式;

47、foreach 效率更高,尽量用 foreach 代替 while 和 for 循环;

48、用单引号替代双引号引用字符串;

49、“用 i+=1 代替 i=i+1。符合 c/c++的习惯,效率还高”

50、对 global 变量,应该用完就 unset()掉;

B. 用php打印1到100中所有偶数,每行打印10个数

代码如下:

<?php
$num = 0;
for($i=2;$i<=100;$i+=2){
$num++;
if($num<=10){//打印,每个数字之间留个一个汉字的空位
echo $i."&emsp;";
}else{//换行
$num =0;
echo "<br />";
}

}


效果如下:

C. 使用 PHP 函数编写程序,判断输入一个变量为全数字,字符串长度不允许超过 18 位,不允许为空

php:
if(is_numeric($_POST['num'])) echo '全是数字';
else echo '不全是数字';
if(strlen($_POST['num']) > ) echo '超过个字符';
else echo '没有超过个字符';
js:
if(parseInt(num) == num) alert('全是数字');
else alert('不全是数字');
if(num.length > ) alert('超过个字符');
else alert('没有超过个字符');

D. 超常用的PHP正则表达式收集整理

以下就是对超常用的PHP正则表达式进行的收集整理,为了方便大家更快更好的掌握php正则表达式。
一、表单验证匹配
验证账号,字母开头,允许
5-16
字节,允许字母数字下划线:^[a-zA-Z][a-zA-Z0-9_]{4,15}$
验证账号,不能为空,不能有空格,只能是英文字母:^\S+[a-z
A-Z]$
验证账号,不能有空格,不能非数字:^\d+$
验证用户密码,以字母开头,长度在
6-18
之间:^[a-zA-Z]\w{5,17}$
验证是否含有
^%&',;=?$\
等字符:[^%&',;=?$\x22]+
匹配Email地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配日期,只能是
2004-10-22
格式:^\d{4}\-\d{1,2}-\d{1,2}$
匹配国内电话号码:^\d{3}-\d{8}|\d{4}-\d{7,8}$------------评注:匹配形式如010-12345678
或0571-12345678

0831-1234567
匹配中国邮政编码:^[1-9]\d{5}(?!\d)$
匹配身份证:\d{14}(\d{4}|(\d{3}[xX])|\d{1})------------评注:中国的身份证为15
位或18

不能为空且二十字节以上:^[\s|\S]{20,}$
二、字符匹配
匹配由
26
个英文字母组成的字符串:^[A-Za-z]+$
匹配由
26
个大写英文字母组成的字符串:^[A-Z]+$
匹配由
26
个小写英文字母组成的字符串:^[a-z]+$
匹配由数字和
26
个英文字母组成的字符串:^[A-Za-z0-9]+$
匹配由数字、26个英文字母或者下划线组成的字符串:^\w+$
匹配空行:\n[\s|
]*\r
匹配任何内容:[\s\S]*
匹配中文字符:[\x80-\xff]+
或者
[\xa1-\xff]+
只能输入汉字:^[\x80-\xff],{0,}$
匹配双字节字符(包括汉字在内):[^\x00-\xff]
三、匹配数字
只能输入数字:^[0-9]*$
只能输入n位的数字:^\d{n}$
只能输入至少n位数字:^\d{n,}$
只能输入m-n位的数字:^\d{m,n}$
匹配正整数:^[1-9]\d*$
匹配负整数:^-[1-9]\d*$
匹配整数:^-?[1-9]\d*$
匹配非负整数(正整数
+
0):^[1-9]\d*|0$
匹配非正整数(负整数
+
0):^-[1-9]\d*|0$
匹配正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
匹配负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$
匹配浮点数:^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
匹配非负浮点数(正浮点数
+
0):^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
匹配非正浮点数(负浮点数
+
0):^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
四、其他
匹配HTML标记的正则表达式(无法匹配嵌套标签):<(\S*?)[^>]*>.*?</\1>|<.*?
/>
匹配网址
URL
:[a-zA-z]+://[^\s]*
匹配
IP
地址:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
匹配完整域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
提示
上述正则表达式通常都加了
^

$
来限定字符的起始和结束,如果需要匹配的内容包括在字符串当中,可能需要考虑去掉
^

$
限定符。
以上正则表达式仅供参考,使用时请检验后再使用,希望通过这些超常用的PHP正则表达式

E. 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

F. PHP可以做什么

PHP可以做什么

PHP属于后起之秀,吸收了java和c以及perl等语言优点,专注互联网领域。WEB领域PHP拥有得天独厚的优势,WEB领域没有语言可以和他比。将来一定是互联网的天下。互联网离不开WEB,WEB离不开PHP。那么PHP可以做什么?一起来看看PHP的用途吧!

PC端网站开发

60%全球互联网网站采用php技术,80%国内互联网网站使用php开发。这些网站包含购物网站,政府企业网站,QQ空间,论坛博客等等。

移动端微网站开发

移动设备的普及为移动互联网的快速发展奠定了基础!手机淘宝网站,手机京东网站等等, 微信公众号应用中的微网站。 将来微网站和公众号肯定会取代APP的地位!

APP后台开发

APP后台开发也是移动互联网发展的一个产物。大多数网站为了让用户在手机上能够得到更好体验效果,都加入开发APP的开发行列中。而PHP后端技术将会作为他们的不二选择。

PHP主要用来做网站开发,许多小型网站都用PHP开发,PHP是开源的,这是使得PHP经久不衰的原因。在电商、社区等方面,PHP具备非常成熟的开源代码和模板,因此使得PHP应用极为广泛。

php-fpm的安装目录

下面是我的平时的环境搭建php的各种安装目录,大家的基本也差不多。

centos等linux平台

1./usr/local/php/php

2./usr/local/php/etc/php.ini

3./usr/local/php/sbin/php-fpm

4./usr/local/php/etc/php-fpm.conf

mac平台

1./usr/bin/php

2./etc/php.ini

3./usr/bin/php-fpm

4./etc/php-fpm.conf

由于我开发以Mac为主,所以就用Mac的环境配置来学习。

php-fpm配置详解

这是搜索的一份还算算比较详细的php-fpm.conf配置详解,我会针对性的修改下,当然php手册上也有详细的讲解:http://php.net/manual/zh/install.fpm.configuration.php

1.pid = /usr/local/var/run/php-fpm.pid

2.#pid设置,一定要开启,上面是Mac平台的。默认在php安装目录中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid

3.

4.error_log = /usr/local/var/log/php-fpm.log

5.#错误日志,上面是Mac平台的,默认在php安装目录中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log

6.

7.log_level = notice

8.#错误级别. 上面的php-fpm.log纪录的登记。可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

9.

10.emergency_restart_threshold = 60

11.emergency_restart_interval = 60s

12.#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。0 表示 '关闭该功能'. 默认值: 0 (关闭).

13.

14.process_control_timeout = 0

15.#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.

16.

17.daemonize = yes

18.#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。

19.

20.listen = 127.0.0.1:9000

21.#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置。如果nginx和php在不同的机器上,分布式处理,就设置ip这里就可以了。

22.

23.listen.backlog = -1

24.#backlog数,设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41

25.

26.listen.allowed_clients = 127.0.0.1

27.#允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。

28.

29.listen.owner = www

30.listen.group = www

31.listen.mode = 0666

32.#unix socket设置选项,如果使用tcp方式访问,这里注释即可。

33.

34.user = www

35.group = www

36.#启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置。用户组,如果没有设置,则默认用户的组被使用。

37.

38.pm = dynamic

39.#php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand

40.#如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。

41.

42.#如果选择dynamic,则进程数是动态变化的,由以下参数决定:

43.pm.max_children = 50 #子进程最大数

44.pm.start_servers = 2 #启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2

45.pm.min_spare_servers = 1 #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程

46.pm.max_spare_servers = 3 #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

47.

48.pm.max_requests = 500

49.#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.

50.

51.pm.status_path = /status

52.#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到

53.

54.ping.path = /ping

55.#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。

56.

57.ping.response = pong

58.#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.

59.

60.access.log = log/$pool.access.log

61.#每一个请求的访问日志,默认是关闭的。

62.

63.access.format = "%R - %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%%"

64.#设定访问日志的格式。

65.

66.slowlog = log/$pool.log.slow

67.#慢请求的`记录日志,配合request_slowlog_timeout使用,默认关闭

68.

69.request_slowlog_timeout = 10s

70.#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'

71.

72.request_terminate_timeout = 0

73.#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。

74.

75.rlimit_files = 1024

76.#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。

77.

78.rlimit_core = 0

79.#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.

80.

81.chroot =

82.#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.

83.

84.chdir =

85.#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)

86.

87.catch_workers_output = yes

88.#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.

当然还有一些无关紧要的设置,用到了再说吧。

一些重要的设置

php-fpm进程分配

在之前的文章中就说过了。在fasgcgi模式下,php会启动多个php-fpm进程,来接收nginx发来的请求,那是不是进程越多,速度就越快呢?这可不一定!得根据我们的机器配置和业务量来决定。

我们先来看下,设定进程的配置在哪里?

pm = static | dynamic | ondemand

pm可以设置成这样3种,我们用的最多的就上前面2种。

pm = static 模式

pm = static 表示我们创建的php-fpm子进程数量是固定的,那么就只有pm.max_children = 50这个参数生效。你启动php-fpm的时候就会一起全部启动51(1个主+50个子)个进程,颇为壮观。

pm = dynamic 模式

pm = dynamic模式,表示启动进程是动态分配的,随着请求量动态变化的。他由 pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers 这几个参数共同决定。

上面已经讲过,这里再重申一下吧:

pm.max_children = 50 是最大可创建的子进程的数量。必须设置。这里表示最多只能50个子进程。

pm.start_servers = 20 随着php-fpm一起启动时创建的子进程数目。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。这里表示,一起启动会有20个子进程。

pm.min_spare_servers = 10

设置服务器空闲时最小php-fpm进程数量。必须设置。如果空闲的时候,会检查如果少于10个,就会启动几个来补上。

pm.max_spare_servers = 30

设置服务器空闲时最大php-fpm进程数量。必须设置。如果空闲时,会检查进程数,多于30个了,就会关闭几个,达到30个的状态。

到底选择static还数dynamic?

很多人恐惧症来袭,不知道选什么好?

一般原则是:动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。

如果你的内存很大,有8-20G,按照一个php-fpm进程20M算,100个就2G内存了,那就可以开启static模式。如果你的内存很小,比如才256M,那就要小心设置了,因为你的机器里面的其他的进程也算需要占用内存的,所以设置成dynamic是最好的,比如:pm.max_chindren = 8, 占用内存160M左右,而且可以随时变化,对于一半访问量的网站足够了。

慢日志查询

我们有时候会经常饱受500,502问题困扰。当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。

这个时候,我们是可以开启慢日志功能的。

slowlog = /usr/local/var/log/php-fpm.log.slow

request_slowlog_timeout = 15s

当一个请求该设置的超时时间15秒后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。

php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:

1.[21-Nov-2013 14:30:38] [pool www] pid 11877

2.script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php

3.[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2

通过日志,我们就可以知道第2行的file_get_contents 函数有点问题,这样我们就能追踪问题了。

;
阅读全文

与18哥php相关的资料

热点内容
香烟源码查询 浏览:774
台达文本编程软件 浏览:718
单片机烧写器使用视频 浏览:996
拍照哪个app比较好 浏览:132
dhcp服务器不能分配MAC地址 浏览:964
java伪随机数 浏览:128
涂色书怎么解压 浏览:465
三角形圆边编程 浏览:457
手机压缩文件怎么压缩到十兆以下 浏览:987
云主机云服务器品牌 浏览:345
安卓emulated文件夹如何打开 浏览:315
采用fifo页面置换算法是 浏览:194
如何上网代理服务器 浏览:593
Hro系统源码 浏览:847
宝库源码 浏览:342
路飞和熊排解压力 浏览:625
php定时更新 浏览:357
数控5轴编程培训一般多久 浏览:560
cadpdf图层 浏览:250
用登号器出现服务器未响应是什么 浏览:905