收藏 分销(赏)

php页面静态化学习笔记.doc

上传人:天**** 文档编号:2618351 上传时间:2024-06-03 格式:DOC 页数:39 大小:4MB
下载 相关 举报
php页面静态化学习笔记.doc_第1页
第1页 / 共39页
php页面静态化学习笔记.doc_第2页
第2页 / 共39页
php页面静态化学习笔记.doc_第3页
第3页 / 共39页
php页面静态化学习笔记.doc_第4页
第4页 / 共39页
php页面静态化学习笔记.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、php页面静态化学习笔记 作者: 日期:39 个人收集整理 勿做商业用途题外话:大流量技术:1.服务器集群2。mysql优化(设计合理的数据库表3nf,分表垂直分割水平分割,读写分离技术多个mysql同时工作,mysql配置优化,硬件升级)3。缓存技术memched/redis。大型网站提速提速:Mysql优化,页面静态化,memcached大型网站的定义:1. pv值(page views):页面的访问量。当页面访问量很大的时候,带来了很多问题: 流量变大,解决方案 买带宽,优化程序,图片的大小不能多于多少K 并发量变大,同时访问网站的人多了,解决方案,要对程序的结构进行修整-服务器集群传统

2、架构:优化结构:整个的重点还是php程序,考验程序员的东西.2. 数据量很大:解决方法: 表的设计合理 分表技术(垂直分割和水平分割)、建立适当的索引、读写分离、Mysql配置优化(调整最大并发量,定时对数据库碎片整理、碎片,实现方法:windows下用任务管理器,niux下用crontab),硬件升级 页面静态化 缓存技术(memcached)页面静态化技术原理图:几个概念:静态网址:如果我们访问的是静态页面,则把这个url称作静态网站,html网址特点:1。利于seo(search engine optimization)搜索引擎优化2访问速度快3。防止sql注入漏洞动态网址:在访问的时候

3、可以传入参数,称为动态网址,php网址特点:1. 不利于seo2. 访问速度慢3.sql注入的可能伪静态网址:希望达到这样的目的,这样的话,我们把图片下端的称为伪静态网址。这样做的特点:1. 利于seo2. 防止了注入但是它仍然要访问数据库,也就是说速度没有优化。页面静态化的分类:从方式来看:1.真静态,2。伪静态从范围来看:1.全局静态,2。局部静态。测试压力的工具ab.exe需要进入控制台ab.exe n 访问的总次数 c 多少人访问url(并发量)举例说明ab。exe n 10000 c 100 http:/localhost/ phpstatic/ test.php当我们调整访问人数为

4、1000的时候:很悲剧的事情发生了,说明我们的apache服务器支撑不住了。解决方案,我们需要调整apache的最大并发量.MPM(多路处理模块,就是指明apache怎样处理并发):apache处理并发的方式。有三种方式1. perfork 预处理进程方式:预先准备一些进程,等待请求的到来,这样的方式消耗很大。2. worker 工作模式:预先开启进程,当有请求的时候,进程会开启线程,线程为请求服务。一个进程可以开启多个线程3. winnt模式 windows下采用的:就是worker模式简单的说是这样的:如何设置apache最大并发数:1.位置httpd。conf文件中,大约470多行. S

5、erver-pool management (MPM specific)Include conf/extra/httpd-mpm.conf2。确定apache的工作模式: cmd下进入apache的bin目录,输入httpd.exe l(小写的L) ; 我们主要看mpm_yyyyy ,如果这个yyyy是什么,就说明是什么工作模式了。3。去修改httpd-mpm.conf调整150为1000刚才的测试可以运行了4重启apache在linux下如何配置呢,建议配置:如果网站的pv值上到了百万:可以调节如下每个都增加1000即可。对比图:搜索引擎的偏好:如果一张图片希望被百度搜到,img alt=小

