分享常见的几种页面静态化的方法


Posted in PHP onJanuary 08, 2015

什么是PHP静态化

PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同。

为什么要让网页静态化

一、加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高;
二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;
三、减轻服务器负担,浏览网页无需调用系统数据库;
四、网站更安全,HTML页面不会受php相关漏洞的影响; 观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。

数据库出错时,不影响网站正常访问。
生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。

PHP生成静态HTML页面的方法

利用PHP模板生成静态页面

PHP模板实现静态化非常方便,比如安装和使用PHP Smarty实现网站静态化,也可以自己写一套模板解析规则,常见的可以模仿各类cms的模板规则。

1.使用PHP文件读写功能与ob缓存机制生成静态页面
比如某个商品的动态详情页地址是: http://xxx.com?goods.php?gid=112
那么这里我们根据这个地址读取一次这个详情页的内容,然后保存为静态页,下次有人访问这个商品详情页动态地址时,我们可以
直接把已生成好的对应静态内容文件输出出来。

time()){//如果没过期
	  echo file_get_contents($goods_statis_file);//输出静态文件内容
		 exit;
	 }else{//如果已过期
		 unlink($goods_statis_file);//删除过期的静态页文件
		 ob_start();
 
			//从数据库读取数据,并赋值给相关变量
 
			//include ("xxx.html");//加载对应的商品详情页模板
 
			$content = ob_get_contents();//把详情页内容赋值给$content变量
			file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
			ob_end_flush();//输出商品详情页信息
	 }
}else{
 ob_start();
 
 //从数据库读取数据,并赋值给相关变量
 
 //include ("xxx.html");//加载对应的商品详情页模板
 
 $content = ob_get_contents();//把详情页内容赋值给$content变量
 file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
 ob_end_flush();//输出商品详情页信息
 
}
 
?>

2.使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存);

以memcache为例:

connect('memcache_host', 11211);
 
$mem_goods_content = $mem->get($goods_statis_content);
 
 
 
if($mem_goods_content){
  echo $mem_goods_content;
}else{
 ob_start();
 
 //从数据库读取数据,并赋值给相关变量
 
 //include ("xxx.html");//加载对应的商品详情页模板
 
 $content = ob_get_contents();//把详情页内容赋值给$content变量
 $mem->add($goods_statis_content,$content, false, $expr);
 ob_end_flush();//输出商品详情页信息
 
}
 
?>

memcached是键值一一对应,key默认最大不能超过128个字节,value默认大小是1M,因此1M大小满足大多数网页大小的存储。
以上就是页面静态化的相关方法,希望对朋友们有所帮助

PHP 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 PHP
用PHP将网址字符串转换成超链接(网址或email)
May 25 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
PHP实现上一篇下一篇的方法实例总结
Sep 22 PHP
php排序算法实例分析
Oct 17 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 PHP
php的ddos攻击解决方法
Jan 08 #PHP
php的sso单点登录实现方法
Jan 08 #PHP
PHP制作万年历
Jan 07 #PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 #PHP
CI框架中site_url()和base_url()的区别
Jan 07 #PHP
给ECShop添加最新评论
Jan 07 #PHP
php程序总是提示验证码输入有误解决方案
Jan 07 #PHP
You might like
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
url decode problem 解决方法
2011/12/26 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
TensorFlow如何实现反向传播
2018/02/06 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
Python实现AI换脸功能
2020/04/10 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
新闻专业应届生求职信
2013/10/31 职场文书
招标授权委托书样本
2014/09/23 职场文书
党支部工作总结2015
2015/04/01 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
Python 实现定积分与二重定积分的操作
2021/05/26 Python
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL