1. 程式人生 > >PHP 開發 APP 介面--讀取快取方式

PHP 開發 APP 介面--讀取快取方式

以靜態快取為例。

list.php:

 1 <?php
 2 require_once 'response.php';
 3 require_once 'db.php';
 4 require_once 'file.php';
 5 
 6 $page = isset($_GET['page'])?$_GET['page']:1;
 7 $pageSize = isset($_GET['pageSize'])?$_GET['pageSize']:1;
 8 if(!is_numeric($page) || !is_numeric($pageSize)){
 9     return
@Response::show(401,'資料不合法'); 10 } 11 12 $offset = ($page-1)*$pageSize; //每頁起始數 13 $sql = 'select * from review where is_enabled = 1 order by creation_time desc limit '.$offset.','.$pageSize; 14 $cache = new Cache(); 15 $vals = array(); 16 //當沒有快取或者快取失效時,連線資料庫並從資料庫中取出資料 17 //注意當有分頁的資料時,需要把分頁資訊寫入檔名 18 if(!$vals
= $cache->cacheData('index-data'.$page.'-'.$pageSize)){ 19 //echo 'aaaa';exit(); //測試快取失效 20 try{ 21 $connect = DB::getInstance()->connect(); 22 }catch(Exception $e){ 23 return Response::show(403,'資料庫連線失敗'); 24 } 25 $res = mysql_query($sql,$connect); 26 while
($val = mysql_fetch_assoc($res)){ 27 $vals[] = $val; //二維陣列 28 } 29 //同時把取出的資料存入快取 30 if($vals){ 31 $cache->cacheData('index-data'.$page.'-'.$pageSize,$vals,50); 32 } 33 } 34 //如果快取存在同時沒有失效,使用封裝的介面類封裝快取中的資料 35 if($vals){ 36 return Response::show(200,'首頁資料獲取成功',$vals); 37 }else{ 38 return Response::show(400,'首頁資料獲取失敗',$vals); 39 }

file.php:

 1 <?php
 2 class Cache{
 3     //靜態快取檔案字尾名
 4     const EXT = 'txt';
 5     //定義快取檔案存放路徑
 6     private $_dir;
 7     public function __construct(){
 8         $this->_dir = dirname(__FILE__).'/files/';
 9     }
10 
11     public function cacheData($k,$v = '',$cacheTime = 0){ //預設永久不失效
12         //檔名
13         $filename = $this->_dir.$k.'.'.self::EXT;
14         //$v不為‘’:儲存快取或者刪除快取
15         if($v !== ''){
16             //刪除快取
17             if(is_null($v)){
18                 return @unlink($filename);
19             }
20             //儲存快取
21             $dir = dirname($filename);
22             if(!is_dir($dir)){
23                 mkdir($dir,0777);
24             }
25             $cacheTime = sprintf('%011d',$cacheTime);    //$cacheTime 設定為11位(方便擷取),不滿11位前面補0
26             //把快取時間拼接$v
27             return file_put_contents($filename,$cacheTime.json_encode($v));
28         }
29         //讀取快取
30         if(!is_file($filename)){
31             return false;
32         }
33         $contents = file_get_contents($filename);
34         $cacheTime = (int)substr($contents,0,11);
35         $val = substr($contents,11);
36         if($cacheTime != 0 && $cacheTime+filemtime($filename) < time()){    //快取已經失效
37             unlink($filename);
38             return false;
39         }
40         return json_decode($val,true);
41     }
42 }

測試 http://127.0.0.17/php/APP/list.php?pageSize=10&page=3 生成 index-data3-10.txt

測試 http://127.0.0.17/php/APP/list.php?pageSize=10 生成 index-data1-10.txt