6、狗” src=”。.。. /在网站的前台,我们建议不要使用frame这个框架给一个图片或者视图取名字,标题越短越精准会越好.页面静态化技术实现方式:1.使用php自带的ob缓存2.模板替换技术(正则表达式)使用PHP自带的缓存机制实现页面静态化:ob缓存机制:?phpecho ”hello100”; header(contenttype:text/html;charset=rtf-8); echo hello200”;?在php5.2这个版本,在php.ini有一个配置,output_bufferring,如下:如果关闭,就会出现如下警告ob缓存的原理:打开ob缓存就可以解决 配置php。in

7、i,output_buffering=4096(字节) 在程序中开启ob_start();开启ob缓存注意:如果ob缓存打开,那么echo就放在ob缓存里面,如果是header就放到程序缓存里面去。当页面读取完成,那么ob缓存的内容就会被刷新到程序缓存,一并发送给浏览器。ob的几个重要函数:ob_clean():清理ob缓存ob_get_contents():读取ob缓存的数据ob_end_clean():该函数是清空ob中的数据,并关闭ob缓存ob_end_flush();/把ob缓存的数据刷新到程序缓存,同时关闭ob缓存ob_flush();/把ob缓存的数据刷新到程序缓存flush();

8、/把程序缓存的数据,强制刷新到浏览器如下面演示:但是运行结果没有我们想象的那样1秒显示一个数字,我们查看flush()函数发现了问题:如果一定要有效果我们可以:使用ob缓存机制完成一个简单的新闻管理系统:我们实现全站静态化。先按传统方式写完了代码,发现本机访问速度都相当的慢。我们开始做优化:当第一人访问我们的页面时,我们就查询一次数据库,并生成一个静态页面.其他人来查询的时候,我们直接就将生成的静态页面的直接返回.1. 生成静态页面2. 加上逻辑,即可实现一定的优化:第一个页面:?php/列出新闻/ header(”contenttype:text/html;charset=utf-8);co

