php生成html文件方法总结

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

代码如下:

<?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静态文件的方法原理上都大同小异,只是在方法上略有不同,都有优缺点,大家根据自己的项目需求,自由选择吧

(0)

相关推荐

  • PHP转换文本框内容为HTML格式的方法

    本文实例讲述了PHP转换文本框内容为HTML格式的方法.分享给大家供大家参考,具体如下: 有时候我们将会用到将多行文本框中输入的内容以html格式显示出来,这样子可以保持原来的文本格式,如换行.回车等.可以通过下面的函数实现: function shtm($design_str) { $str=trim($design_str); // 取得字串同时去掉头尾空格和空回车 //$str=str_replace("<br>","",$str); // 去掉&

  • php实现转换html格式为文本格式的方法

    本文实例讲述了php实现转换html格式为文本格式的方法.分享给大家供大家参考,具体如下: 有时候需要转换html格式的字符串为文本,但又需要保持一定的格式,比如要求段落变成的分段格式就可以用下面这个函数 function html2text($str){ $str = preg_replace("/<style .*?<\\/style>/is", "", $str); $str = preg_replace("/<script

  • php解析mht文件转换成html的实例

    php解析mht文件,使用编辑器打开可以看到base64编码所以,mht是可以转换成html的. <?php /** * 针对Mht格式的文件进行解析 * 使用例子: * * function mhtmlParseBody($filename) { if (file_exists ( $filename )) { if (is_dir ( $filename )) return false; $filename = strtolower ( $filename ); if (strpos ( $

  • PHP中3种生成XML文件方法的速度效率比较

    PHP中3种生成XML文件方法的速度比较 有3种方法,分别是直接写;使用DomDocument;使用SimpleXML;其实还有第4种:使用XMLWriter,不过我没用过,也懒得试了.主要是想看看这3种方式哪个速度要快些直接上代码: 复制代码 代码如下: private function directWriteXml(&$data){  $xmltext='<?xml version="1.0" encoding="UTF-8" ?>';  $

  • Android Studio 打包生成APK文件方法

    Android Studio是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA.它类似于Eclipse ADT,Android Studio 提供了集成的Android开发工具用于开发和调试.那么今天我们就来讲讲如何通过Android Studio打包APK文件,相信有很多用户还不是非常了解,下面通过这篇文章给大家介绍一下. 前面一直使用的是out文件夹里面的那个apk文件(debug版本),最近在使用在线升级的时候发现有些问题,所以想用(release版)试试看. 一.没

  • php生成html文件方法总结

    我经常会在网上看到有人问怎么将整个动态的网站静态化,其实实现的方法很简单. 复制代码 代码如下: <?php //在你的开始处加入 ob_start(); ob_start(); //以下是你的代码 //在结尾加入 ob_end_clean(),并把本页输出到一个变量中 $temp = ob_get_contents(); ob_end_clean(); //写入文件 $fp = fopen('文件名','w'); fwrite($fp,$temp) or die('写文件错误'); ?> 这

  • Node.js 在本地生成日志文件的方法

    平常都使用console来打印 node 脚本执行时需要看到的信息,但这些信息也就只能在控制台查看.假如你希望将打印的信息输出到日志(log)文件查看的话,那就往下看看吧. 1.前言 期望: 每次运行脚本时,生成log日志存储到本地 每次执行脚本,之前日志内容清空 需要了解的知识点: fs new console.Console 2.什么是 fs 使用 node.js 对日志进行存储,就一定会对本地文件的增删改查,那么我们需要用到fs. 如果你写过 node,想必你应该见过它fs,fs全称为文件

  • Python如何生成xml文件

    用python内置的xml.dom可以对xml文件进行解析处理. 什么是xml? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 被设计为具有自我描述性. XML 是 W3C 的推荐标准 xml.dom具体操作实例: 本例通过xml模块对xml文件进行写入操作 from xml.dom.minidom import Document doc = Document() p

  • PHP简单实现生成txt文件到指定目录的方法

    本文实例讲述了PHP简单实现生成txt文件到指定目录的方法.分享给大家供大家参考,具体如下: <?php //fopen第二个参数可以是以下四个,区别就是是清空内容再写还是在后面累加内容 //"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建之. //"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建之. //"a" 写入方式打开,将文件指针指向文件末尾.如果文件不存

  • Mybatis Generator自动生成对应文件的实现方法

    使用Generator自动生成我们需要的bean dao mapper xml等文件的过程(没有借助eclipse等编辑工具直接命令提示符生成) 第一步:在E盘新建一个文件夹generator,在这文件夹下创建一个test文件夹用来存放生成的文件,在创建一个generator.xml的配置文件 第二步:导入需要的jar包 mybatis-generator-core-1.3.2.jar 和mysql-connector-java-5.1.28-bin.jar 第三步:编写generator.xm

  • asp.net简单生成XML文件的方法

    本文实例讲述了asp.net简单生成XML文件的方法.分享给大家供大家参考,具体如下: 方式一:直接使用DataSet SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Server=127.0.0.1;User ID=sa;Password=sa;Database=northwind;Persist Security Info=True"; conn.Open(); SqlDataAdapter da

  • PHP读取CURL模拟登录时生成Cookie文件的方法

    本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登录时会保存一个Cookie文件,例如下面的代码 复制代码 代码如下: $login_url = 'XXX';    $post_fields['email'] = 'XXXX';  $post_fields['password'] = 'XXXX';  $post_fields['origURL'] = 'XXX';  $post_fields['doma

  • PHP读取、解析eml文件及生成网页的方法示例

    本文实例讲述了PHP读取.解析eml文件及生成网页的方法.分享给大家供大家参考,具体如下: php读取eml实例,本实例可以将导出eml文件解析成正文,并且可以将附件保存到服务器.不多说直接贴代码了. <?php // Author: richard e42083458@163.com // gets parameters error_reporting(E_ALL ^ (E_WARNING|E_NOTICE)); header("Content-type: text/html; char

随机推荐