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 相关文章推荐
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
php返回字符串中所有单词的方法
Mar 09 PHP
php自定义错误处理用法实例
Mar 20 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
php网页版聊天软件实现代码
Aug 12 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
Zend Framework常用校验器详解
Dec 09 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 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中的Class的几点个人看法
2006/10/09 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
Views rows style模板重写代码
2011/05/16 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
一段实用的php验证码函数
2016/05/19 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
盘点提高 Python 代码效率的方法
2014/07/03 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
python 反向输出字符串的方法
2018/07/16 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
python获取Pandas列名的几种方法
2019/08/07 Python
Python日志syslog使用原理详解
2020/02/18 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
九年级政治教学反思
2014/02/06 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
温馨提示标语
2014/06/26 职场文书
综治维稳工作汇报
2014/10/27 职场文书
学校食堂管理制度
2015/08/04 职场文书
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python