php生成html简单代码实例
实例一
原理剖析:
当我们制作数据量大以及访问人数多的网站时往往会采用动态生成html静态页面的方法,这样做的好处是用户直接访问静态页面,减轻了服务器的负担,又可以对搜索引擎更加友好,可谓一举两得;
其原理是先读入模板文件,然后按照一定的规则替换模板中的标签,具体实现如下:
index.tpl 模板文件代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{title}</title>
</head>
<body>
{content}
</body>
</html>
index.php 服务端代码:
<?php
$data = array("id" => 1, "title" => "这里是标题", "content" => "这里是内容");
$tpl = "index.tpl";
$content = file_get_contents($tpl); //读取模板文件的内容
$content = str_replace("{title}",$data["title"],$content); //用具体数据来替换模板标签
$content = str_replace("{content}",$data["content"],$content);
file_put_contents($data["id"].".html",$content); //将替换后的内容写进html文件中
?>
这里是从数组中直接读取数据,实际过程中可以将数据库读取的数据保存在数组中,然后用循环的方法实现替换就行了。
实例二
//单页生成html页
<?php
ob_start(); //开启服务器缓存
include_once "../gsjj.php";
$ctx=ob_get_contents(); //获取缓存
ob_end_clean(); //清空缓存
$fh=fopen("../gsjj.html","w+");
fwrite($fh,$ctx); //写入html,生成html
fclose($fh);
echo "<script>alert("文件生成成功");location.href="makehtml.php";</script>";
?>
//新闻列表带分页生成html页
<?php
$fp = fopen ("../new.html","r"); //只读方式打开 new.html模板,将文件指针指向文件头
$content = fread ($fp,filesize ("../new.html")); //读取整个文件内容
$list = "";
$num=0;
$sql= "select * from news ";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result))
{ //查询entries表,取出列表项
$num++;
if($row["url"]=="")
{
$list .= "<ul class="news" id="ul"><li><a href="".$row["tid"].".html">".$row["title"]."</a></li></ul>";
}
else
{
$list .= "<ul class="news" id="ul"><li><a href="".$row["url"]."" target="_blank">".$row["title"]."</a></li></ul>";
}
}
$content= str_replace ("{articletable}",$list,$content);
//生成列表结束
// echo $content;
$filename = "../news.html";
$filename1 = "../new.html";
$handle = fopen ($filename,"w"); //打开文件指针,创建文件
/*
检查文件是否被创建且可写
*/
if (!is_writable ($filename)){
die ("文件:".$filename."不可写,请检查其属性后重试!");
}
if (!fwrite ($handle,$content)){ //将信息写入文件
die ("生成文件".$filename."失败!");
}
fclose ($handle); //关闭指针
die ("Create file ".$filename." success !");
?>
模板页面 new.html
<div id="mydiv">
{articletable}
</div>
<div id="changpage" style="text-align:center; color:#333333; margin-top:50px"></div>
<script>
var obj,j;
var page=0;
var nowPage=0;//当前页
var listNum=40;//每页显示<ul>数
var PagesLen;//总页数
var PageNum=500;//分页链接接数(5个)
onload=function(){
obj=document.getElementById("mydiv").getElementsByTagName("ul");
j=obj.length
PagesLen=Math.ceil(j/listNum);
upPage(0)
}
function upPage(p){
nowPage=p
//内容变换
for (var i=0;i<j;i++){
obj[i].style.display="none"
}
for (var i=p*listNum;i<(p+1)*listNum;i++){
if(obj[i])obj[i].style.display="block"
}
//分页链接变换
strS="<a href="###" onclick="upPage(0)" style="color:#000000">首页</a> "
var PageNum_2=PageNum%2==0?Math.ceil(PageNum/2)+1:Math.ceil(PageNum/2)
var PageNum_3=PageNum%2==0?Math.ceil(PageNum/2):Math.ceil(PageNum/2)+1
var strC="",startPage,endPage;
if (PageNum>=PagesLen) {startPage=0;endPage=PagesLen-1}
else if (nowPage<PageNum_2){startPage=0;endPage=PagesLen-1>PageNum?PageNum:PagesLen-1}//首页
else {startPage=nowPage+PageNum_3>=PagesLen?PagesLen-PageNum-1: nowPage-PageNum_2+1;var t=startPage+PageNum;endPage=t>PagesLen?PagesLen-1:t}
for (var i=startPage;i<=endPage;i++){
if (i==nowPage)strC+="<a href="###" style="color:red;font-weight:700;" onclick="upPage("+i+")">"+(i+1)+"</a> "
else strC+="<a href="###" onclick="upPage("+i+")">"+(i+1)+"</a> "
}
strE=" <a href="###" onclick="upPage("+(PagesLen-1)+")" style="color:#000000">尾页</a> "
strE2=nowPage+1+"/"+PagesLen+"页"+" 共"+j+"条"
document.getElementById("changpage").innerHTML=strS+strC+strE+strE2
}
</script>
</div>
//后台添加文章生成 html
<?php
mt_srand((double)microtime()*1000000);
$randval = mt_rand(1, 99999);
$tmp_num = $randval;
$title=$_POST["title"];
$gjc=$_POST["gjc"];
$content=trim($_POST["content"]);
$bz=$_POST["bz"];
$url=$_POST["url"];
$shijian=date("Y-m-d");
$mobanpath=$root."../newxinxi.html";
$fp=fopen($mobanpath,"rb");
$news_contents=fread($fp,filesize($mobanpath));
$news_contents=str_replace("{-news_title-}",$title,$news_contents);
$news_contents=str_replace("{-news_gjc-}",$gjc,$news_contents);
$news_contents=trim(str_replace("{-content-}",$content,$news_contents));
$news_contents=str_replace("{-bz-}",$bz,$news_contents);
$news_contents=str_replace("{-shijian-}",$shijian,$news_contents);
$news_contents=str_replace("{-url-}",$url,$news_contents);
$news_contents=str_replace("{-shijian-}",$shijian,$news_contents);
$list = "";
$num=1;
$sql= "select * from news order by id desc limit 0,1";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result))
{//查询entries表,取出列表项
/*$num=$nmu+1; */
$id=$row["id"]+1;
$filename="".$tmp_num.".html";
}
$num++;
$newspath=$root."../".$filename;
$fp1=fopen($newspath,"w");
fwrite($fp1,$news_contents,strlen($news_contents));
$sql="insert into news (title,shijian,content,gjc,bz,url,tid) values ("$_POST[title]","$shijian","$_POST[content]","$_POST[gjc]","$_POST[bz]","$_POST[url]","$tmp_num")";
$result=mysql_query($sql);
echo "<script>";
echo "alert("新闻添加成功!");";
echo "window.location=("news.php");";
echo "</script>";
?>
其他——php生成html的类
<?php
class html
{
var $dir; //dir for the htmls(without/)
var $rootdir; //root of html files(without/):html
var $name; //html文件存放路径
var $dirname; //指定的文件夹名称
var $url; //获取html文件信息的来源网页地址
var $time; //html文件信息填加时的时间
var $dirtype; //目录存放方式:year,month,,,,
var $nametype; //html文件命名方式:name
function html($nametype = "name", $dirtype = "year", $rootdir = "html")
{
$this -> setvar($nametype, $dirtype, $rootdir);
}
function setvar($nametype = "name", $dirtype = "year", $rootdir = "html")
{
$this -> rootdir = $rootdir;
$this -> dirtype = $dirtype;
$this -> nametype = $nametype;
}
function createdir($dir = "")
{
$this -> dir = $dir?$dir:$this -> dir;
if (!is_dir($this -> dir))
{
$temp = explode("/", $this -> dir);
$cur_dir = "";
for($i = 0;$i < count($temp);$i++)
{
$cur_dir .= $temp[$i] . "/";
if (!is_dir($cur_dir))
{
@mkdir($cur_dir, 0777);
}
}
}
}
function getdir($dirname = "", $time = 0)
{
$this -> time = $time?$time:$this -> time;
$this -> dirname = $dirname?$dirname:$this -> dirname;
switch($this -> dirtype)
{
case "name":
if(empty($this -> dirname))
$this -> dir = $this -> rootdir;
else
$this -> dir = $this -> rootdir . "/" . $this -> dirname;
break;
case "year":
$this -> dir = $this -> rootdir . "/" . date("Y", $this -> time);
break;
case "month":
$this -> dir = $this -> rootdir . "/" . date("Y-m", $this -> time);
break;
case "day":
$this -> dir = $this -> rootdir . "/" . date("Y-m-d", $this -> time);
break;
}
$this -> createdir();
return $this -> dir;
}
function geturlname($url = "")
{
$this -> url = $url?$url:$this -> url;
$filename = basename($this -> url);
$filename = explode(".", $filename);
return $filename[0];
}
function geturlquery($url = "")
{
$this -> url = $url?$url:$this -> url;
$durl = parse_url($this -> url);
$durl = explode("&", $durl[query]);
foreach($durl as $surl)
{
$gurl = explode("=", $surl);
$eurl[] = $gurl[1];
}
return join("_", $eurl);
}
function getname($url = "", $time = 0, $dirname = "")
{
$this -> url = $url?$url:$this -> url;
$this -> dirname = $dirname?$dirname:$this -> dirname;
$this -> time = $time?$time:$this -> time;
$this -> getdir();
switch($this -> nametype)
{
case "name":
$filename = $this -> geturlname() . ".htm";
$this -> name = $this -> dir . "/" . $filename;
break;
case "time":
$this -> name = $this -> dir . "/" . $this -> time . ".htm";
break;
case "query":
$this -> name = $this -> dir . "/" . $this -> geturlquery() . ".htm";
break;
case "namequery":
$this -> name = $this -> dir . "/" . $this -> geturlname() . "-" . $this -> geturlquery() . ".htm";
break;
case "nametime":
$this -> name = $this -> dir . "/" . $this -> geturlname() . "-" . $this -> time . ".htm";
break;
}
return $this -> name;
}
function createhtml($url = "", $time = 0, $dirname = "", $htmlname = "")
{
$this -> url = $url?$url:$this -> url;
$this -> dirname = $dirname?$dirname:$this -> dirname;
$this -> time = $time?$time:$this -> time;
// 上面保证不重复地把变量赋予该类成员
if(empty($htmlname))
$this -> getname();
else
$this -> name = $dirname . "/" . $htmlname; //得到name
$content = file($this -> url) or die("Failed to open the url " . $this -> url . " !");;
// /////////////关键步---用file读取$this->url
$content = join("", $content);
$fp = @fopen($this -> name, "w") or die("Failed to open the file " . $this -> name . " !");
if(@fwrite($fp, $content))
return true;
else
return false;
fclose($fp);
}
// ///////////////以name为名字生成html
function deletehtml($url = "", $time = 0, $dirname = "")
{
$this -> url = $url?$url:$this -> url;
$this -> time = $time?$time:$this -> time;
$this -> getname();
if(@unlink($this -> name))
return true;
else
return false;
}
/**
* function::deletedir()
* 删除目录
*
* @param $file 目录名(不带/)
* @return
*/
function deletedir($file)
{
if(file_exists($file))
{
if(is_dir($file))
{
$handle = opendir($file);
while(false !== ($filename = readdir($handle)))
{
if($filename != "." && $filename != "..")
$this -> deletedir($file . "/" . $filename);
}
closedir($handle);
rmdir($file);
return true;
}else{
unlink($file);
}
}
}
}
?>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: PHP把时间转换成几分钟前、几小时前、几天前的几个函数、类分享
- 下一篇: pdo 连接操作数据库
