`
zhangchibang
  • 浏览: 345103 次
社区版块
存档分类
最新评论

总结下现在我知道的php生成静态页面的办法

    博客分类:
  • PHP
阅读更多
   <?php
    $title = "http://";
    $file = "TwoMax Inter test templet,<br>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 .= '<a href='.$root.$result['filename'].'   target=_blank>'.$result['title'].'</a><br>';
    }
    $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."成功!");
  ?>

 首先说原理。某驼查了那么多资料,发现不管用什么方法,原理都是一样的。就是用程序读取相应的数据来替换模版中的变量,然后生成静态页。php中主要用到的就是要用到fread()和fwirte()。而静态页面生成了之后,就会牵扯到修改的问题。这里可以用到正则匹配的方法来替换模版中改变的部位。不过此种方法太麻烦,驼驼推荐的方法是直接把原来生成的模版砍掉,重新生成,呵呵,真正的一了百了。

 

 

  还需要说明的一点就是,这种生成静态页面的方法一般都用于那些变化不是很频繁的页面,比如信息的最终页面。而针对列表页,如果信息更新不是很频繁的话,也是可取的。现在网上流行好多可以生成静态页面的blog或者论坛程序,都是通过手动点击后台“生成html页”的按钮来“半自动”生成html的。而对一些信息量非常大的门户网站,则行不通。因为静态页之所以叫“静态”,是因为其不可自动改变。如果信息列表每天更新100次,那么静态的列表页就要重新生成100次。如果我有10个这样的栏目,那想想也够吐血的了。

 

 

 

  好了,闲话少说,现在来看看实际的程序演示:

 

 

 

  first:是一个利用ob函数来做的咚咚,代码比较简单,效率相对也高一些。某驼从某个

 

         高人处得到的源码,做了一些改动
 <?php
    ob_start();
    @readfile("http://localhost/?package=pricab&place_port=4");
    $text = ob_get_flush();


    $myfile = fopen("myfile.html","w");


    $text  = str_replace ("{counent}",$string,$text);
    fwrite($myfile,$text);
    ob_clean();
  ?>
 
因为就算要生成静态页面,动态读取那部分也是要保留的,把数据插入数据库后,把url传递给readfile函数,然后读入缓存,fwrite一下就可以生成静态页面,这个是驼驼最欣赏的一种作法。代码行数最少,效率最高。驼驼这边要求http://localhost/?package=pricab&place_port=4是一个裸页,也就是单纯的内容,没有头,尾,菜单。这样才能比较自由的定制自己的模版myfile.html。如果仅仅是要求生成静态页的话,
ob_start();
    @readfile("http://localhost/?package=pricab&place_port=4");
    $string = ob_get_flush();

    $myfile = fopen("myfile.html","w");
    fwrite($myfile,$string);
    ob_clean();
 
就可以over了
 

   second:普通生成静态html页。

   这种作法就是按部就班的来做,fread进来页面,然后str_replace替换

   首先是创建最终内容页:

   $title = "http://siyizhu.com测试模板";
   $file = "TwoMax Inter test templet,<br>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);

   $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 = "http://";
    $file = "TwoMax Inter test templet,<br>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 .= '<a href='.$root.$result['filename'].'   target=_blank>'.$result['title'].'</a><br>';
    }
    $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."成功!");
  ?>
 
 关于翻页:
  如我们指定分页时,每页20篇。某子频道列表内文章经数据库查询为45条,则,首先我们通过查询得到如下参数:1,总页数;2,每页篇数。第二步,for ($i = 0; $i < allpages; $i++),页面元素获取,分析,文章生成,都在此循环中执行。不同的是,die ("创建文件".$filename."成功!";这句去掉,放到循环后的显示,因为该语句将中止程序执行。例:
<?php
 $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 .= '<a href='.$root.$result['filename'].' target=_blank>'.$title.'</a><br>';
 }
 $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 ("生成分页文件完成,如生成不完全,请检查文件权限系统后重新生成!");
?>

  

 

 

third:smarty模版生成静态页面

驼驼是用smarty模版的,smarty自己有一个fetch函数,其功用有点类似于fread()可以用来生成静态的页面.

这个例子大家想必看起来眼熟,对,smarty手册中关于fetch函数的例子,hoho  某驼借用一下,比竟官方的例子总是很经典的嘛!

<?php
include("Smarty.class.php"
);
$smarty = new Smarty
;

$smarty->caching = true
;

// only do db calls if cache doesn't exist
if(!$smarty->is_cached("index.tpl"
)) {

  
// dummy up some data
  
$address = "245 N 50th"
;
  
$db_data
= array(
               
"City" => "Lincoln"
,
               
"State" => "Nebraska"
,
               
"Zip" =>
"68502"
             
);

  
$smarty->assign("Name","Fred"
);
  
$smarty->assign("Address",$address
);
  
$smarty->assign($db_data
);

}

// capture the output
$output = $smarty->fetch("index.tpl"
); //这个地方算是关键

// do something with $output here

echo $output
; //hoho  看到output的结果了吧  然后呢?fwrite一下,我们就得到我们所要的结果了。

 

$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);
fclose($fp);



?>
?>

分享到:
评论

相关推荐

    php静态 页面生成

    2. 执行需要生成静态页面的PHP代码。 3. 定义静态HTML文件的名称。 4. 写入缓冲区内容到静态HTML文件。 5. 关闭文件。 6. 返回缓冲区内容给浏览器。 这种方法虽然简单有效,但也有其局限性,例如无法自动更新静态...

    php生成静态页面源码

    总结来说,PHP生成静态页面是将动态网站转变为静态HTML的一种策略,它涉及到了PHP模板引擎、数据库交互、文件操作以及URL管理等多个技术点。通过这种技术,可以提升网站性能,改善用户体验,同时也方便了搜索引擎的...

    把php生成静态(html)页面程序类

    把php生成静态(html)页面程序类 private $template; //模版 private $file_name; //文件名 private $array; //数据数组 function __construct($file_name, $template, $array) { //构造类 $this-&gt;...

    php 生成静态文件

    在PHP开发中,生成静态文件是一种常见的优化策略,它可以提高网站的访问速度和降低服务器压力。标题中的"php 生成静态文件"指的是使用PHP编写一个类或者脚本来动态生成HTML等静态文件,以便后续的用户请求可以直接...

    PHP生成静态页面小程序 v1.1.zip

    至此,关于PHP生成静态页面的原理都在程序里面了,我把一些核心说明也写在了博客上面,有不懂的可以参考一下。   因为考虑到PHP新手用户针对PHP简单源码的需求,这个版本除了在生成静态原理核心代码上有所加强外...

    把php生成静态(html)页面程序类.zip

    总结来说,“把php生成静态(html)页面程序类.zip”提供的资源是一个实用的PHP工具,它帮助开发者将动态内容转换为静态HTML,从而提升网站的性能和用户体验。通过理解其工作原理和如何集成到现有项目中,开发者可以更...

    PHP生成静态页面教程

    ### PHP生成静态页面教程知识点详解 ... ... - **动态页面的工作流程**...总结,使用PHP生成静态页面能够有效提升网站性能和用户体验。虽然存在一定的开发成本,但对于大型或高流量的网站来说,这种方式是非常值得推荐的。

    php生成静态文件 php生成html文件

    总结来说,PHP生成静态HTML文件是通过输出缓冲区技术实现的,它能够帮助我们将动态生成的内容批量写入文件,提升网站性能,优化SEO,并降低服务器压力。通过结合其他PHP函数和工具,我们可以构建更复杂、高效的静态...

    PHP生成静态页面(ob_start+smarty)生成

    总结起来,PHP生成静态页面的核心是利用`ob_start()`开启缓冲,通过Smarty处理和渲染模板,然后使用`ob_get_contents()`获取缓冲区的HTML内容,最后调用文件操作函数将内容写入静态HTML文件。这种方式虽然相对复杂,...

    PHP生成静态页面小程序

    在这个"PHP生成静态页面小程序"中,我们探讨的是如何利用PHP技术将原本动态生成的网页转换为HTML静态页面,以提高网站性能,减轻服务器负担,并优化搜索引擎排名。 首先,我们要理解动态页面与静态页面的区别。动态...

    自动生成静态页面

    自动生成静态页面是一种提高网站性能和安全性的重要技术。在现代Web开发中,静态页面是指HTML、CSS和JavaScript等文件在用户请求之前就已经存在于服务器上,而不是由动态脚本(如PHP、Python或Ruby)实时生成。这种...

    php生成全国多城市分站静态页面代码

    生成静态页面的主要优点在于提高网站的加载速度和搜索引擎优化(SEO)。静态HTML页面无需服务器执行脚本,可以直接由Web服务器发送给客户端,减少了服务器负载。同时,搜索引擎更喜欢静态页面,因为它们的结构清晰,...

    最简单的php生成静态页的类

    首先,我们需要理解PHP生成静态页面的基本原理。在动态网站中,每次有用户访问时,服务器都会运行PHP脚本来生成HTML页面并发送给浏览器。而在静态页面生成技术中,PHP脚本会在用户请求之前或后台自动运行,将动态...

    PHP生成静态页 整站源码 适合新手

    当我们谈论"PHP生成静态页"时,我们指的是通过PHP脚本动态生成HTML页面,然后将其保存为静态文件,以便后续的用户请求可以直接访问这些预先生成的页面,而无需每次请求都执行PHP代码。这种方法可以提高网站的加载...

    php生成静态

    总的来说,PHP生成静态页面是一种优化网站性能的技术,它结合了动态内容的灵活性和静态页面的高效性。通过合理地运用这一技术,开发者可以提升网站的用户体验,同时降低服务器资源的消耗。在实际应用中,需要根据...

    动态生成静态HTML

    - 更新策略:当动态数据发生变化时,需及时重新生成静态页面。 - 缓存管理:利用缓存技术减少不必要的动态生成,提高效率。 通过学习和实践动态生成静态HTML的C#源码,不仅可以提升个人的Web开发技能,还能为实际...

    java生成静态页面的思路

    在Java编程领域,生成静态页面是一项常见的任务,尤其在构建网站、文档系统或者API文档时。这个过程通常涉及将动态内容转化为HTML格式的静态文件,以便于提高网站的加载速度和减少服务器负担。本篇文章将深入探讨...

    通过URL生成静态页面

    在IT行业中,生成静态页面是一种常见的优化网站性能和提高用户体验的技术。标题“通过URL生成静态页面”揭示了这个话题的核心,即利用特定的URL来创建HTML文件,这些文件不依赖服务器端的动态处理,而是预先生成并...

Global site tag (gtag.js) - Google Analytics