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 编程请选择正确的文本编辑软件
Dec 21 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
php rsa加密解密使用详解
Jan 14 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
php 中奖概率算法实现代码
Jan 25 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 PHP
Laravel 前端资源配置教程
Oct 18 PHP
浅谈php常用的7大框架的优缺点
Jul 20 PHP
Laravel配合jwt使用的方法实例
Oct 25 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开发者的10个技巧
2011/02/25 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
django foreignkey(外键)的实现
2019/07/29 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
艺术专业大学生自我评价
2013/09/22 职场文书
关于赌博的检讨书
2014/01/24 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
操行评语大全
2014/04/30 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python