当前位置:首页 > PHP教程 > php应用 > 列表

PHP动态页生成静态页的3种常用方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-25 14:55:27 浏览: 评论:0 

这篇文章主要介绍了PHP动态页生成静态页的3种常用方法,通过三种不同的方法从不同的角度实现这一功能,有很好的参考借鉴价值,需要的朋友可以参考下

生成静态页的页面非常的简单就是定义好模板与模板标题,之后利用str_replace进行替换了,是最常用的方法,另一种是利用ob_get_contents输出获得然后生成html,还有一种不怎么推荐的是使用file_get_contents直接执行访问远程文件然后进行保存,性能极差。

具体方法简单说明如下:

1.使用文件函数得到静态页面的模板字符串,然后用str_replace函数将需要替换的东西替换了再写入到新的文件中。

2. 利用PHP的输出控制函数(Output Control)得到静态页面字符串,再写入到新的文件中,代码如下:

  1. $filemodel="template/it.php";           //模板地址 
  2. $file=fopen($filemodel,"rb");           //打开模板,得到文件指针 
  3. $temp=fread($file,filesize($filemodel));    //得到模板文件html代码 

方法一:ob_get_contents()

这是一种很方便的方法,也是很常用的方法,实现原理是:首先打开缓存,然后创建相应的静态页文件,写入缓存的内容,清空缓存。

示例代码如下:

  1. ob_strart();//打开缓冲区 
  2. $fn=date('ymdhis').rand(1000,9999).'html';//生成文件名 
  3. require("supply.php");//载入要生成静态页的文件,因为后台有ob_clean()所以在不会显示出来 
  4. $fs=fopen($fn,'w');//打开静态页文件 
  5. fwrite($fs,ob_get_contents());//生成静态文件 
  6. ob_clean();//清空缓存 

方法二:file_get_contents();

代码如下:

  1. $fn=date('ymdhis').rand(1000,9999).'html'
  2. $url'http://'.$_SERVER['HTTP_HOST']."/";//注意 
  3. $content=file_get_contents($url); 
  4. $fs=fopen($fn,'w'); 
  5. fwrite($fs,$content); 

下面对上面的注意进行一下解释,如果在些你使用的是仅仅是文件名,而不是URL那么您这个文件中如果有使用引用文件比如require ('header.php'); 那么header.php中的内容将会显示不出来。

方法三:str_replace()

代码如下:

  1. $filemodel="supply.php"; 字串5$file=fopen($filemodel,"w+"); 
  2. $temp=fread($file,filesize($filemodel)); 
  3. $temp=str_replace("[title]",$title,$temp); 
  4. $temp=str_replace("[postTime]",$postTime,$temp); 
  5. $temp=str_replace("[content]",$content,$temp); 

该方法适用于很简单的页面,如果supply.php中有使用引用文件比如require ('header.php');那么header.php中的内容将会显示不出来

在实际应用中,您可以写一个生成静态页的类,代码如下:

  1. /*+++ 
  2. | 
  3. | 使用方法 
  4. |   $shtml = new Shtml($Url,$FileBag,$FolderName,$fileid) 
  5. |   $Url:       页面 URL 地址 
  6. |   $FileBag:   文件夹标记   1 为:指定文件夹  
  7. |         2 为:默认文件夹(时间(年月日)) 
  8. |        $FolderRoot html文件存放路径 
  9. |   $FolderName 指定文件夹的名称 $FileBag为2时 可以写为空(""); 
  10. |   $fileid      静态页面名称(后缀 默认为 .html) 
  11. |     
  12. | 
  13. | 
  14. /*++*/ 
  15. class Shtml 
  16. var $message1="Error    1: You write class Shtml is Wrong !   The second parameter is 1 or 2 in   this class!."
  17. var $message2="Error    2: The file write    Error."
  18. function __construct ($Url,$FileBag,$FolderRoot,$FolderName,$fileid
  19. $this->Url   = $Url
  20. $this->FileBag   = $FileBag
  21. $this->FileRoot = $FolderRoot
  22. $this->FileName = $FolderName
  23. $this->fileid    = $fileid
  24. Shtml::useFolder (); 
  25. /*************获取数据*******************/ 
  26. public function loadcontent ($Folder
  27. {   
  28. ob_start(); 
  29. require_once $this->Url; 
  30. Shtml::writehtml ($Folder,ob_get_contents()); 
  31. ob_clean(); 
  32. /********** 指定文件夹*****************/ 
  33. public function useFolder () 
  34. {    
  35. if($this->FileBag==1) 
  36. $Folder=$this->FileName; 
  37. else if($this->FileBag==2) 
  38. $Folder=date('Ymd',time()); 
  39. else 
  40. exit($this->message1); 
  41. if(!is_dir($this->FileRoot.$Folder)){ mkdir($this->FileRoot.$Folder,0700);} 
  42. Shtml::loadcontent ($Folder); 
  43. /********** 生成静态页面*****************/ 
  44. public function writehtml ($Folder,$cache_value
  45. {   
  46. $file   = fopen($this->FileRoot.$Folder.'/'.$this->fileid.'.html','w+'); 
  47. fwrite($file,$cache_value); 
  48. fclose($file); 
  49. $fileid=2; 
  50. $shtml = new Shtml("https://www.phpfensi.com",1,"","cc",$fileid); 

总结, 这个生成html程序代码没有生成分页了,如果文章很多它也只生成一篇文章,如果要改进我们需要进行比较大的改动了,在此就不介绍了。感兴趣的朋友可以动手测试改进一下,相信会有不小的收获!

希望本文所述对大家的PHP程序设计有所帮助。

Tags: PHP动态生成静态页

分享到: