当前位置: 首页 > 图文教程 > 网络编程 > PHP > 采用 PEAR 来缓冲 PHP 程序(二)

PHP
php的curl实现get和post的代码
PHP6 先修班 JSON实例代码
phpMyAdmin2.11.6安装配置方法
常用的php对象类型判断
php 中文处理函数集合
php 缓存函数代码
php查看session内容的函数
php下删除字符串中HTML标签的函数
php xml分析函数代码
PHP Mysql编程之高级技巧
swfupload 多文件上传实现代码
PHP开发中常用的8个小技巧
PHP define函数的使用说明
超级全面的PHP面试题整理集合
php判断字符以及字符串的包含方法属性
PHP中常用数组处理方法实例分析
php array_slice函数的使用以及参数详解
PHP生成HTML静态页面实例代码
php将数据库中的电话号码读取出来并生成图片
PHP通用分页类page.php[仿google分页]

采用 PEAR 来缓冲 PHP 程序(二)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 87 ::
收藏到网摘: n/a

最后,我们来定制一个应用,综合的来解释 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);
}
}
?>



例 3: 使用 MySQL 查询缓冲

<?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>';
}
?>