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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
php桌面中心(四) 数据显示
Mar 11 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
PHP的curl函数的用法总结
Feb 14 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 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
global.php
2006/12/09 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
php依赖注入知识点详解
2019/09/23 PHP
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
教师自我鉴定范文
2013/11/10 职场文书
公司培训心得体会
2014/01/03 职场文书
总经理岗位职责范本
2014/02/02 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
工作经验交流材料
2014/12/30 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书