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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
smarty 原来也不过如此~~呵呵
Nov 25 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
PHP对象相关知识总结
Apr 09 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
Laravel创建数据库表结构的例子
Oct 09 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
php URL验证正则表达式
2011/07/19 PHP
学习php分页代码实例
2013/10/24 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
php源码的使用方法讲解
2019/09/26 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
Python正则表达式学习小例子
2020/03/03 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
计算机求职信
2013/12/01 职场文书
社团活动策划书范文
2014/01/09 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
个人简历自我评价
2014/02/02 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript