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 相关文章推荐
MySQL授权问题总结
May 06 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
php array的学习笔记
May 10 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
php模板引擎技术简单实现
Mar 15 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 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
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
新锐科技Java程序员面试题
2016/07/25 面试题
保险专业自荐信范文
2014/02/20 职场文书
普通党员整改措施
2014/10/24 职场文书
小学工作总结2015
2015/05/04 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS