单例模式的数据库连接和PHP实现页面静态化的第一种方法
来源:互联网 发布:淘宝时尚女装广告语 编辑:程序博客网 时间:2024/04/30 08:36
数据库test中数据表account内容
单例模式的数据库连接类
db.php
<?php//单例模式的数据库连接class DB { //存储实例的静态成员变量 static public $_instance; //数据库连接静态变量 static public $_connectSource; //连接数据库配置,由于前几天学习了PDO,这里就使用PDO private $_dbConfig = array( 'host' => 'localhost', 'user' = > 'root', 'password' => '', 'database' => 'test' ); //禁止外部实例化 private function __construct() { } //实例化 public static function getInstance() { if(self::$_instance instanceof self) { return self::$_instance; } self::$_instance = new self(); return self::$_instance; } //数据库连接 public function connect() { //如果不存在数据库连接就创建一个 if(!self::$_connectSource) { try { $dsn = 'mysql:host='.$this->_dbConfig['host'].';dbname='.$this->_dbConfig['database']; $username = $this->_dbConfig['user']; $password = $this->_dbConfig['password']; self::$_connectSource = new PDO($dsn, $username, $password); }catch(PDOException $e) { echo $e->getMessage(); } } return self::$_connectSource; }}?>
PHP实现页面静态化的例子
其实原理很简单,这里用到了几个函数,ob_start(),ob_get_contents(),file_put_contents(),ob_start()是开启缓冲区的意思,ob_get_contents()是得到缓冲区内容的意思,file_put_contents()是把内容放到一个文件里的意思,如果不理解缓冲区的意思,可以自行百度一下,我理解的缓冲区就是,当我们要在PHP中输出一些数据显示出来时,会先经过缓冲区,而我们可以从缓冲区中得到这些内容。所以实现纯静态页面的方法就是,获取缓冲区中的内容放到一个静态文件中,并在入口中根据需求设置访问动态文件还是静态文件,这种方法一般用于数据不经常变化的动态页面中。下面就来具体的实现这个功能。
static.php
<?php//1.使用刚才写的数据库连接类连接数据库//2.把获取到的数据填充到模板文件中//3.把页面转化为静态文件//如果我们本地有这个静态文件并且这个文件生成的时间小于5分钟那么就去访问这个静态文件,filemtime()用来获取文件的最后修改时间if(is_file('./static.shtml') && (time() - filemtime('./static.shtml')) < 300) { //这里很简单,直接把静态文件拿过来 require_once('./static.shtml');}else {//如果不存在这个静态文件,或者这个静态文件的最后修改时间距离现在已经超过了5分钟,那么就访问动态获取数据的模板,然后更新static.shtml文件的内容 //连接数据库 header('Content-Type:text/html;charset=utf-8'); require_once('./db.php'); $connect = DB::getInstance()->connect(); //执行查询操作 $sql = 'select * from account'; $res = $connect->query($sql); //开启缓冲区 ob_start(); //ob_get_clean()这个函数可以获取缓冲区的内容并清空,一会我会测试一下ob_get_clean()和ob_get_contents()的 require_once('./static_show.php'); //把缓冲区的内容写入到静态文件 file_put_contents('./static.shtml', ob_get_contents());}?>
动态展示模板文件static_show.php
<?php foreach($res as $row) { echo '名字:'.$row['name'].'<br/>'; echo '钱包:'.$row['money'].'<br/>'; echo '<hr/>'; }?>
当我们访问static.php的时候,因为没有static.shtml,所以会先执行else的操作,展示在static_show.php并生成static.shtml文件
如果这时候我把数据库修改了,zjp的money改为800,然后再访问static.php会展示什么样的内容呢,没错,zjp的钱包还是600,为什么呢,因为它执行了if中的内容,直接显示了static.shtml,我们可以看一下static.shtml是什么样的:
如果5分钟过后再访问staitc.php呢,会显示什么呢,没错!zjp的钱包就变成800了,并且static.shtml的内容会更新为zjp的钱包是800。
测试ob_get_clean()和ob_get_contents()
测试方法很简单:
<?php$test = 'Hello World!';//开启缓冲区ob_start();//测试ob_get_contents()echo $test;echo ob_get_contents(); //输出结果:Hello World!Hello World!//测试ob_get_clean()echo $test;echo ob_get_clean();//输出结果:Hello World!echo $test;ob_get_clean();//输出结果:?>
这样就可以很清楚的看出来了,当我们使用了ob_get_clean()的时候,输出语句并不会输出任何值,因为ob_get_clean()会获取缓冲区中的内容并将缓冲区清空。所以当我们echo
实际上,ob_get_clean()函数相当于执行了,ob_get_contents()和ob_end_clean()。
- 单例模式的数据库连接和PHP实现页面静态化的第一种方法
- 单例模式的一种实现方法
- 单例模式的一种实现方法
- 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (四):一种更好的单例实现方法(静态内部类)
- 数据库连接池 单例模式的实现
- 实现静态页面的一种非常简单的方法
- C++单例模式的一种实现
- 【怎样写代码】确保对象的唯一性 -- 单例模式(五):一种更好的单例实现方法(静态内部类)
- 一种单例的实现方法
- php实现伪静态化页面的两种方法
- PHP实现HTML页面静态化的方法
- 单例模式和静态方法的比较
- 单例模式(4)- 一种更好的单例实现方法
- 一种实现数据库连接池的方法(JAVA)
- 一种实现数据库连接池的方法(JAVA)
- 数据库连接池之外观模式+单例模式的实现
- 生成静态页面的一种方法
- php单例模式的简单实现方法
- 最大差值问题
- 大家好!
- Java入门 第二季第一章 类和对象
- 一份简短的关于 PHP 容易混淆知识点的实用指南
- Android 动画详解(一)
- 单例模式的数据库连接和PHP实现页面静态化的第一种方法
- 出口跨境电商的路在何方?
- SVN 在线代码托管工具
- Android群侠传第三章阅读笔记(二)
- Unity Animator 动画没切换
- [C#] 静态方式实现的单例是不是懒汉模式?
- Sublime Text快捷键
- Unreal Engine 4 —— Physically Based Materials
- 用wget命令整站下载