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 相关文章推荐
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
利用PHP制作简单的内容采集器的代码
Nov 28 PHP
ThinkPHP模板中数组循环实例
Oct 30 PHP
CI框架中site_url()和base_url()的区别
Jan 07 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 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/03 咖啡文化
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
页面中js执行顺序
2009/11/09 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python实现堆栈与队列的方法
2015/01/15 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
解决Mac下使用python的坑
2019/08/13 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS