您的位置:首页 > 编程语言 > PHP开发

PHP页面静态化

2016-01-08 09:16 671 查看
动态页面

静态页面

关于优化页面响应时间

动态页面静态化

优化数据库

使用负载均衡

使用缓存

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

动态程序

连接数据库服务器或者缓存服务器

获取数据

填充到模板

呈现给用户

关于动态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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: