GVKun编程网logo

php页面静态化技术(php页面静态化技术有哪些)

17

在这里,我们将给大家分享关于php页面静态化技术的知识,让您更了解php页面静态化技术有哪些的本质,同时也会涉及到如何更有效地PHP页面静态化技术,OB系列函数的使用、PHP实现页面静态化、纯静态化及

在这里,我们将给大家分享关于php页面静态化技术的知识,让您更了解php页面静态化技术有哪些的本质,同时也会涉及到如何更有效地PHP 页面静态化技术,OB系列函数的使用、PHP实现页面静态化、纯静态化及伪静态化、PHP页面静态化、php页面静态化 获取页面缓存生成HTML页面的内容。

本文目录一览:

php页面静态化技术(php页面静态化技术有哪些)

php页面静态化技术(php页面静态化技术有哪些)

很多框架的模板引擎都有页面静态化的功能 目的是为了优化网站运行时间

静态化分两种 纯静态和伪静态

一. 纯静态

纯静态展示的是实实在在的静态页面
运行PHP程序 判断是否存在静态页 如果存在 展示静态页 如果不存在 生成静态页 再展示
实现方法 是PHP的ob缓冲

//PHP程序一系列逻辑 并将要展示的数据赋值给某些变量准备在模板中使用
ob_start();//开启ob缓冲区 也可以在配置文件中开启 
require_once('template/index.PHP');//引入模板文件 也有可能是html文件 此时模板中的变量已全部解析替换
$s = ob_get_contents(); //将缓冲区的内容取出
file_put_contents('./index.html', $s);//将缓冲区的内容写入一个静态文件 一般的做法是将文件路径加密之后作为文件名

二.伪静态

伪静态就是在url上看起来是静态 实际上它走的还是动态流程
http://www.baidu.com/home/1.html
实现方法有两种
1.是项目路由解析把后缀拎出来
  $_SERVER变量里可以抓出url上面的所有节点 拆分成自己想要的即可 该替换的替换 该组合的组合
2.是Apache重写功能rewrite
  开启Apache重写功能 在项目目录中创建.htaccess文件写入规则
比如写入如下内容

RewriteEngine on  
RewriteRule ^localhost/([a-zA-Z]{1,})/([0-9]{1,})\.html$ localhost/$1.PHP?id=$2

如浏览器访问localhost/home/1.html 实际上被apache重写为localhost/home.PHP?id=1
重写规则的细节规则有点多,有兴趣的朋友可以去研究。

静态化技术也就这两种 伪静态只是url看起来好看 实际上对程序并没有优化效果

PHP 页面静态化技术,OB系列函数的使用

PHP 页面静态化技术,OB系列函数的使用

1.什么是PHP静态化
PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同。
2.为什么要让网页静态化
(1)加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高;
(2)有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;
(3)减轻服务器负担,浏览网页无需调用系统数据库;
(4)网站更安全,HTML页面不会受php相关漏洞的影响,观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。
(5)数据库出错时,不影响网站正常访问。
生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。
3.函数
ob:output buffer
1、ob_start函数一般主要是用来开启缓存,注意使用ob_start之前不能有任何输出,如空格、字符等。
2、ob_get_contents函数主要用来获取缓存中的内容以字符串形式返回,注意此函数必须在ob_end_clean函数之前调用,否则获取不到缓存内容。
3、ob_end_clean函数主要是清空缓存中的内容并关闭缓存,成功则返回True,失败则返回False
4.php生成静态化页面方法
(1)使用PHP文件读写功能与ob缓存机制生成静态页面,见下方代码示例。
(2)使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存)
memcached是键值一一对应,key默认最大不能超过128个字节,value默认大小是1M,因此1M大小满足大多数网页大小的存储
5.示例代码如下:

<?php
/**
 * 1.静态化处理入口文件
 * 通过ob系列函数,将缓冲区的内容得到,然后将这个内容写入到文件中index.html,并给该静态文件一个有效期
 */
$fileName = ''index.html'';    //静态页面保存文件名称
$outTime  = 3600;            //静态文件过期时间

function shtml($fileName,$outTime)
{
    $isTimeout = ( filectime($fileName) + $outTime > time() ) ? false : true;    //判断文件是否过期 true.过期
    if ( file_exists($fileName) && !$isTimeout ) {
        echo file_get_contents($fileName);
        exit();
    } else {
        ob_start();
        //从数据库中读取数据
        include ''data.php'';        //数据库查询    
        include ''index.php'';        //原动态页面

        $content = ob_get_contents();                //获取缓存内容
        file_put_contents($fileName, $content);        //将缓存写入文件
        ob_end_flush();
    }
}
?>

<?php //2.原动态页面 index.php ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动态页面index.php</title>
</head>
<body>
    <?php echo $data ?>
</body>
</html>

<?php
/**
 * 3.从数据库查询中获取data数据,此文件为data.php
 * 在此示例中省去数据库操作,直接演示为给data赋值.
 */
$data = ''数值应为数据库查询出的结果'';
?>

PHP实现页面静态化、纯静态化及伪静态化

PHP实现页面静态化、纯静态化及伪静态化

概念

PHP静态化分为:纯静态化 和 伪静态化;

纯静态化又分为:局部静态化 和 完全静态化

纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新生成一张相同的网页,优点就是减小服务器开销,

局部静态化:是生成的静态文件中,有局部的数据还是通过ajax技术动态获取的;

完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的html页面

伪静态化:Apache服务器rewrite配置

纯静态化的实现

利用PHP内置的ob函数实现页面的静态化,大概步骤如下:

<?PHP ob_start();//开启缓存 
?>
<p>我是要生成的静态内容,也可以在该处链接数据库生成动态内容于此</p>
<?PHP 
file_put_contents( 'index.html', ob_get_clean() );//把生成的静态内容保存到index.html文件,而不是输出到浏览器
?>

触发系统生成纯静态化页面

方法:页面添加缓存时间;手动触发

页面添加缓存时间

<?PHP
$file_name = 'index.html';
if(file_exists( $file_name ) &&  filemtime( $file_name ) - time() < 10 ){//如果文件是存在并且最后修改时间小于设定时间 10s
    //filemtime( $file_name );//得到文件最后修改时间
    //time();//当前时间
    require_once( $file_name );//引入文件
}else{
 ob_start( );
 ?>
<p>我是要生成的静态内容</p>
 <?PHP
file_put_contents( $file_name,  ob_get_contents() )//输出到浏览器
}

如果后台数据存在更细,定时刷新不能及时更改静态页面,怎么办?所有引入了手动触发的功能

Linux下的crontab定时扫描程序

*/5****PHP/data/static/index.PHP

PHP伪静态

Apache服务器rewrite配置

在httpd.conf文件中,找到

#注释:去掉前边的 # 开启rewrite服务,重启服务器生效
#LoadModule rewrite_module modules/mod_rewrite.so
#注释:http-vhosts.conf文件是虚拟域名配置的文件,开启改文件可以配置虚拟域名,一般默认是开启的
#Include conf/extra/httpd-vhosts.conf

rewrite伪静态配置

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot c:/Apache24/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error.log
    CustomLog logs/dummy-host.example.com-access.log common
    #配置规则如下所示
    RewriteEngine on
    RewriteRule ^/vidio/([0-9]*).html$ /vidio.PHP?id=$1
    
</VirtualHost>

也可用.htacess文件,放在网站目录下,无需重启服务器。

更多PHP相关知识,请访问php教程!

PHP页面静态化

PHP页面静态化

<?php

class jm_cache{

