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


Posted in PHP onNovember 13, 2014

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

具体方法简单说明如下:
1.使用文件函数得到静态页面的模板字符串,然后用str_replace函数将需要替换的东西替换了再写入到新的文件中。
2. 利用PHP的输出控制函数(Output Control)得到静态页面字符串,再写入到新的文件中。

$filemodel="template/it.php";           //模板地址

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

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

方法一:ob_get_contents()

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

ob_strart();//打开缓冲区

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

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

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

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

ob_clean();//清空缓存

方法二:file_get_contents();

$fn=date('ymdhis').rand(1000,9999).'html';

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

$content=file_get_contents($url);

$fs=fopen($fn,'w');

fwrite($fs,$content);

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

方法三:str_replace()

$filemodel="supply.php"; 字串5$file=fopen($filemodel,"w+");

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

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

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

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

该方法适用于很简单的页面,如果supply.php中有使用引用文件比如require ('header.php');那么header.php中的内容将会显示不出来
在实际应用中,您可以写一个生成静态页的类,
/*+++ 

|

| 使用方法 

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

|   $Url:       页面 URL 地址

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

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

|        $FolderRoot html文件存放路径

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

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

|     

|

|

/*++*/

class Shtml

{

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

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

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

{

$this->Url   = $Url;

$this->FileBag   = $FileBag;

$this->FileRoot = $FolderRoot;

$this->FileName = $FolderName;

$this->fileid    = $fileid;

Shtml::useFolder ();

}

/*************获取数据*******************/

public function loadcontent ($Folder)

{   

ob_start();

require_once $this->Url;

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

ob_clean();

}

/********** 指定文件夹*****************/ 

public function useFolder ()

{    

if($this->FileBag==1)

{

$Folder=$this->FileName;

}

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

{

$Folder=date('Ymd',time());

}

else

{

exit($this->message1);

}

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

Shtml::loadcontent ($Folder);

}

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

public function writehtml ($Folder,$cache_value)

{   

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

fwrite($file,$cache_value); 

fclose($file);

}

}

$fileid=2;

$shtml = new Shtml("https://3water.com",1,"","cc",$fileid);

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

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

PHP 相关文章推荐
PHP脚本的10个技巧(2)
Oct 09 PHP
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php获取当月最后一天函数分享
Feb 02 PHP
PHP中预定义的6种接口介绍
May 12 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
PHP微信分享开发详解
Jan 14 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 #PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 #PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 #PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 #PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 #PHP
PHP之sprintf函数用法详解
Nov 12 #PHP
php中simplexml_load_file函数用法实例
Nov 12 #PHP
You might like
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
python3 flask实现文件上传功能
2020/03/20 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
办公室内勤工作职责
2013/12/11 职场文书
电子商务应届生自我鉴定
2014/01/13 职场文书
个人课题方案
2014/05/08 职场文书
2015小学师德工作总结
2015/07/21 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers