jacking
级别: 论坛版主
UID: 2
精华: 2
发帖: 295
威望: 309 点
金钱: 2990 RMB
贡献值: 0 点
注册时间:2007-05-17
最后登录:2008-12-31
楼主  发表于: 2007-08-31 13:56

 PHP动态网页实现静态HTML技术的方法实现


PHP动态网页实现静态HTML技术代码实例

<?php
/*____生成HTML文件________beign__________*/
if ($make_html)
{
        $buffer = ob_get_flush();
        if ($go_html)//是否直接转到HTML文件显示还是PHP读得内容输出(0:php读内容输出1:直接转)
        {
                /*__处理因生成了HTML文件而产生的种径问题______begin_______*/
                $search = array(
                        "/(src=|action=|href=|ajaxRead\()\"/ie",
                        "/\.\.\./e",
                        "/\.\/\./e",
                        "/\.\.\/http:\/\//ies",
                        "/\.\.\/#/",
                        "/\'\.\'/e",
                        "/\.\.\/javascript:/ies");

                $replace = array(
                        "'\\1\"../'",
                        "'..'",
                        "'.'",
                        "'http://'",
                        "#",
                        "'\'..\''",
                        "'javascript:'");
                $buffer = preg_replace($search, $replace, $buffer);
                /*___处理因生成了HTML文件而产生的种径问题_____end_____*/
        }

        $fp = fopen(HTML_FILE, "w");
        if ($fp)
        {
                fwrite($fp, $buffer);
                fclose($fp);
        }
}
/*_______生成HTML文件_________beign________*/
?>

<?php
ob_start();
/*____判断是否已生成了HTML文件,若生成了则跳转到HTML页面___begin_____*/
$qstring = isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : "";
if ($qstring)//程序加了GET请求的处理
{
        $qstring = str_replace("=", "", $qstring);
        define("HTML_FILE", "./h/{$efilename}-{$qstring}.html");
}
else
{
        define("HTML_FILE", "./h/{$efilename}.html");
}
if (file_exists(HTML_FILE))
{
        $lcft = filemtime(HTML_FILE);//last create file time
        if (($lcft + 3600) > time())//判断上次生成HTML文件是否以过去1时间,若没有才直接输出文件内容
        {
                if ($show_html)//是否以HTML静态页面展示(0不以HTML展显1以html展显)
                {
                        if ($go_html)//是否直接转到HTML文件显示还是PHP读得内容输出(0:php读内容输出1:直接转)
                        {
                                header("Location: " . HTML_FILE);//直接转
                        }
                        else
                        {
                                echo(file_get_contents(HTML_FILE));//读出展显
                        }
                        exit(0);
                }
        }
}
/*___判断是否已生成了HTML文件,若生成了则跳转到HTML页面_____end_____*/
?>

<?php
require("woods-thtml.php");//生成HTML处理头
//if (count($_GET) < 1 && count($_POST) < 1){require("woods-thtml.php");}//生成HTML处理头

require("{$exec_file}");//注册语言定义文件
foreach ($lang as $key => $value)
{
        $atpl[strtoupper($key) ."_LANG"] = $value;
}
/*__________列表常识向上走的项_______end_______*/
include("woods-templates.php");
$tpl = new WoodsTpl("./templates/");
$tpl->require_tpl("header.html");
$tpl->set_file();
$tpl->block("EBCORP", $scorp);
$tpl->block("NEWS", $news);

$tpl->block("PRODUCT", $product);
$tpl->block("EBPNAME_MSG", $spname);

$tpl->block("LORE", $lore);
$tpl->require_tpl("footer.html");
$tpl->parse($atpl, true);
$tpl = NULL;
/*_____模板操作________end_____________*/
require("woods-bhtml.php");//生成HTML处理尾
?>
phpma
级别: 管理员
UID: 1
精华: 6
发帖: 270
威望: 318 点
金钱: 2820 RMB
贡献值: 0 点
注册时间:2007-05-17
最后登录:2008-12-27
1楼  发表于: 2007-11-21 21:02
PHP实现静态发布的方法浅谈
现在很多网站都要生成html文件,以便于搜索引擎收录,这里介绍一片php生成html的一篇文章
如今很多网站都是静态发布的,PHP当然也可以方便的实现静态发布喽,具体的实现方法很多,下面我就说说我会的两种方法。
方法一:ob_get_contents()
这是一种很方便的方法,也是很常用的方法,实现原理是:首先打开缓存,然后创建相应的静态页文件,写入缓存的内容,清空缓存。
示例:
复制PHP内容到剪贴板 PHP代码:
<?php
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(); 复制PHP内容到剪贴板 PHP代码:
<?php
$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() 复制PHP内容到剪贴板 PHP代码:
<?php
$filemodel="supply.php";
$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中的内容将会显示不出来
我仅仅是给出了最简单的方法,在实际应用中,您可以写一个生成静态页的类,在类中加入相应的异常处理,该文件仅仅给出一个示例。