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 zip文件解压类代码
Dec 02 PHP
php&mysql 日期操作小记
Feb 27 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHP filesize函数用法浅析
Feb 15 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
tp5框架的增删改查操作示例
Oct 31 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP会话处理的10个函数
2015/08/11 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
php判断目录存在的简单方法
2019/09/26 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
Vue项目安装插件并保存
2019/01/28 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
使用python生成目录树
2018/03/29 Python
python实现抖音视频批量下载
2018/06/20 Python
python怎么删除缓存文件
2020/07/19 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
大学生求职简历的自我评价范文
2013/10/12 职场文书
店长岗位职责
2013/11/21 职场文书
超市客服工作职责
2014/06/11 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
少年雷锋观后感
2015/06/10 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js
Docker下安装Oracle19c
2022/04/13 Servers
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记