通知内容:小白站长云与小白站长论坛两站强强合作,凡是小白站长论坛的正式会员注册小白站长云并需要购买云服务器或者服务器租用/托管、云防御、ssl证书的可联系管理员享受升级成小白站长云金牌会员,永久享受8折优惠。还等什么,小白站长论坛的用户们赶快行动起来吧。
查看: 29|回复: 0

[建站笔记] PHP将整个网站生成HTML静态

[复制链接]
发表于 2019-5-20 15:10:40 | 显示全部楼层 |阅读模式
用查找替换标签的方法是惯用的模板处理方法。通常用html文件做成一个模板,在需要替换变量的位置放置特别的标签,然后在PHP逻辑中用file_get_content把模板内容获取进来,在str_replace()的方法把变量的数据替换到指定的标签中,等输出浏览器的时候就可以合成一个完整的动态页面。用这种方法制作模板,PHP的变量数据不能直接传递给模板,需要通过查找替换标签的方法进行转换。所以遇到需要交换数据量多的时候会比较麻烦。

其实,除了这种方法外,还可以尝试用ob_get_contents()方法制作模板。用ob_get_contents()的好处就是可以直接传变量给模板,并且在模板中可以直接运行PHP程序;



我经常会在网上看到有人问怎么将整个动态的网站静态化,其实实现的方法很简单。

<?php
//在你的开始处加入 ob_start();
ob_start();

//以下是你的代码
//在结尾加入 ob_end_clean(),并把本页输出到一个变量中
$temp = ob_get_contents();
ob_end_clean();

//写入文件
$fp = fopen(‘文件名’,'w’);
fwrite($fp,$temp) or die(‘写文件错误’);
?>


这只是最基本的方法,还不是很实用,因为网站是要更新的,要定期重新生成HTML

下面是我用的方法:

if(file_exists("xxx.html"))
{
    $time = time();

         //文件修改时间和现在时间相差半小时一下的话,直接导向html文件,否则重新生成html
    if($time - filemtime("xxx.html") < 30*60)
    {
        header("Location:xxx.html");
    }
}
//在你的开始处加入 ob_start();
ob_start();

//页面的详细内容
//在结尾加入 ob_end_clean(),并把本页输出到一个变量中
$temp = ob_get_contents();
ob_end_clean();

//写入文件
$fp = fopen(‘xxx.html’,'w’);
fwrite($fp,$temp) or die(‘写文件错误’);

//重新导向
header("Location:xxx.html");


下面是一些用到的函数的介绍:
1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。


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


3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。


4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。


5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。


6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!


7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小白站长云与小白站长论坛两站强强合作,凡是小白站长论坛的正式会员注册小白站长云并需要购买云服务器或者服务器租用/托管、云防御、ssl证书的可联系管理员享受升级成小白站长云金牌会员,永久享受8折优惠。还等什么,小白站长论坛的用户们赶快行动起来吧。

云服务器赞助商|sitemap|手机版|小黑屋|小白站长论坛

GMT+8, 2019-6-20 03:54 , Processed in 0.116273 second(s), 26 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表