紫影基地

 找回密码
 立即注册
查看: 247|回复: 0

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

[复制链接]
阅读字号:

2002

主题

2117

帖子

21万

积分

超级版主

Rank: 8Rank: 8

积分
210303
发表于 2023-5-15 04:33:38 | 显示全部楼层 |阅读模式
本帖最后由 超新星 于 2023-5-15 04:35 编辑


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

具体方法简单说明如下:

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

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

  3. 复制代码 代码如下:$filemodel="template/it.php";           //模板地址

  4. $file=fopen($filemodel,"rb");           //打开模板,得到文件指针

  5. $temp=fread($file,filesize($filemodel));    //得到模板文件html代码

  6. 方法一:ob_get_contents()

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

  8. 示例:

  9. 复制代码 代码如下:ob_strart();//打开缓冲区

  10. $fn=date("ymdhis").rand(1000,9999)."html";//生成文件名

  11. require("supply.php");//载入要生成静态页的文件,因为后台有ob_clean()所以在不会显示出来

  12. $fs=fopen($fn,"w");//打开静态页文件

  13. fwrite($fs,ob_get_contents());//生成静态文件

  14. ob_clean();//清空缓存

  15. 方法二:file_get_contents();复制代码 代码如下:$fn=date("ymdhis").rand(1000,9999)."html";

  16. $url= "http://".$_SERVER["HTTP_HOST"]."/";//注意

  17. $content=file_get_contents($url);

  18. $fs=fopen($fn,"w");

  19. fwrite($fs,$content);

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

  21. 方法三:str_replace()复制代码 代码如下:$filemodel="supply.php"; 字串5$file=fopen($filemodel,"w+");

  22. $temp=fread($file,filesize($filemodel));

  23. $temp=str_replace("[title]",$title,$temp);

  24. $temp=str_replace("[postTime]",$postTime,$temp);

  25. $temp=str_replace("[content]",$content,$temp);

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

  27. 在实际应用中,您可以写一个生成静态页的类,

  28. 复制代码 代码如下:/*+++

  29. |

  30. | 使用方法

  31. |   $shtml = new Shtml($Url,$FileBag,$FolderName,$fileid)

  32. |   $Url:       页面 URL 地址

  33. |   $FileBag:   文件夹标记   1 为:指定文件夹

  34. |         2 为:默认文件夹(时间(年月日))

  35. |        $FolderRoot html文件存放路径

  36. |   $FolderName 指定文件夹的名称 $FileBag为2时 可以写为空("");

  37. |   $fileid      静态页面名称(后缀 默认为 .html)

  38. |

  39. |

  40. |

  41. /*++*/

  42. class Shtml

  43. {

  44. var $message1="Error    1: You write class Shtml is Wrong !   The second parameter is 1 or 2 in   this class!.";

  45. var $message2="Error    2: The file write    Error.";

  46. function __construct ($Url,$FileBag,$FolderRoot,$FolderName,$fileid)

  47. {

  48. $this->Url   = $Url;

  49. $this->FileBag   = $FileBag;

  50. $this->FileRoot = $FolderRoot;

  51. $this->FileName = $FolderName;

  52. $this->fileid    = $fileid;

  53. Shtml::useFolder ();

  54. }

  55. /*************获取数据*******************/

  56. public function loadcontent ($Folder)

  57. {

  58. ob_start();

  59. require_once $this->Url;

  60. Shtml::writehtml ($Folder,ob_get_contents());

  61. ob_clean();

  62. }

  63. /********** 指定文件夹*****************/

  64. public function useFolder ()

  65. {

  66. if($this->FileBag==1)

  67. {

  68. $Folder=$this->FileName;

  69. }

  70. else if($this->FileBag==2)

  71. {

  72. $Folder=date("Ymd",time());

  73. }

  74. else

  75. {

  76. exit($this->message1);

  77. }

  78. if(!is_dir($this->FileRoot.$Folder)){ mkdir($this->FileRoot.$Folder,0700);}

  79. Shtml::loadcontent ($Folder);

  80. }

  81. /********** 生成静态页面*****************/

  82. public function writehtml ($Folder,$cache_value)

  83. {

  84. $file   = fopen($this->FileRoot.$Folder."/".$this->fileid.".html","w+");

  85. fwrite($file,$cache_value);

  86. fclose($file);

  87. }

  88. }

  89. $fileid=2;

  90. $shtml = new Shtml("//www.yinxi.net",1,"","cc",$fileid);
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫影基地

GMT+8, 2025-1-12 12:13 , Processed in 0.083291 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表