在这里,我们将给大家分享关于php页面静态化技术的知识,让您更了解php页面静态化技术有哪些的本质,同时也会涉及到如何更有效地PHP页面静态化技术,OB系列函数的使用、PHP实现页面静态化、纯静态化及
在这里,我们将给大家分享关于php页面静态化技术的知识,让您更了解php页面静态化技术有哪些的本质,同时也会涉及到如何更有效地PHP 页面静态化技术,OB系列函数的使用、PHP实现页面静态化、纯静态化及伪静态化、PHP页面静态化、php页面静态化 获取页面缓存生成HTML页面的内容。
本文目录一览: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系列函数的使用
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生成的动态页面保存成静态的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
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页面
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页面的相关信息,可以在本站进行搜索。
本文标签: