PHP页面静态化:真静态的两种方案

----------------------------------------------------------------------------------------------

方案1:如果静态文件存在,且生成时间30秒内,直接返回静态页面(有时间延迟)/*|------------------| <www.chenwei.ws>|------------------*/header(‘content-type:text/html;charset=utf-8‘);
$id = $_GET[‘id‘] ? intval($_GET[‘id‘]) : ‘‘;
if($id === ‘‘) die(‘请输入要查询的新闻id!‘);
$html_file = "news-id-".$id.".html";

//1.主要代码
if(file_exists($html_file) && filemtime($html_file) + 30 >= time())
{
    echo ‘静态页面:‘;
    echo file_get_contents($html_file);exit;
}

//这里也可以使用DB工具类
$con = mysql_connect(‘localhost‘, ‘root‘, ‘123456‘);
if(!$con)
{
    die(‘连接失败!‘);
}
mysql_select_db(‘testdb‘, $con);
$sql = "select * from bo_question where question_id = $id";
$res = mysql_query($sql, $con);
if($row = mysql_fetch_assoc($res))
{
    ob_start();//2.启动ob缓存
    header(‘content-type:text/html;charset=utf-8‘);
    echo ‘<head><meta http-equiv="content-type" content="text/html;charset=utf-8" /></head>‘;
    echo ‘<table style="border:1px solid red;" cellspacing="0" width="400px" height="200px">‘;
    echo ‘<tr><td>问题详细内容</td></tr>‘;
    echo "<tr><td>标题:{$row[‘question_title‘]}</td></tr>";
    echo "<tr><td>详细:{$row[‘question_detail‘]}</td></tr>";
    echo ‘</table>‘;
    $ob_str = ob_get_contents();
    //3.把ob_str保存到一个静态文件页面,取文件名有讲究:1.唯一标识该新闻 2.利于seo
    file_put_contents("news-id-".$id.".html", $ob_str);    //关闭数据库连接(非必须; 非长连接下,脚本执行完会自动关闭)   mysql_close($con);
}else{
    echo ‘没有查询到资源!‘;
}

@黑眼诗人


方案2:使用模板替换技术(没有时间延迟)/*|------------------| <www.chenwei.ws>|------------------*/
$oper = $_POST[‘oper‘];//添加操作
if($oper === ‘add‘)
{
    $title = $_POST[‘title‘];
    $content = $_POST[‘content‘];

    //如果严格按MVC,这里应该调用model了
    $con = mysql_connect(‘localhost‘, ‘root‘, ‘123456‘);
    if(!$con)
    {
        die(‘连接失败!‘);
    }
    mysql_select_db(‘news‘, $con);
    $sql = "insert into question(null, ‘$title‘, ‘$content‘, ‘‘)";
    if(mysql_query($sql, $con))
    {
        //1.生成静态文件
        $id = mysql_insert_id();
        $html_filename = ‘news-id‘.$id.‘.html‘;
        $html_fp = fopen($html_filename, ‘w‘);

        //2.把模板文件读取(news.html)
        $fp = fopen(‘news.tpl‘, ‘r‘);
        //r 只读方式打开; r+ 读写方式打开; w 写入方式打开:文件内容将被清空!如果文件不存在将创建; a 以追加的方式打开

        //3.循环读取
        //如果没有读到文件的最后,就一直读取
        while(!feof($fp))
        {
            //一行行读
            $row = fgets($fp);
            //把占位符替换掉 => 可以自定义完整的替换规则函数
            $row = str_replace(‘%title%‘, $title, $row);//如果不重新赋值$row, $row值不会改变
            $row = str_replace(‘%content%‘, $content, $row);

            fwrite($html_fp, $row);//4.将内容写入静态文件
        }
        //5.文件必须关闭
        fclose($html_fp);
        fclose($fp);

        echo "添加成功。<a href=‘newslist.php‘>点击查看新闻!</a>";
    }
    else
    {
        die(‘添加失败!‘);
    }
}
//此时在新闻列表内,点击查看详情的链接,可以改成生成的静态页面地址,直接进入静态文件。

//news.tpl模板文件
/*
<html>
    <head>
        <meta charset="utf-8" />
        <title>%title%</title>
    </head>
    <body>
        <h1>%title%</h1>
        <pre>%content%</pre>
    </body>
</html>
*/

---------------------------------------------------------------------------------------------

PHP页面静态化:真静态的两种方案

时间: 2024-10-12 15:54:45

PHP页面静态化:真静态的两种方案的相关文章

静态化 - 真静态技术

