PHP 静态缓存 OB系列函数

摘要::
静态化:
静态化是解决减轻网站压力,提高网站访问速度的常用方案.包括:纯静态和伪静态。
纯静态:
将PHP程序生成静态的HTML文件,保存到服务器的磁盘中。
原理:
在用户访问PHP程序时,首先检测静态的HTML文件是否存在,如果存在直接输出静态文件,如果静态文件不存在,查询数据库,生成静态文件,并输出。
优势:
减少PHP程序编译和对数据库的查询。
数据缓冲区:
数据缓冲区是用户前端用来存储、操纵数据的对象。


OB系列函数::

  • ob_start()函数:打开输出缓冲区
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。

  • Flush():刷新缓冲区的内容,输出
说明:这个函数经常使用,效率很高。
  • ob_flush冲刷出(送出)输出缓冲区中的内容
 
说明:这个函数将送出缓冲区的内容(如果里边有内容的话)。如果想进一步处理缓冲区中的内容,必须在ob_flush()之前调用ob_get_contents() ,因为在调用ob_flush()之后缓冲区内容将被丢弃。 

此函数不会销毁输出缓冲区,而像ob_end_flush() 函数会销毁缓冲区。
  • ob_get_contents :返回内部缓冲区的内容
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.
  • ob_end_flush: 发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
说明:这个函数发送输出缓冲区的内容(如果有的话)
  • ob_implicit_flush:打开或关闭绝对刷新
说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()
  • ob_clean:清空(擦掉)输出缓冲区
    说明:此函数用来丢弃输出缓冲区中的内容。  此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。 
  • ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
说明:这个函数不会输出内部缓冲区的内容而是把它删除
  • ob_get_length:返回内部缓冲区的长度
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE.

静态缓存简单应用::
//在要做静态缓存的页面,我们定义一个变量来存放一个缓存文件的路径(相对于当前页面的路径)
$filename="scoreSearch.html";
//定义一个变量来存储缓存过期时间
$endTime = 10;
//判断一下,缓存文件是否存在或者是否过期,如果缓存文件不存在就执行源代码生成缓存,或者时间过期了也应该重新缓存一下,如果上述条件不满足则调用缓存页面显示
if(!file_exists($filename) || filemtime($filename)+$cachetime<time())
{
    //缓存页面代码
}
else
{
    include($filename);//如果存在,调用缓存文件

    或者

    echo file_get_contents($filename);//取出文件内容并输出
}
//生成缓存,在页面输出内容之前,我们调用ob_start()方法打开内存缓冲区,将要输出的内容放到内存里面
ob_start();

//输出将要缓存的内容
echo "######################################"; 

//在页面输出完之后,将内存中获取到的内容保存下来,存为一个静态页面
//从内存缓存中获取页面代码
$content = ob_get_contents();

//将获取到的内容存放到缓存文件
file_put_contents($filename,$content);

//清掉内存缓存
ob_flush();

//最后我们加上一段输出,来测试是否重新缓存了,如果页面有输出该内容代表重新生成了缓存文件,如果没有,说明是直接读的缓存文件
echo 123; //测试是否调用了缓存文件,缓存文件不输出这句话


这样我们就简单做了一个静态缓存,完整代码如下::
<?php
//查询是否有缓存文件
$filename="scoreSearch.html";
$endTime = 10;
if(!file_exists($filename) || time()-filemtime($filename) > $endTime){
    ob_start(); //启动ob缓存
    echo "<html><a href='#'>aa</a></html>";
    $ob_str = ob_get_contents();  //返回输出缓冲区的内容
    $file = fopen($filename,'w') or die("Unable to open file!");  //打开文件或者 URL('w'参数:如果文件不存在则尝试创建之)
    fwrite($file,$ob_str);  //写入文件
    fclose($file);  //关闭一个已打开的文件指针
    ob_flush();
}else {
    echo file_get_contents($filename);
}
?>



把代码运行到linux 中的静态缓存   注意:::
    

linux 中   需要  开启   权限   \html   

    在Linux中,权限的所有者分为用户权限,组权限和其他权限

     权限分为:读 r , 写 w , 执行 x.

    权限都可以用数字来表示:r 4, w 2 , x 1, 

    代码如下:

            chmod -R 777 某文件夹.

             (对文件夹进行权限修改而不是对某个文件,原因是我们在对当前文件夹进行写入操作)








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值