摘要::
静态化:
静态化是解决减轻网站压力,提高网站访问速度的常用方案.包括:纯静态和伪静态。
纯静态:
将PHP程序生成静态的HTML文件,保存到服务器的磁盘中。
原理:
在用户访问PHP程序时,首先检测静态的HTML文件是否存在,如果存在直接输出静态文件,如果静态文件不存在,查询数据库,生成静态文件,并输出。
优势:
减少PHP程序编译和对数据库的查询。
数据缓冲区:
数据缓冲区是用户前端用来存储、操纵数据的对象。
静态化是解决减轻网站压力,提高网站访问速度的常用方案.包括:纯静态和伪静态。
纯静态:
将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 某文件夹.
(对文件夹进行权限修改而不是对某个文件,原因是我们在对当前文件夹进行写入操作)