静态化,真静态技术. 采用php的ob缓存技术实现,结合手写模版引擎代码. 一个小实例,新闻管理系统. 项目说明: 为了便于SEO,要将新闻的页面做成静态化的页面.网址是静态的html,内容也是静态的.(如果只是网址是静态的,内容是动态的,就是伪静态,一般网站使用的都是伪静态技术股.) 网址静态化(点击之后跳转到静态化的网页): 项目结构介绍: admin:后台管理文件夹. index.html:后台管理首页. newsadd.php:后台添加新闻页面. newsupdate.php:后台修改新

静态化 - 真静态+伪静态 - 总结

1.真静态访问效率高,利于seo,可以减少对数据库的操作.但会占用大量的磁盘2.伪静态    2.1:可以方便实现对搜索引擎的优化.    2.2:占用空间比较小    2.3:通过生成不同的View-id2.html可以实现内容的变化.    2.4:有效的防止了注入攻击3.如果一个网页会被频繁的访问(比如百万级别),通过该网页每次都会都会去操作数据库,可以考虑使用真静态(建议有针对性的使用),如果一个网页为了实现对搜索引擎的优化,提高网站安全性,使用伪静态. 真静态和伪静态的选择:1.什么情

PHP 页面静态化/纯静态化/伪静态化

概念 PHP静态化分为:纯静态化 和 伪静态化:纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新生成一张相同的网页,优点就是减小服务器开销, 局部静态化:是生成的静态文件中,有局部的数据还是通过ajax技术动态获取的: 完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的html页面 伪静态化:其实还是动态访问,其实质是动态生成数据,你访问的网址类似于"http://yourhost,c

apache两种方案三种方式实现反向代理tomcat

目录 1.概述 2.方案一:以proxy_module方式反向代理 3.方案二:以mod_jk方式反向代理 4.总结 1.概述 在前一博客(http://zhaochj.blog.51cto.com/368705/1639740)中实现了tomcat的在standalone模式下的部署,这样tomcat就身兼职两职,一方向要对http的请求作出响应,又要处理JSP程序,而处理http请求不是tomcat的强项,所以这样的请求就交给httpd.nginx这样的的专业处理http请求的套件来处理,而

【SSH进阶之路】一步步重构容器实现Spring框架——解决容器对组件的“侵入式”管理的两种方案--主动查找和控制反转(九)

目录 [SSH进阶之路]一步步重构容器实现Spring框架--从一个简单的容器开始(八) [SSH进阶之路]一步步重构容器实现Spring框架--解决容器对组件的"侵入式"管理的两种方案--主动查找和控制反转(九) [SSH进阶之路]一步步重构容器实现Spring框架--配置文件+反射实现IoC容器(十)(未更新) [SSH进阶之路]一步步重构容器实现Spring框架--彻底封装,实现简单灵活的Spring框架(十一)(未更新) 对于IOC的原理,我们曾经写过一篇博文,[SSH进阶之路

HBase存储时间相关多列数据的两种方案

所谓“时间相关多列数据”指的是同一个Key下具有多个属性数据,并且这些数据与时间具有相关性,多数场景是该Key对应在不同时间时刻的行为数据.在实际应用中,这类数据很多,例如电子商务网站上用户最近一段时间浏览的宝贝集合.访问的URL列表等. 使用HBase存储此类数据时,有以下两种常用的方案: 多行单列 表结构设计 Row Key:用户标识ID + (Long.MAX_VALUE - timestamp) Column Family:’cf’ Column Qualifier:’’ Value:宝

Linux下实现秒级定时任务的两种方案

Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date* * * * * sleep 20;

Linux系统中修改用户名的两种方案整理

在安装系统的时候,经常会无意识的随便起个用户名,后面如果发现该用户名不好或因为环境需要须重起个用户名,经过查找资料和亲自测试发现有两种方案可选:手动修改和使用usermod等命令自动修改. 方案一:手动修改各个关联用户文件 以root身份登录系统文件的修改需要root权限,这里不管是原root用户登录还是普通用户切换到root下都可以,只要有修改权限就行. 修改/etc/passwd这个文件中的用户名部分.用户组部分和主目录部分如我本来的用户名为hadoop,现在想修改为seed,则要修改下面部

java调用matlab函数接口的两种方案

Java 调用matlab 函数接口 Java调用matlab函数接口有两种方式: l 一种是通过matlab把函数打成jar包: l 一种是把matlab编译成dll后,用C++再封装成java能支持的数据类型的dll. 注意:不论用这两种方式中的哪一种,最终部署时都需要matlab环境(MCR,在matlab安装路径下有). 1. 方式一:matlab直接打jar包 1.1. 利用matlab自带工具打jar包 1.1.1. 建立jar包 在matlab的Commond Window中输入d