PHP实现页面静态化的超简单方法


Posted in PHP onSeptember 06, 2016

为什么要页面静态化?

1.动态文件执行过程:语法分析-编译-运行

2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快;如果页面中一些内容不经常改动,动态页面静态化是非常有效的加速方法。(纯静态,伪静态还是需要PHP解释器的)

3、生成静态URL利于SEO,利于蜘蛛抓取和收录,有利于提升排名

优化页面响应时间方法

1.动态页面静态化

2.优化数据库

3.负载均衡

4.使用缓存等等

//动态页面静态化一般用于不经常改动的地方,频繁改动的地方一般不适用静态化,可用伪静态(例如微博等)

静态化详细介绍

1、纯静态分为局部静态化(局部动态化,使用AJAX动态获取数据)和纯静态化。

伪静态:改变URL(需要服务器支持,如:apache等等)

2、从URL结构以及页面名称看,伪静态和静态页面是一样的。伪静态的页面后缀可以是html htm 或者是目录格式

伪静态只是改变了URL的表现形式,实际上还是动态页面

静态页面可以节省服务器资源,而伪静态严格说是增加服务器资源消耗的

总结,在SEO方面,伪静态和静态页面的功能是相同的,但是伪静态本质上还是动态页面,所以消耗资源是和动态页面一样的,而且因为Rewrite服务器还需要消耗额外的资源。

Buffer缓冲区认知

PHP实现页面静态化的超简单方法

1、开启buffer

•在php.ini中的output_buffering开启
•在php文件中使用ob_start()函数开启

; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096

2、获取缓冲区的内容

output_buffering=on 需要先开起,才能调用ob_get_contents()函数。但是,如果不开启output_buffering时,当在头文件中调用函数ob_start()函数时,ob_get_contents()也能使用。

ob_get_content();//返回输出缓冲区的内容;

PHP如何实现页面纯静态化

基本方式

1、file_put_contents

2、使用PHP内置缓存机制实现页面静态化output_buffering

ob_start()//如果php.ini已经开启,那么这里会开启一个新的输出缓冲区;
ob_get_contents()//获取输出缓冲区内容;
ob_clean()//清空输出缓冲区内容,但是不会删除输出缓冲区
ob_get_clean//获取输出缓冲区内容并且删除输出缓冲区,等价于ob_get_contents和ob_end_clean)

下方这段代码,运行是不会有输出的

原因就是输出缓冲区被清空了,看上图理解

ob_start();
echo 777;
echo 000;
ob_clean();
echo ob_get_contents();

纯静态实现,代码和实现逻辑参考:

<?php
/**
 * 触发系统生成纯静态化页面业务逻辑
 * 有3种方案: 
 * 第一:定时扫描程序(利用crontab来处理) 
 * 第二:手动触发方式,人为触发
 * 第三:页面添加缓存时间,在页面中控制时间来操作
*/
//===========================================
//生成纯静态文件步骤
//1、连接数据库,然后从数据库里面获取数据
//2、把获取到的数据填充到模版文件里面
//3、需要把动态的页面转为静态页面,生成静态化文件
//============================================
//PHP实现页面静态化有以下步骤:
//1:A.php请求数据库数据:通过mysql或者mysqli或者PDO扩展
//2:在A.html中输出A.php请求的数据库数据:一般是将将在数据库中取出的数组形式的数据赋予新的数组,并且输出
//3:在A.php中包含A.html文件:直接通过require_once()函数或者inclde_once()
//4:开启数据缓存ob_start()=>获取获取缓存内容并且将数据生成在静态文件中file_put_contents('index.shtml',ob_get_clean());
//header("content-type:text/htm;charset=utf-8");
if(is_file('./index.html') && (time() - filemtime('./index.html') < 1200))
{
  //缓存未失效则直接加载静态文件
  require_once('./index.html');
}
else 
{
  //缓存失效了则重新生成
  // 引入数据库链接操作
  require_once('./db.php');
  $sql = "select * from news where `category_id` = 1 and `status` = 1 limit 4";
  try
  {
      $db = Db::getInstance()->connect();
      $result = mysql_query($sql, $db);
      $newsList = array();
      while($row = mysql_fetch_assoc($result)) 
      {
          $newsList[] = $row;
      }
  }
  catch(Exception $e)
  {
      // TODO
  }
  ob_start();
  require_once('template/index.php');//引入模版文件
  file_put_contents('./index.html', ob_get_contents());//生成静态文件
  //ob_clean();
}

静态页面中局部动态化实现

利用Jquery中的ajax请求文件,获取到返回的JSON数据,然后应用到模版就可以了

伪静态

Nginx服务器默认不支持PATH INFO模式,需要额外配置

Apache伪静态设置

PHP实现页面静态化的超简单方法

1、开启apache mod_rewrite.so 配置 在 httpd.conf中。

测试的话可以用phpinfo查看,看是否loaded modules 有这个模块

2、inculde conf/extra/httpd-vhosts.conf virtual hosts支持,虚拟域名配置

3、编辑vartual host 文件

4、本机host文件加入配置的域名(如果需要本机测试针对windows)

5、伪静态配置

- 5.1 rewrite engine on
- 5.2编写规则

^/post/([0-9]*).html$ /post.php?id=$1

放在 virtualhost 段中

post.php 中编写

<?php 
echo 'this is '.$_GET['id'];

然后可以访问a.com/123.html 返回的就是this is 123.

扩展:如果目录下有123.html这个真正的文件,那么还是加载了动态的post 123.
那么如何设置呢,想要当前文件有了真正的静态文件,那么需要以下配置了

RewriteEngine on
RewriteRule ^/post/([0-9]*).html$ /post.php?id=$1
#存在目录
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-d
#存在文件
RewriteCond%{DOCUMENT_ROOT}%{REQUEST_FILENAME}}!-f

以上两句话意思是如果根目录下有请求的目录或者文件,那就用他

当然这个要放在刚刚的那个rewrite的上面。

Nginx伪静态

PHP实现页面静态化的超简单方法

伪静态是影响服务器性能的,不是越多越好,需要按需求而定

以上这篇PHP实现页面静态化的超简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
定义php常量的详解
Jun 09 PHP
php对二维数组按指定键值key排序示例代码
Nov 26 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
PHP安全下载文件的方法
Apr 07 PHP
Smarty实现页面静态化(生成HTML)的方法
May 23 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
php依赖注入知识点详解
Sep 23 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
imagettftext() 失效,不起作用
Mar 09 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 #PHP
PHP7 新特性详细介绍
Sep 06 #PHP
PHP会员找回密码功能的简单实现
Sep 05 #PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 #PHP
浅谈mysql_query()函数的返回值问题
Sep 05 #PHP
PHP针对多用户实现更换头像功能
Sep 04 #PHP
PHP加密技术的简单实现
Sep 04 #PHP
You might like
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
python 编程之twisted详解及简单实例
2017/01/28 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
北京SQL新华信咨询
2016/09/30 面试题
如何通过jdbc调用存储过程
2012/04/19 面试题
办公室文秘自我评价
2013/09/21 职场文书
求职信写作要突出重点
2014/01/01 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
党的群众路线学习材料
2014/05/16 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技