1、服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器。
2、如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件,这样反而会降低运行效率。
3、如果是需要PHP控制HTML代码的输出,比如需要PHP判断用户是否登陆,如果登陆则输出A,未登录则输出B。这就需要PHP来进行控制了。HTML不能实现这样的功能
<HTML> 
<TITLE>{ title }</TITLE> 
<BODY> 
this is a { file } file's templets 
</BODY> 
</HTML> 
PHP处理: 
 templetest.php 
Code:   <?
$title = "拓迈国际测试模板"; 
$file = "TwoMax Inter test templet, 
author:Matrix@Two_Max"; 
 $fp = fopen ("temp.html","r"); 
$content = fread ($fp,filesize ("temp.html")); 
$content .= str_replace ("{ file }",$file,$content); 
$content .= str_replace ("{ title }",$title,$content); 
echo $content; 
?> <?php 
$title = "拓迈国际测试模板"; 
$file = "TwoMax Inter test templet, 
author:Matrix@Two_Max"; 
 $fp = fopen ("temp.html","r"); 
$content = fread ($fp,filesize ("temp.html")); 
$content .= str_replace ("{ file }",$file,$content); 
$content .= str_replace ("{ title }",$title,$content); 
// echo $content; 
$filename = "test/test.html"; 
$handle = fopen ($filename,"w"); //打开文件指针,创建文件 
/* 
 检查文件是否被创建且可写 
*/ 
if (!is_writable ($filename)){ 
die ("文件:".$filename."不可写,请检查其属性后重试!"); 
} 
if (!fwrite ($handle,$content)){ //将信息写入文件 
die ("生成文件".$filename."失败!"); 
} 
fclose ($handle); //关闭指针 
die ("创建文件".$filename."成功!"); 
?> 
<?php 
$title = "拓迈国际测试模板"; 
$file = "TwoMax Inter test templet, 
author:Matrix@Two_Max"; 
 $fp = fopen ("temp.html","r"); 
$content = fread ($fp,filesize ("temp.html")); 
$content .= str_replace ("{ file }",$file,$content); 
$content .= str_replace ("{ title }",$title,$content); 
// 生成列表开始 
$list = ''; 
$sql = "select id,title,filename from article"; 
$query = mysql_query ($sql); 
while ($result = mysql_fetch_array ($query)){ 
$list .= ''.$result['title'].''; 
} 
$content .= str_replace ("{ articletable }",$list,$content); 
//生成列表结束 
// echo $content; 
$filename = "test/test.html"; 
$handle = fopen ($filename,"w"); //打开文件指针,创建文件 
/* 
 检查文件是否被创建且可写 
*/ 
if (!is_writable ($filename)){ 
die ("文件:".$filename."不可写,请检查其属性后重试!"); 
} 
if (!fwrite ($handle,$content)){ //将信息写入文件 
die ("生成文件".$filename."失败!"); 
} 
fclose ($handle); //关闭指针 
die ("创建文件".$filename."成功!"); 
?> <?  $fp = fopen ("temp.html","r"); 
$content = fread ($fp,filesize ("temp.html")); 
$onepage = '20'; 
$sql = "select id from article where channel='$channelid'"; 
$query = mysql_query ($sql); 
$num = mysql_num_rows ($query); 
$allpages = ceil ($num / $onepage); 
for ($i = 0;$i<$allpages; $i++){ 
if ($i == 0){ 
$indexpath = "index.html"; 
} else { 
$indexpath = "index_".$i."html"; 
} 
$start = $i * $onepage; 
$list = ''; 
$sql_for_page = "select name,filename,title from article where channel='$channelid' limit $start,$onepage"; 
$query_for_page = mysql_query ($sql_for_page); 
while ($result = $query_for_page){ 
$list .= ''.$title.''; 
} 
$content = str_replace ("{ articletable }",$list,$content); 
if (is_file ($indexpath)){ 
@unlink ($indexpath); //若文件已存在,则删除 
} 
$handle = fopen ($indexpath,"w"); //打开文件指针,创建文件 
/* 
  检查文件是否被创建且可写 
*/ 
if (!is_writable ($indexpath)){ 
echo "文件:".$indexpath."不可写,请检查其属性后重试!"; //修改为echo 
} 
if (!fwrite ($handle,$content)){ //将信息写入文件 
echo "生成文件".$indexpath."失败!"; //修改为echo 
} 
fclose ($handle); //关闭指针 
} 
fclose ($fp); 
die ("生成分页文件完成,如生成不完全,请检查文件权限系统后重新生成!"); 
?>  大致思路如此,其中如其它数据生成,数据输入输出检查,分页内容指向等可酌情在页面中加入。 <!-- main.htm --> 
<html> 
<head><title>模板示例</title></head> 
<body> 
<table><tr><td>{HEADER}</td></tr> 
<tr><td>{LEFTNAV}</td><td>{CONTENT}</td></tr> 
</table> 
</body></html> <!--
 header.htm --> <?php 
// example.php 
require('class.FastTemplate.php'); 
$tpl = new FastTemplate('.'); 
$tpl->define( array( 'main' => 'main.htm', 
'header' => 'header.htm', 
'leftnav' => 'leftnav.htm' ) ); 
// 此处的PHP代码设置$content使其包含合适的页面内容 
$tpl->assign('CONTENT', $content); 
$tpl->parse('HEADER', 'header'); 
$tpl->parse('LEFTNAV', 'leftnav'); 
$tpl->parse('MAIN', 'main'); 
$tpl->FastPrint('MAIN'); 
?> <?php 
// home.php 
require('class.FastTemplate.php'); 
$tpl = new FastTemplate('.'); 
$tpl->define( array( 'main' => 'main.htm', 
'header' => 'header.htm', 
'leftnav' => 'leftnav.htm' ) ); 
$content = "<p>欢迎访问</p> 
<img src=\"demo.jpg\"> 
<p>希望你能够喜欢本网站</p>"; 
$tpl->assign('CONTENT', $content); 
$tpl->parse('HEADER', 'header'); 
$tpl->parse('LEFTNAV', 'leftnav'); 
$tpl->parse('MAIN', 'main'); 
$tpl->FastPrint('MAIN'); 
?>  
      显然,这种方法有三个问题:我们必须为每一个页面复制这些复杂的、牵涉到模板的PHP代码,这与重复公共页面元素一样使得页面难以维护;现在文件又混合了HTML和PHP代码;为内容变量赋值将变得非常困难,因为我们必须处理好大量的特殊字符。 <?php 
<!-- home.php --> 
<?php require('prepend.php'); ?> 
<?php pageStart('Home'); ?> 
<h1>你好</h1> 
<p>欢迎访问</p> 
<img src="demo.jpg"> 
<p>希望你能够喜欢本网站</p> 
<?php pageFinish(); ?> 
?> <?php 
require('class.FastTemplate.php'); 
function pageStart($title = '') { 
GLOBAL $tpl; 
$tpl = new FastTemplate('.'); 
$tpl->define( array( 'main' => 'main.htm', 
'header' => 'header.htm', 
'leftnav'=> 'leftnav.htm' ) ); 
$tpl->assign('TITLE', $title); 
ob_start(); 
} 
function pageFinish() { 
GLOBAL $tpl; 
$content = ob_get_contents(); 
ob_end_clean(); 
$tpl->assign('CONTENT', $content); 
$tpl->parse('HEADER', 'header'); 
$tpl->parse('LEFTNAV', 'leftnav'); 
$tpl->parse('MAIN', 'main'); 
$tpl->FastPrint('MAIN'); 
} 
?>  
       pageStart函数首先创建并设置了一个模板实例,然后启用输出缓存。此后,所有来自页面本身的HTML内容都将进入缓存。pageFinish函数取出缓存中的内容,然后在模板对象中指定这些内容,最后解析模板并输出完成后的页面。 <?php 
/* 
* 文件名:index.php 
*/ 
require "conn.php"; 
$query = "select * from news order by datetime desc"; 
$result = mysql_query($query); 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=??????"> 
<title>NEWS</title> 
</head> 
<body> 
<table width="500" border="1" align="center"> 
<tr> 
<td>标题</td> 
<td width="200">发布时间</td> 
</tr> 
<? 
while($re = mysql_fetch_array($result)){ 
?> 
<tr> 
<td><a href="<?= $re["newsid"].".html"?>"><?= $re["title"]?></a></td> 
<td><?= $re["datetime"]?></td> 
</tr> 
<? 
} 
?> 
<tr> 
<td> </td> 
<td><a href="addnews.php">添加新闻</a></td> 
</tr> 
</table> 
</body> 
</html> <?php /* 文件名:AddNews.php 简易动态添加生成静态新闻页面 # # 表的结构 `news` # CREATE TABLE `news` ( `newsid` int(11) NOT NULL auto_increment, `title` varchar(100) NOT NULL default '', `content` text NOT NULL, `datetime` datetime NOT NULL default '0000-00-00 00:00:00', KEY `newsid` (`newsid`) ) TYPE=MyISAM AUTO_INCREMENT=11 ; */ ?>
function gen_static_file($program, $filename) 
{ 
$program 1= "/usr/local/apache/htdocs/php/" . $program; 
$filename1 = "/usr/local/apache/htdocs/ static_html/" . $filename; 
$cmd_str = "/usr/local/php4/bin/php " . $program1 . " } " . $filename1 . " "; 
system($cmd_str); 
echo $filename . " generated.〈br〉"; 
} function gen_college_static () 
{ 
for ($i = 0; $i 〈= 32; $i++〉 
{ 
putenv("province_id=" . $i); //*.php文件从数据库取数据时要用到。 
$filename = " college_static". $i . ".html"; 
gen_static_file("college_static.php", $filename); 
} 从这个函数我们可以看到通过调用函数gen_static_file(),
 college_static.php经过静态化,变成了33个静态页面college.static0.html~college.static33.html,其中$filename会随着$I的变化而变化。当然也可以从数据库中直接取值,来控制生成的静态页面的个数和名字,其他程序对生成的静态页面的调用应和静态页面的命名规则一致。PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程
原文:http://blog.csdn.net/txl199106/article/details/40457821