采用 PEAR 来缓冲 PHP 程序(二),采用 PEAR 来缓冲 PHP 程序(二)
【 tulaoshi.com - PHP 】
最后,我们来定制一个应用,综合的来解释 PEAR 缓冲机制的整体框架。
我们定义一个叫做 MySQL_Query_Cache 的类,缓冲 SELECT 的查询结果。
我们首先定义类的变量:
<?php
require_once 'Cache.php';
class MySQL_Query_Cache extends Cache {
var $connection = null;
var $expires = 3600;
var $cursor = 0;
var $result = array();
function MySQL_Query_Cache($container = 'file',
$container_options = array('cache_dir'= '.',
'filename_prefix' = 'cache_'), $expires = 3600)
{
$this-Cache($container, $container_options);
$this-expires = $expires;
}
function _MySQL_Query_Cache() {
if (is_resource($this-connection)) {
mysql_close($this-connection);
}
$this-_Cache();
}
}
?
function connect($hostname, $username, $password, $database) {
$this-connection = mysql_connect($hostname, $username, $password) or trigger_error('数据库连接失败!', E_USER_ERROR);
mysql_select_db($database, $this-connection) or trigger_error('数据库选择失败!', E_USER_ERROR);
}
function fetch_row() {
if ($this-cursor < sizeof($this-result)) {
return $this-result[$this-cursor ];
} else {
return false;
}
}
function num_rows() {
return sizeof($this-result);
}
?
<?php
function query($query) {
if (stristr($query, 'SELECT')) {
// 计算查询的缓冲标记
$cache_id = md5($query);
// 查询缓冲
$this-result = $this-get($cache_id, 'mysql_query_cache');
if ($this-result == NULL) {
// 缓冲丢失
$this-cursor = 0;
$this-result = array();
if (is_resource($this-connection)) {
// 尽可能采用 mysql_unbuffered_query()
if (function_exists('mysql_unbuffered_query')) {$result = mysql_unbuffered_query($query, $this-connection);
} else {$result = mysql_query($query, $this-connection);
}
// 取出所有查询结果
while ($row = mysql_fetch_assoc($result)) {$this-result[] = $row;
}
// 释放 MySQL 结果资源
mysql_free_result($result);
// 把结果缓冲
$this-save($cache_id, $this-result, $this-expires, 'mysql_query_cache');
}
}
} else {
// 没有查询结果,不需要缓冲
return mysql_query($query, $this-connection);
}
}
?
<?php require_once 'MySQL_Query_Cache.php';
$cache = new MySQL_Query_Cache();
$cache-connect('hostname', 'username', 'password', 'database');
$cache-query('select * from table');
while ($row = $cache-fetch_row()) {
echo '<p';
print_r($row);
echo '</p';
}
?
来源:http://www.tulaoshi.com/n/20160129/1491064.html
看过《采用 PEAR 来缓冲 PHP 程序(二)》的人还看了以下文章 更多>>