收藏 分销(赏)

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

上传人:天**** 文档编号:2618351 上传时间:2024-06-03 格式:DOC 页数:39 大小:4MB 下载积分:12 金币
下载 相关 举报
php页面静态化学习笔记.doc_第1页
第1页 / 共39页
php页面静态化学习笔记.doc_第2页
第2页 / 共39页


点击查看更多>>
资源描述
php页面静态化学习笔记 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 39 个人收集整理 勿做商业用途 题外话:大流量技术: 1.服务器集群2。mysql优化(设计合理的数据库表3nf,分表垂直分割水平分割,读写分离技术多个mysql同时工作,mysql配置优化,硬件升级)3。缓存技术memched/redis。。大型网站提速提速:Mysql优化,页面静态化,memcached大型网站的定义: 1. pv值(page views):页面的访问量。当页面访问量很大的时候,带来了很多问题: ① 流量变大,解决方案 买带宽,优化程序,图片的大小不能多于多少K ② 并发量变大,同时访问网站的人多了,解决方案,要对程序的结构进行修整->服务器集群 传统架构: 优化结构: 整个的重点还是php程序,考验程序员的东西. 2. 数据量很大:解决方法: ① 表的设计合理 ② 分表技术(垂直分割和水平分割)、建立适当的索引、读写分离、Mysql配置优化(调整最大并发量,定时对数据库碎片整理、碎片,实现方法:windows下用任务管理器,niux下用crontab),硬件升级 ③ 页面静态化 ④ 缓存技术(memcached) 页面静态化技术 原理图: 几个概念: 静态网址:如果我们访问的是静态页面,则把这个url称作静态网站,html网址 特点: 1。利于seo(search engine optimization)搜索引擎优化 2.访问速度快 3。防止sql注入漏洞 动态网址:在访问的时候可以传入参数,称为动态网址,php网址 特点: 1. 不利于seo 2. 访问速度慢 3.sql注入的可能 伪静态网址:希望达到这样的目的, 这样的话,我们把图片下端的称为伪静态网址。这样做的特点: 1. 利于seo 2. 防止了注入 但是它仍然要访问数据库,也就是说速度没有优化。页面静态化的分类:从方式来看:1.真静态,2。伪静态从范围来看:1.全局静态,2。局部静态。 测试压力的工具ab.exe 需要进入控制台 ab.exe –n 访问的总次数 –c 多少人访问url(并发量) 举例说明 ab。exe –n 10000 –c 100 http://localhost/ phpstatic/ test.php 当我们调整访问人数为1000的时候: 很悲剧的事情发生了,说明我们的apache服务器支撑不住了。解决方案,我们需要调整apache的最大并发量. MPM(多路处理模块,就是指明apache怎样处理并发):apache处理并发的方式。有三种方式 1. perfork 预处理进程方式:预先准备一些进程,等待请求的到来,这样的方式消耗很大。 2. worker 工作模式:预先开启进程,当有请求的时候,进程会开启线程,线程为请求服务。一个进程可以开启多个线程 3. winnt模式 windows下采用的:就是worker模式 简单的说是这样的: 如何设置apache最大并发数: 1.位置httpd。conf文件中,大约470多行. # Server-pool management (MPM specific) Include conf/extra/httpd-mpm.conf 2。确定apache的工作模式: cmd下进入apache的bin目录,输入httpd.exe –l(小写的L) ; 我们主要看mpm_yyyyy ,如果这个yyyy是什么,就说明是什么工作模式了。 3。去修改httpd-mpm.conf 调整150为1000 刚才的测试可以运行了 4.重启apache 在linux下如何配置呢, 建议配置: 如果网站的pv值上到了百万:可以调节如下 每个都增加1000即可。 对比图: 搜索引擎的偏好: 如果一张图片希望被百度搜到, 〈img alt="小狗” src="”。.。... /〉 在网站的前台,我们建议不要使用frame这个框架 给一个图片或者视图取名字,标题越短越精准会越好. 页面静态化技术实现方式: 1.使用php自带的ob缓存 2.模板替换技术(正则表达式) 使用PHP自带的缓存机制实现页面静态化: ob缓存机制: 〈?php echo ”hello100”; header("content—type:text/html;charset=rtf-8"); echo "hello200”; ?> 在php5.2这个版本,在php.ini有一个配置,output_bufferring,如下: 如果关闭,就会出现如下警告 ob缓存的原理: 打开ob缓存就可以解决 ① 配置php。ini,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();//把程序缓存的数据,强制刷新到浏览器 如下面演示: 但是运行结果没有我们想象的那样1秒显示一个数字,我们查看flush()函数发现了问题: 如果一定要有效果我们可以: 使用ob缓存机制完成一个简单的新闻管理系统: 我们实现全站静态化。 先按传统方式写完了代码,发现本机访问速度都相当的慢。 我们开始做优化:当第一人访问我们的页面时,我们就查询一次数据库,并生成一个静态页面.其他人来查询的时候,我们直接就将生成的静态页面的直接返回. 1. 生成静态页面 2. 加上逻辑,即可实现一定的优化: 第一个页面: 〈?php //列出新闻 // header(”content—type:text/html;charset=utf-8"); $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”; $res=mysql_query($sql); echo ”<h1〉新闻列表〈/h1>"; echo ”〈a href='addNews.html’〉添加新闻〈/a〉<hr/>"; echo "〈table〉”; echo "〈tr〉〈td>id</td><td>标题〈/td〉〈td>〈a href=’#’>查看详情</a></td〉〈td〉修改新闻</td></tr>”; while($row=mysql_fetch_array($res)){ echo ’〈tr>〈td〉’.$row[0].'</td><td>'.$row[1].’</td>〈td〉<a href=”showNews。php?id=’。$row[0].’">产看详情〈/a〉〈/td〉〈td>〈a href="">修改新闻〈/a></td〉</tr>’; } mysql_free_result($res); mysql_close($conn); ?> 第二个页面: 〈?php //传统做法 接受id,查询数据库 $id=intval($_GET['id']); //先判断该新闻对应的新闻的静态页面是否存在 $html_file="news—id"。$id。”。html”; if(file_exists($html_file)){ echo "静态页面”; echo file_get_contents($html_file); exit;//这个exit特别重要,如果没有,静态化得效果就没了 } $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=utf—8"); echo "<head〉<meta http-equiv=’content-type' content='text/html;charset=utf-8'/〉</head>"; //解决乱码 echo ”〈table border=’1px’ bordercolor=’green' cellspacing='0' width=’400px’ height=’200px’>”; echo "〈tr〉〈td>新闻详细内容〈/td〉</tr>”; echo "<tr>〈td>{$row[’title']}</td〉</tr>"; echo "〈tr〉<td〉{$row['content']}〈/td〉〈/tr〉"; echo "</table〉"; $ob_str=ob_get_contents(); //把$ob_str保存到一个静态页面 //取文件名是有很多规则的 file_put_contents("news—id”。$id。”.html”,$ob_str); } ?> 以上代码的缺点: 静态页面的内容一旦生成,那么它永远也不会变了。当数据库的数据更新的时候,我们的网页访问内容也没变. 解决方案:1.定时更新。我们让30秒同步一下数据库和我们的静态页面. 代码修改如下: 时间函数:filemtime($html_file),获取上次文件被修改的unix时间.time()函数,获取当前时间函数. 上面的解决方案仍然会有时间延迟,随意我们采用第二套方案,这样做就没有时间延迟了 页面静态化的第二套技术:模板替换技术(正则表达式): 在添加新闻的时候就去生成静态页面: 原理图: 添加新闻的静态页面addNews.html .。。.。。。. 代码如下: newList。php:稍多修改,让其直接跳转到我们在添加过程中生成的静态页面 newAction。php: news.tpl:模板文件 这里我们跳过了showNews这个页面,因为在以上的机制中,我们就不用那个页面了,这个页面在最后的我们可以用作主页面静态化 通用的cms系统示意图。 现在我们来考虑全站静态化: 我们可以在添加新闻后就能使首页发生直接静态化呢 我们将管理的文件都保存到manage下面,用户只能看到前台主页和生成的静态的新闻详情页面. 需求,我们如果的确需要只要首页面的内容有变化就立马更新。 我们只需要加一句话: 在newsAction.php下面加一句话: 自己理解的图解: 以上就是我们所说的真静态,我们来分析一下真静态的优缺点: 有点:1访问速度块(不需php这个模块解析,不需查找数据库)。2利于seo。3防止sql注入 缺点:因为它要真正的生成大量的html文件,要占用一定的磁盘空间,如果我们将所有的html文件都放在一个文件夹下,比如我们把1亿个html放在一个文件夹下,那么这个速度会很慢的。我们的做法是:按照年月日创建文件夹,按照文件夹管理一定的数量的,这样检索速度会快一些的。 safe_mode:apache的安全模式。就会不允许创建文件夹,徐和管理员沟通。 在一下情况不允许使用真静态: 1. 实时性要求很高的网站和页面(股票,基金) 2. 数据量大,同时查询一次后,以后就很少查询(国家学历认证网,电信话费查询系统),就是生成的静态页面以后不被访问,那么我们生成这个html文件也就没有意义了 3. 不愿意被seo到这个网页. 伪静态技术: 实际开发中有需求:不希望使用真静态,但是又希望seo,可以考虑使用伪静态。 成为: 实现方式有两种: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. 正则规范是根本性的东西,在任何一个语言中都是有使用的。如php,asp,js,jsp,。net,c++,c,java等等都在使用 2. 在涉及到用户输入的地方或者程序中,应当加入正则验证. 在网站建设中我们应该两头都验证:客户端使用js,服务器端使用php。 特殊的说明: 在正则规范中,我们可能会看到 (?: pattern)(?!pattern)(?<!pattern)(?=pattern)(?〈=pattern) (?: pattern):非捕获匹配(一般的匹配都是捕获匹配) (?!pattern):顺序否定环视,位置右侧不能再匹配pattern (?=pattern):顺序肯定环视,位置右侧可以匹配pattern (?<!pattern):逆序否定环视,位置的左侧不能匹配pattern (?<=pattern):逆序肯定环视,位置左侧可以匹配pattern 例子: 针对我们上面提出的问题,我们给出的解决方案是: 正则规范的课堂练习: 联系:结巴程序。 在实际开发中,我们实现伪静态更多的是:rewrite机制,是 正则技术为基础的。 需求: ①http:// 变成:②http:// rewrite机制的原理图:略 我们在用访问②的方式,可以访问到①. httpd。conf文件可以开启rewrite模块 具体的做法: (1).启用rewrite模块,修改httpd.conf文件 (2)配置虚拟主机 httpd.conf打开虚拟主机的配置文件 修改httpd—vhosts。conf文件 (3) 配置hosts文件 我们可以用www。zh。com来访问了 一个重点:在apache服务器中,如果某个文件夹没有指定访问的权限,则它的访问权限由上级目录的权限决定。如果指定了则按自己的访问权限来. 问题:如果只允许我自己访问:可以在httpd.conf中修改,也可以在httpd—vhosts。conf中修改, 在配置访问权限的时候顺序很重要. 在实际中如果要放行某一段 可以写出allow from 196.0。81即可 (4)。<Directory>节点: 第一种配置方式: 比较完整的配置: 可能遇到的问题: 如果apache启动不起来,一定要留意rewrite模块是否启动。 关于文件夹下的文件夹的规范:可以配置多个节点: 有时候你不能动httpd—vhost文件,但是还要实现功能. 我们可以把配置写到htaccess文件中。 第二种配置方式:在网站目录下的.htaccess(另存为可创建) 网站主目录文件夹下的子文件夹也可以创建并配置这个.htaccess文件。说明这个文件的配置也是继承关系 第三种配置方法: httpd-vhosts.conf里面就留下一句话,其他的都交给.htaccess去控制. 在我们的。htaccess文件中: 至此我们三种配置方式就OK了。 伪静态的实际应用: 1. 图片防盗链:我们有一个情景:在一个项目中有两个图片文件夹public和private,public可以被所有人访问,private只能自己访问。 方案一:在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_module> rewriteEngine On #你怎么知道请求是www.zhanghui。com发过来的,相当于:if RewriteCond %{HTTP_REFERER}! #如果你请求的是一个jpg图片,就forbidden,F表示直接禁用,相当于执行语句 RewriteRule 。*\.jpg -[F] #这里可以封杀多个后缀,多种文件。js,css,gif都可以这样整。 ☆ RewriteCond %(HTTP_REFERER)!www。zhanghui。com RewriteCond %(REQUEST_FILENAME)!—f #以上两个条件是并且的关系 RewriteRule 。.。。.。 这个是完整的图片防盗链技术。但是这个有一定的缺陷,如果我们模拟一个http头,将referer写成,那么这张图片也可以被取下来。 特别说明:在我们自己的目录下最好不要配置Options这个东西,因为在父目录中已经配置过了。如果你配置了,而和父目录的不一样,那就惨了,你所有的网页、重定向的东西都会出现403错误,很惨的. 我们来做让apache管理两个虚拟主机 www。zhanghui。com 写好了代码,我们现在去访问private文件夹下的index网页:结果如下: 我们发现目前这两个虚拟主机private和zhanghui都可以访问到,但是有时候,我们希望只有自己(private)的主机访问到自己,我们可以这样做了,修改private下的。htaccess文件 简化url: ① ②www。zhanghui。com/index.php?c=haha&a=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框架的入口处写入规则。。htaccess文件. 伪静态与真静态最后的对比: 伪静态的特点: 访问一次,引擎优化,占用空间小,很多的静态页面可以访问同一动态页面,广告的轮显,缺点速度慢。 真静态伪静态非静态之间的选择: 1. 网站实时性要求高,不要使用真静态化。 2. 如果网站访问量比较小,没必要使用静态化技术. 3. 如果网页的数据不是经常变化,而访问频率极大,建议使用真静态。公司营销等宣传性网站. 4. 数据海量,使用真静态会生成海量的html,建议使用伪静态或者分目录存储静态页面。网络磁盘,磁盘矩阵的使用。 5. 网站安全性要求高,不愿意被seo,或者不希望数据曝光给spider,不要使用静态化 6. 大型网站中,静态化技术是综合的。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

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

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

关于我们      便捷服务       自信AI       AI导航        抽奖活动

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

关注我们 :微信公众号    抖音    微博    LOFTER 

客服