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 win下Socket方式发邮件类
Aug 21 PHP
PHP操作数组相关函数
Feb 03 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
php模拟实现斗地主发牌
Apr 22 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无效的解决方法
2014/11/04 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
php时间戳转换代码详解
2019/08/04 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
javascript 清除输入框中的数据
2009/04/13 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
详解微信UnionID作用
2019/05/15 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
js实现3D旋转相册
2020/08/02 Javascript
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python三级菜单的实例
2017/09/13 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python制作填词游戏步骤详解
2019/05/05 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
python手写均值滤波
2020/02/19 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
Java多态性的定义以及类型
2014/09/16 面试题
ORACLE十问
2015/04/20 面试题
事业单位公务员的职业生涯规划
2014/01/15 职场文书
初中生期末评语大全
2014/04/24 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
事业单位鉴定材料
2014/05/25 职场文书
婚前保证书范文
2015/02/28 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python