PHP缓存(cache)的实现

发布:2011-08-22 14:12   点击738次   评论:0

<?php

require_once(''../../sadm/func1/func1.php'');
require_once(''../../sadm/func2/func2.php'');
require_once(''../../sadm/func1/func_opt.php'');
require_once(''../../sadm/func1/func_file.php'');

////////////////////////////////////////////////////////////
//http://bbs.phpchina.com/thread-100168-1-1.html
//PHP缓存的实现
////////////////////////////////////////////////////////////

$KeyID = myReq("KeyID");
$file = ''./cache.txt'';

$sql = " SELECT KeyID,KeyMod,InfType,InfSubj FROM InfoPics ";
$sql .= " WHERE KeyMod LIKE ''Pic%'' ORDER BY LogATime DESC limit 8 ";
$res = mysql_query($sql);
while($rec=mysql_fetch_array($res)){
  $a[] = $rec;
}

$out = serialize($a); //print_r($out); //echo $out;
$fp = fopen($file,"w"); // 以写权限的方式打开文件
fputs($fp,$out);
fclose($fp);
//查看sql_cache.txt文件
//这个输出是它的变量和类型的内部表现形式。假若你用mysql_fetch_array()
//函数返回数字索引的数组和一个关联的数组(这就是为什么数据看起来像是发生了两次),
//一个是数字索引,另一个是字符串索引。

//要用缓存,你需要用函数unserialize()来使数据还原成原始格式与类型。
//你可以用file_get_contents()这个函数来读取sql_cache.txt文件的内容,把它赋给一个变量。
//implode()函数用于把数组的各元素连接成一个字符串然后使用unserialize()反序列化。
$recs = unserialize(implode('''',file($file))); //现在你可以通过$records数组并且取得原始查询的数据:
foreach($recs as $id=>$row){ print $row[''InfSubj'']."<br>"; }
//注意$records是数组(一个包含了查询结果的数字索引列——每行是一个数字和一个字符串
//...真是混乱)的一排。把它们放在一块:

//检查文件是否存在并且时间戳小于设置的过期时间
//获取存储在缓存文件中的记录或者更新缓存文件
$exp = 300; // 86400=24小时(单位:秒)
if(file_exists($file)&& 
  filemtime($file)>(time()-$exp)){
   // 取得缓存中的记录
  $recs = unserialize(file_get_contents($file));
} else {
  // 通过 serialize() 函数创建缓存
}
//把缓存结果存储在共享内存中以获取更快的速度
//增加一个功能随机地运行SQL查询并且检查是否输出与缓存输出一致。如果不一致,
//则更新缓存(本函数运行次数的概率可以定为1/100)。通过哈希算法(如MD5())
//可以协助判断字符串或者文件是否改变。
//增加一个管理员的功能,人工的删除这个缓存文件,以强制更新缓存
//(如file_exists()函数返回false时)。你可以用函数unlink()删除文件。

//查询结果在数组 $records 中
/*
foreach($recs as $id=>$row){ print $row[''InfSubj'']."<br>"; }
foreach($recs as $id=>$row){
    if($row[''KeyID'']==$_REQUEST[''KeyID'']){
        // 被选择的目录显示粗体字
        print ''<B>''.$row[''InfSubj''].''</B><BR>'';
    } else {
        // 其它目录显示用常规字体
        print $row[''InfSubj''].''<br>'';
    }
} // end foreach
*/

?>

关于 GitHub 导航 部门 反馈

提示:`/home.php`入口数据仅为演示功能,不构成任何交易凭证,也不承担相关风险和责任!

Copyright © 2011-2018 xxxxx.com All rights reserved.

Run:1.917/28.285(ms); 7(sql)/2.886(MB); comm:news/detail; Upd:2025-01-11 11:11:30