常用3种PHP动态页生成静态页的程序代码
程序员文章站
2022-05-29 11:20:54
...
生成静态页的页面非常的简单就是定义好模板与模板标题,之后利用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_clen()所以在不会显示出来 $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中的内容将会显示不出来.
在实际应用中,您可以写一个生成静态页的类,代码如下:
/*+++ | | Author :陈毓端 | 使用方法 | $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("http://www.phprm.com", 1, "", "cc", $fileid);
总结:这个生成html程序代码没有生成分页了,如果文章很多它也只生成一篇文章,如果要改进我们需要进行比较大的改动了,在此就不介绍了.
上一篇: 有关checkbox的有关问题