PHP 静态缓存 OB系列函数
静态化是解决减轻网站压力,提高网站访问速度的常用方案.包括:纯静态和伪静态。
纯静态:
将PHP程序生成静态的HTML文件,保存到服务器的磁盘中。
原理:
在用户访问PHP程序时,首先检测静态的HTML文件是否存在,如果存在直接输出静态文件,如果静态文件不存在,查询数据库,生成静态文件,并输出。
优势:
减少PHP程序编译和对数据库的查询。
数据缓冲区:
数据缓冲区是用户前端用来存储、操纵数据的对象。
- 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 某文件夹.
(对文件夹进行权限修改而不是对某个文件,原因是我们在对当前文件夹进行写入操作)
PHP 静态缓存 OB系列函数相关推荐
- PHP中ob系列函数讲解(浏览器缓存技术)
Output Control 函数可以让你自由控制脚本中数据的输出.它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况. 输出控制函数不对使用 header() 或 setcooki ...
- php output详解,PHP输出缓冲控制Output Control系列函数详解,output函数详解
PHP输出缓冲控制Output Control系列函数详解,output函数详解 概述 以前研究过PHP的输入输出缓冲,不过博客搬家以后,原来文章找不到了,今天看到一篇好文,顺便转载过来. 简介 说到 ...
- ThinkPHP实现静态缓存和动态缓存
2019独角兽企业重金招聘Python工程师标准>>> 弄清静态缓存和动态缓存的用途: 静态缓存:生成静态页面--缓存的是整个页面; 动态缓存:仅对数据库中的数据进行了缓存,即&qu ...
- php查询socket数据包头,php 查询数组值php中关于socket的系列函数总结
本文列举了所有关于PHP语言中使用socket相关服务的一些函数.注意使用如下函数之前,你需要确保你的socket已打开,如果你没有打开,请编辑你的php.ini文件,去掉下面这行前面的注释(分号): ...
- 字符设备驱动之cdev_init()系列函数
字符设备驱动之cdev_init()系列函数 1.内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义: linux-2.6.22/include/linux/cdev.h struct ...
- openssl之EVP系列之12---EVP_Seal系列函数介绍
openssl之EVP系列之12---EVP_Seal系列函数介绍 ---根据openssl doc/crypto/EVP_SealInit.pod翻译和自己的理解写成 (作者:Dra ...
- ecshop源码分析——静态缓存static_c…
http://guozhiwei.javaeye.com/blog/673291 http://www.phpall.cn static_caches缓存文件 存放在ecshop/temp/stati ...
- wordrpress静态缓存插件WP Super Cache 使用教程
WordPress 静态缓存插件众多,孰优孰劣,这里不予评判,只说一说使用率比较高的静态缓存插件WP Super Cache的基本使用方法. 插件安装 进入WordPress后台 → 插件 → 安装插 ...
- dlopen系列函数详解
Linux提供了一套API来动态装载库.下面列出了这些API: dlopen:该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添 ...
- C语言:跨平台环境下使用snprintf,vsnprintf系列函数要注意返回值的问题
标准C语言函数snprintf,vsnprintf系列函数可以向指定的缓冲区输出格式化打印的字符串. 如果指定的缓存区足够大,那么调用正常,返回值就是写入缓存区的字节长度(不含结尾'\0') 那么缓存 ...
最新文章
- 凯文·凯利:未来很美好,今天仍是Day1
- python elasticsearch模块_Python 操作 ElasticSearch
- How to Visualize Your Recurrent Neural Network with Attention in Keras
- Java基础(三十五)Math、Random类和数字格式化(String.format方法)
- 《Linux Device Drivers》第十六章 块设备驱动程序——note
- POJ 2480 Longge#39;s problem 积性函数
- 案例:需求问题的解决方案
- ROS:激光雷达+laser_scan_matcher 运行gmapping
- 基于Jenkins+Gitlab+Harbor+Rancher架构的CI/CD实现
- 2.11 数值分析: 事后误差估计和迭代改善
- C盘快满了,处理一下pagefile.sys文件和hiberfil.sys文件
- 采用commons-emai发送电子邮件
- 计算机网络中atm意思,atm是什么(atm什么意思)
- 深度学习中Batch size对训练效果的影响
- 记录下SpringBoot父子工程使用jib构建docker镜像的过程(跳过多余模块)
- 大数据教程(10.5)运营商流量日志解析增强
- linux服务器设置定时任务,Linux服务器定时任务
- python 合并表格
- Vue实现购物车全选及价格计算
- 图片和图片转base64大小的关系