欢迎光临
我们一直在努力

采用 PEAR 来缓冲 PHP 程序(二)-PHP教程,PHP技巧

建站超值云服务器,限时71元/月

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

}

?>

<全文完>

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 采用 PEAR 来缓冲 PHP 程序(二)-PHP教程,PHP技巧
分享到: 更多 (0)