  publicfunction__construct($file_dir,$cache_time=1800,$file_two=0,$file_fix=''.htm''){

    $this->cache_root=dirname(__FILE__).''/../cache'';//缓存存放目录

    $this->file_dir=$file_dir;

    $this->cache_time=$cache_time;

    $this->file_two=$file_two;

    $this->file_fix=$file_fix;

    $this->file_name=md5($_SERVER[''REQUEST_URI'']).$this->file_fix;//缓存文件名

    $this->cache_file=$this->cache_dir=$this->cache_root.''/''.$this->file_dir;//缓存的二级文件夹

    if($this->file_two==1)$this->cache_dir=$this->cache_root.''/''.$this->file_dir.''/''.substr($this->file_name,0,2);//缓存的最终文件夹

    $this->cache_url=$this->cache_dir.''/''.$this->file_name;//文件存放的完整路径

     

    //GET方式请求才缓存,POST之后一般都希望看到最新的结果

    if($_SERVER[''REQUEST_METHOD'']==''GET''){

      //如果缓存文件存在,并且没有过期,就把它读出来。

      if(file_exists($this->cache_url) && time()-filemtime($this->cache_url)<$this->cache_time){

        $fp=fopen($this->cache_url,''rb'');

        fpassthru($fp);

        fclose($fp);

        exit;

      }elseif(!file_exists($this->cache_dir)){//判断文件夹是否存在,不存在则创建

        if(!file_exists($this->cache_file)){

          if(!file_exists($this->cache_root)){

            mkdir($this->cache_root,0777);

            chmod($this->cache_root,0777);

          }

          mkdir($this->cache_file,0777);

          chmod($this->cache_file,0777);

          if($this->file_two==1){

            mkdir($this->cache_dir,0777);

            chmod($this->cache_dir,0777);

          }

        }

      }

      //回调函数 AutoCache

      //ob_start("AutoCache");

      ob_start(array($this,"AutoCache"));

    }else{

      //不是GET的请求就删除缓存文件

      if(file_exists($this->cache_url))unlink($this->cache_url);

    }

  }

  functionAutoCache($contents){

    $fp=fopen($this->cache_url,''wb'');

    fwrite($fp,$contents);

    fclose($fp);

    chmod($this->cache_url,0777);

    //生成新缓存的同时,自动删除所有的老缓存,以节约空间,可忽略。

    $this->DelOldCache();

    return$contents;

  }

  functionDelOldCache(){

    chdir($this->cache_root);

    foreach(glob("*/*".$this->file_fix)as$file){

      if(time()-filemtime($file)>$this->cache_time)unlink($file);

    }

  }

}

?>

php页面静态化 获取页面缓存生成HTML页面

php页面静态化 获取页面缓存生成HTML页面

include("../conn.php");
$url=$_GET[''url''];//URL地址
$uid=$_GET[''uid''];//id值
function get_center($url_id,$uid){
    // $c//从缓存中获取内容
$url=$url_id;
$id=$uid;
$c//吧缓存的内容赋值给一个变量
    ob_end_clean();//关闭缓存并清空
    /***缓存结束***/
    file_put_contents("../".$id.".html", $content);
 
}
$sql="select * from article where id=".$uid."";
$query=mysql_query($sql);
$rs=mysql_fetch_array($query);
if($rs["url"]==''''){
get_center($url,$uid);
$sql="UPDATE article SET url=''localhost/weizhuan/".$uid.".html'' WHERE id = ".$uid."";
//$sql="UPDATE article SET FirstName = ''Fred'' WHERE LastName = ''Wilson'' ";
@mysql_query($sql) or die("sql have err");
echo "<script> alert(''成功生成html文件''); window.location.href=''all_article.php''</script>";
}else{
get_center($url,$uid);
$sql="UPDATE article SET url=''localhost/weizhuan/".$uid.".html'' WHERE id = ".$uid."";
//$sql="UPDATE article SET FirstName = ''Fred'' WHERE LastName = ''Wilson'' ";
@mysql_query($sql) or die("sql have err");
echo "<script> alert(''HTML已存在,原文件已覆盖。''); window.location.href=''all_article.php''</script>"; 
}
?>

以上就介绍了 php页面静态化 获取页面缓存生成HTML页面,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

我们今天的关于php页面静态化技术php页面静态化技术有哪些的分享就到这里,谢谢您的阅读,如果想了解更多关于PHP 页面静态化技术,OB系列函数的使用、PHP实现页面静态化、纯静态化及伪静态化、PHP页面静态化、php页面静态化 获取页面缓存生成HTML页面的相关信息,可以在本站进行搜索。

本文标签: