php生成html文件的多种方法介绍
文章介绍了三种在php中使用种可以用来生成html文件的方法,前面是利用了php的ob_start,后面使用了smarty模板的朋友来生成方法.
我经常会在网上看到有人问怎么将整个动态的网站静态化,其实实现的方法很简单,代码如下:
<?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>" ; //开源代码phpfensi.com //判断今天的文件夹是否存在 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高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did30276