9、nn=mysql_connect(”localhost”,root,root);if(!$conn)die (连接失败。mysql_error();mysql_select_db(”newssystem,conn);mysql_query(”set names utf8);$sql=select from news”;res=mysql_query($sql);echo ”;echo ”a href=addNews.html添加新闻/a;echo table”;echo trtdid标题/tdtda href=查看详情/tdtd修改新闻”;while(row=mysql_fetch_array

10、(res))echo trtd.$row0.row1.td产看详情/a/tdtda href=修改新闻/a/td;mysql_free_result($res);mysql_close($conn);?第二个页面:?php/传统做法 接受id,查询数据库id=intval($_GETid);/先判断该新闻对应的新闻的静态页面是否存在$html_file=newsid。id。”。html”;if(file_exists($html_file))echo 静态页面”;echo file_get_contents(html_file);exit;/这个exit特别重要,如果没有,静态化得效果就没了$

11、conn=mysql_connect(localhost”,root,root);if(!conn)die (连接失败”。mysql_error());mysql_select_db(newssystem,$conn);mysql_query(set names utf8);$sql=”select from news where id=id”;res=mysql_query(sql,conn);if($row=mysql_fetch_assoc($res)ob_start();/启动ob缓存header(”content-type:text/html;charset=utf8);echo h

12、eadmeta http-equiv=content-type content=text/html;charset=utf-8/;/解决乱码echo ”table border=1px bordercolor=green cellspacing=0 width=400px height=200px”;echo trtd新闻详细内容/td”;echo td$rowtitle/td;echo trtdrowcontent/td/tr;echo 以上代码的缺点:静态页面的内容一旦生成,那么它永远也不会变了。当数据库的数据更新的时候,我们的网页访问内容也没变.解决方案:1.定时更新。我们让30秒同步一

13、下数据库和我们的静态页面.代码修改如下:时间函数:filemtime($html_file),获取上次文件被修改的unix时间.time()函数,获取当前时间函数.上面的解决方案仍然会有时间延迟,随意我们采用第二套方案,这样做就没有时间延迟了页面静态化的第二套技术:模板替换技术(正则表达式):在添加新闻的时候就去生成静态页面:原理图:添加新闻的静态页面addNews.html.。.。.代码如下:newList。php:稍多修改,让其直接跳转到我们在添加过程中生成的静态页面newAction。php:news.tpl:模板文件这里我们跳过了showNews这个页面,因为在以上的机制中,我们就不用

14、那个页面了,这个页面在最后的我们可以用作主页面静态化通用的cms系统示意图。现在我们来考虑全站静态化:我们可以在添加新闻后就能使首页发生直接静态化呢我们将管理的文件都保存到manage下面,用户只能看到前台主页和生成的静态的新闻详情页面.需求,我们如果的确需要只要首页面的内容有变化就立马更新。我们只需要加一句话:在newsAction.php下面加一句话:自己理解的图解:以上就是我们所说的真静态,我们来分析一下真静态的优缺点:有点:1访问速度块(不需php这个模块解析,不需查找数据库)。2利于seo。3防止sql注入缺点:因为它要真正的生成大量的html文件,要占用一定的磁盘空间,如果我们将所

15、有的html文件都放在一个文件夹下,比如我们把1亿个html放在一个文件夹下,那么这个速度会很慢的。我们的做法是:按照年月日创建文件夹,按照文件夹管理一定的数量的,这样检索速度会快一些的。safe_mode:apache的安全模式。就会不允许创建文件夹,徐和管理员沟通。在一下情况不允许使用真静态:1. 实时性要求很高的网站和页面(股票,基金)2. 数据量大,同时查询一次后,以后就很少查询(国家学历认证网,电信话费查询系统),就是生成的静态页面以后不被访问,那么我们生成这个html文件也就没有意义了3. 不愿意被seo到这个网页.伪静态技术:实际开发中有需求:不希望使用真静态,但是又希望seo,

16、可以考虑使用伪静态。成为:实现方式有两种:1。直接使用正则表达式;2.使用apache自带的rewrite机制来完成。正则表达式:例子:方案一:str分割方案二:正则详细讲解正则表达式:演示:运行结果:正则表达式重要概念:1。 值表达式:()括起来的2. 捕获:抓取值表达式到内存中,暂存起来3. 反向引用:1,n x 去引用捕获到得值表达式/reg:规则 $str:目标字符串 res:结果集preg_match($reg,$str,res);preg_match_all($reg,$str,res);参数意思同上。案例说明:说明 。就不要带中括号了转义字符:正则表达式的用处:1. 正则规范是根

17、本性的东西,在任何一个语言中都是有使用的。如php,asp,js,jsp,。net,c+,c,java等等都在使用2. 在涉及到用户输入的地方或者程序中,应当加入正则验证.在网站建设中我们应该两头都验证:客户端使用js,服务器端使用php。特殊的说明:在正则规范中,我们可能会看到 (?: pattern)(?!pattern)(?!pattern)(?=pattern)(?=pattern)(?: pattern):非捕获匹配(一般的匹配都是捕获匹配)(?!pattern):顺序否定环视,位置右侧不能再匹配pattern(?=pattern):顺序肯定环视,位置右侧可以匹配pattern(?!

18、pattern):逆序否定环视,位置的左侧不能匹配pattern(?=pattern):逆序肯定环视,位置左侧可以匹配pattern例子:针对我们上面提出的问题,我们给出的解决方案是:正则规范的课堂练习:联系:结巴程序。在实际开发中,我们实现伪静态更多的是:rewrite机制,是 正则技术为基础的。需求:http:/变成:http:/rewrite机制的原理图:略我们在用访问的方式,可以访问到.httpd。conf文件可以开启rewrite模块具体的做法:(1).启用rewrite模块,修改httpd.conf文件(2)配置虚拟主机httpd.conf打开虚拟主机的配置文件 修改httpdvh

19、osts。conf文件(3) 配置hosts文件我们可以用www。zh。com来访问了一个重点:在apache服务器中,如果某个文件夹没有指定访问的权限,则它的访问权限由上级目录的权限决定。如果指定了则按自己的访问权限来.问题:如果只允许我自己访问:可以在httpd.conf中修改,也可以在httpdvhosts。conf中修改,在配置访问权限的时候顺序很重要.在实际中如果要放行某一段可以写出allow from 196.0。81即可(4)。节点:第一种配置方式:比较完整的配置:可能遇到的问题:如果apache启动不起来,一定要留意rewrite模块是否启动。关于文件夹下的文件夹的规范:可以配

20、置多个节点:有时候你不能动httpdvhost文件,但是还要实现功能.我们可以把配置写到htaccess文件中。第二种配置方式:在网站目录下的.htaccess(另存为可创建)网站主目录文件夹下的子文件夹也可以创建并配置这个.htaccess文件。说明这个文件的配置也是继承关系第三种配置方法:httpd-vhosts.conf里面就留下一句话,其他的都交给.htaccess去控制.在我们的。htaccess文件中:至此我们三种配置方式就OK了。伪静态的实际应用:1. 图片防盗链:我们有一个情景:在一个项目中有两个图片文件夹public和private,public可以被所有人访问,privat

21、e只能自己访问。方案一:在public和private下面创建.htaccess,对于public文件夹allow from all,zai private文件夹order deny,allow deny from all allow from 127。0.0。1这样就ok了。分析这个方案:如果一个apache下有多个虚拟主机,那么就有问题了,你只设置了一个虚拟主机的权限,而另一个虚拟主机的地址也是127.0.0.1,所以它也可以访问到private文件夹。缺点就是无法精确控制.方案二:正则规范在private下面加上:ifmodule rewrite_modulerewriteEngine

22、On你怎么知道请求是www.zhanghui。com发过来的,相当于:ifRewriteCond %HTTP_REFERER! 如果你请求的是一个jpg图片,就forbidden,F表示直接禁用,相当于执行语句RewriteRule 。.jpg -F这里可以封杀多个后缀,多种文件。js,css,gif都可以这样整。 RewriteCond %(HTTP_REFERER)!www。zhanghui。comRewriteCond (REQUEST_FILENAME)!f#以上两个条件是并且的关系RewriteRule 。.。.。这个是完整的图片防盗链技术。但是这个有一定的缺陷,如果我们模拟一个ht

23、tp头,将referer写成,那么这张图片也可以被取下来。特别说明:在我们自己的目录下最好不要配置Options这个东西,因为在父目录中已经配置过了。如果你配置了,而和父目录的不一样,那就惨了,你所有的网页、重定向的东西都会出现403错误,很惨的.我们来做让apache管理两个虚拟主机www。zhanghui。com写好了代码,我们现在去访问private文件夹下的index网页:结果如下:我们发现目前这两个虚拟主机private和zhanghui都可以访问到,但是有时候,我们希望只有自己(private)的主机访问到自己,我们可以这样做了,修改private下的。htaccess文件简化ur

24、l:www。zhanghui。com/index.php?c=hahaa=login用户在访问的时候就相当于访问了index。php文件的内容:我们可以这样来写规则:运行效果如下:rewriteCond指令:RewriteRule aaa。html bbb。php如果aaa。html存在,则访问aaa.html,如果不存在则访问bbb。php。伪静态实际应用:在TP框架中简化url,目的是seo 在httpd。conf文件中打开rewrite模块 在虚拟主机中增加allowoverride all 在TP的配置文件conf/config文件中把URL_MODEL配置为2. 在TP框架的入口处写

25、入规则。htaccess文件.伪静态与真静态最后的对比:伪静态的特点:访问一次,引擎优化,占用空间小,很多的静态页面可以访问同一动态页面,广告的轮显,缺点速度慢。真静态伪静态非静态之间的选择:1. 网站实时性要求高,不要使用真静态化。2. 如果网站访问量比较小,没必要使用静态化技术.3. 如果网页的数据不是经常变化,而访问频率极大,建议使用真静态。公司营销等宣传性网站.4. 数据海量,使用真静态会生成海量的html,建议使用伪静态或者分目录存储静态页面。网络磁盘,磁盘矩阵的使用。5. 网站安全性要求高,不愿意被seo,或者不希望数据曝光给spider,不要使用静态化6. 大型网站中,静态化技术是综合的。

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服