php生成html文件方法总结


Posted in PHP onDecember 01, 2014

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

<?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”);

上面用的缓存文件在大量生成时会出现负载过重,下面我们介绍一种更为高效的方法

以下是输入内容的提交页面:
文件名:aa.html

<html>

<head>

<title>提交页面</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<form method="post" action="bb.php">

标题:<input type="text" name="htmltitle"><br>

内容:<textarea rows="8" cols="45" name="htmlbody"></textarea><br>

<input type="submit" name="submit" value="添加新闻">

</form>

</body>

</html>

以下是代码片段:
文件名:bb.php

<?php

//定义日期函数

function getdatetime()

{

 $datetime=getdate();

 $strReturn=$datetime["year"]."-";

 $strReturn=$strReturn.$datetime["mon"]."-";

 $strReturn=$strReturn.$datetime["mday"];

 return $strReturn;

}

//定义时间函数(文件名)

function gettime()

{

 $times=getdate();

 $strtime=$times["year"];

 $strtime=$strtime.$times["mon"];

 $strtime=$strtime.$times["mday"];

 $strtime=$strtime.$times["minutes"];

 $strtime=$strtime.$times["seconds"];

 return $strtime;

}

?>

<?php

//判断提交值是否为空

$submit=$_POST["submit"];

//定义文件头部信息

$htmltitle=$_POST["htmltitle"];

//定义文件内容

$htmlbody=$_POST["htmlbody"];

if ($submit) {

//定义html文件标签

$html1=$html1."<html>";

$html1=$html1."<head>";

$html1=$html1."<title>";

$html1=$html1.$htmltitle;

$html1=$html1."</title>";

$html1=$html1."<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>";

$html1=$html1."</head>";

$html1=$html1."<body>";

$html1=$html1."<table border='1' width='740' cellpadding='2' cellspacing='0' bordercolordark='#f7f7f7' bordercolorlight='#cccccc'><tr><td align='center' bgcolor='#f7f7f7' height='30'><font size='3'><b>";

$html1=$html1.$htmltitle;

$html1=$html1."</b></font></td></tr>";

$html1=$html1."<tr><td><font size='2'>";

$html1=$html1.$htmlbody;

$html1=$html1."</font></td></tr></table>";

$html1=$html1."</body>";

$html1=$html1."</html>";

//判断今天的文件夹是否存在

if (!is_dir(getdatetime())) {

 //如果不存在就建立

 mkdir(getdatetime(),0777);

}

//写成html文件

$filedir=getdatetime();

$filename=gettime();

$filename=$filename.".html";

$fp=fopen("$filedir/$filename","w");

fwrite($fp,$html1);

fclose($fp);

echo "<script>alert('文件写入成功');location.href='111.php';</script>";

}

?>

如果提示文件写入成功,那你就成功了,然后回到你的相应目录里看看有没有生成静态的html文件!

smarty模板生成方法

<?php

require_once("./config/config.php");

ob_start();

$id=$_GET[id];

$sql="select * from table_name where id='$id'";

$result=mysql_query($sql);

$rs=mysql_fetch_object($result);

$smarty->assign("showtitle",$rs->title);

$smarty->assign("showcontent",$rs->content);

$smarty->display("content.html");

$this_my_f= ob_get_contents(); 

ob_end_clean();

$filename = "$id.html";

tohtmlfile_cjjer($filename,$this_my_f);

// 文件生成函数

function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content){

if (is_file ($file_cjjer_name)){

@unlink ($file_cjjer_name); //存在,就删除

}

$cjjer_handle = fopen ($file_cjjer_name,"w"); //创建文件

if (!is_writable ($file_cjjer_name)){ //判断写权限

return false;

}

if (!fwrite ($cjjer_handle,$file_cjjer_content)){

return false;

} 

fclose ($cjjer_handle); //关闭指针

return $file_cjjer_name; //返回文件名

}

?>

 
smarty中有一个获取模板页内容方法fetch(), 它的声明原形是这样的:
<?php 

function fetch($resource_name, $cache_id = null, 

  $compile_id = null, $display = false) 

?>

第一个参数为模板名称, 第二个参数为缓存的id, 第三个参数为编译id, 第四个参数为是否显示模板内容. 生成静态页我们就需要用到这个方法.
<?php 

   $smarty = new Smarty(); 

  //其它模板替换语法... 

   //下面这句取得页面中所有内容, 注意最后一个参数为false 

  $content = $smarty->fetch('模板名称.tpl', null, null, false); 

  //下面将内容写入至一个静态文件 

  $fp = fopen('news.html', 'w'); 

  fwrite($fp, $content); 

  fclose($fp); 

  //OK, 到这里这个news.html静态页就生成了, 你可以处理你下一步的工作了 

?>

好了结合上面的方法我们生成文件几乎原理都一样,先把数据读取出来然后给我们定义好的模板,最后利用fopen函数生成一个.html的文件

以上几种php生成html静态文件的方法原理上都大同小异,只是在方法上略有不同,都有优缺点,大家根据自己的项目需求,自由选择吧

PHP 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
phpnow php探针环境检测代码
Nov 04 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
php递归遍历删除文件的方法
Apr 17 PHP
php中header设置常见文件类型的content-type
Jun 23 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
php compact 通过变量创建数组
Nov 15 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
php+ajax 文件上传代码实例
Mar 18 PHP
PHP命名空间定义与用法实例分析
Aug 14 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 #PHP
php中随机函数mt_rand()与rand()性能对比分析
Dec 01 #PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 #PHP
PHP内置的Math函数效率测试
Dec 01 #PHP
php查找字符串出现次数的方法
Dec 01 #PHP
ThinkPHP实现动态包含文件的方法
Nov 29 #PHP
PHP静态文件生成类实例
Nov 29 #PHP
You might like
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
PHP链表操作简单示例
2016/10/15 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
vue+webpack中配置ESLint
2018/11/07 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python标准库defaultdict模块使用示例
2015/04/28 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
python中time、datetime模块的使用
2020/12/14 Python
英国办公用品商店:Office Outlet
2018/04/04 全球购物
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
编写strcpy函数
2014/06/24 面试题
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
介绍一下Python中webbrowser的用法
2013/05/07 面试题
房地产销售经理岗位职责
2014/01/01 职场文书
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
超市收银员岗位职责
2015/04/07 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
Python的property属性详细讲解
2022/04/11 Python