PHP页面静态化

动态页面
静态页面

关于优化页面响应时间

  • 动态页面静态化
  • 优化数据库
  • 使用负载均衡
  • 使用缓存

动态页面静态化不适用于内容经常变动的应用,例如微博…

动态程序

  • 连接数据库服务器或者缓存服务器
  • 获取数据
  • 填充到模板
  • 呈现给用户

关于动态URL地址设置静态形式

这里写图片描述

  • c代表控制器
  • a代表index的方法
  • 加载之后仍然是动态页面,伪静态

纯静态化案例实现

buffer其实就是缓冲区,一个内存地址空间,主要用于存储数据区域

输出流程

这里写图片描述

//php.ini
ob_start();//开启缓冲区,当php.ini中output_buffering未开启的时候,可以采用这种方法

output_buffering = 4096

ob_get_contents();//获取缓冲区的内容

php如何实现页面纯静态化

  • file_put_contents()函数
  • fwrite—写入文件
  • 使用PHP内置缓存机制实现页面静态化-output_buffering
  • ob
ob_start //打开输出控制缓冲
ob_get_contents //返回输出缓冲区内容
ob_clean //清空(擦掉)输出缓冲区
ob_get_clean //得到当前缓冲区的内容并删除当前输出缓冲区
file_put_contents('生成文件名称(自定义)''写入内容');

纯静态

//1.连接数据库,然后从数据库里面获取数据
//2.把获取到的数据填充到模板文件里面
//3.需要把动态的页面转化为静态页面,生成纯静态化文件

单例模式连接数据库

  • 构造函数需要标记为非public,防止外部使用new操作符创建对象,单例类不能在外部实例化,只能在内部,这样进行访问控制
  • 拥有一个保存类的实例的静态成员变量
  • 拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
<?php
/**
* 数据库链接封装
* 代码注释(done)
*/
class Db {
    // 存储类的实例的静态成员变量
    static private $_instance;
    // 数据库链接静态变量
    static private $_connectSource;
    // 链接数据库配置
    private $_dbConfig = array(
        'host' => '127.0.0.1',
        'user' => 'root',
        'password' => '',
        'database' => 'cms',
    );

    private function __construct() {
    }

    /**
     * 实例化
    */
    static public function getInstance() {
        // 判断是否被实例化
        // 访问实例的公共的静态方法
        if(!(self::$_instance instanceof self)) {
        //本类的属性$_instance是否是本类的实例
        //self指的是本类
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    /**
    * 数据库链接
    */
    public function connect() {
        if(!self::$_connectSource) {
            // 数据库链接
            self::$_connectSource = @mysql_connect($this->_dbConfig['host'], $this->_dbConfig['user'], $this->_dbConfig['password']);  
            //@符号为阻止警告输出

            if(!self::$_connectSource) {
                // 抛出异常处理
                throw new Exception('mysql connect error ');
            }
            // 选择一款数据库
            mysql_select_db($this->_dbConfig['database'], self::$_connectSource);
            // 设置字符编码
            mysql_query("set names UTF8", self::$_connectSource);
        }
        // 返回资源链接
        return self::$_connectSource;
    }

}

//test
/**
$connect = Db::getInstance()->connect();

$sql = "select * from 表名";
$result = mysql_query($sql,$connect);
echo mysql_num_rows($result);
var_dump($result);
*/
//1.链接数据库,从数据库里面获取数据
//2.把获取到的数据填充到模板文件里面
//3.需要把动态的页面转化为静态页面,生成纯静态化文件

<ul>
<?php foreach($news as $k = >$v)

如何出发系统生成纯静态化页面

静态文件.shtml
页面添加缓存时间
filemtime()获取文件修改时间
time()-filemtime()<设定时间

手动触发

crontab定时扫描程序

important

局部动态化案例

ajax技术

  • 编写接口(api)
  • ajax请求接口操作
//jquery方式调用ajax
$.ajax({
    url:'',
    type: 'get',
    dataType:'json',
    error:function(){
    },
    success:function(result){
    },
});

伪静态

PHP处理伪静态

/*
通过正则表达式去分析伪静态URL地址

eg:
http://state.com/newsList.php?type=2&category id=1

伪静态地址
http://state.com/newsList.php/2/1.html
2=》type=2 1=>category_id=1

*/

//正则表达式
preg_match('/^\/(\d+)\/(\d+).html/',,)

Web服务器rewrite配置

  • 虚拟域名配置
  • httpd_vhosts.conf配置文件配置相关信息

AllowOverride None

修改为

AllowOverride ALL
  • 终端执行sudo a2enmod rewrite
  • 或者使用 ln 命令
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
  • 最后重启Apache服务器

这里写图片描述


//伪静态配置方案
RewriteEngine on
/*
    1.d代表目录,f代表文件
    2.该设定是在网站文件目录下,如果有相同的目录,访问存在目录,而不是访问伪静态文件
*/
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-f
Rewrite ^/detail/([0-9]*).html$/detail.php?id=$1

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值