好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php生成html文件的多种方法介绍 - php高级应用

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高级应用的详细内容...

  阅读:40次