PHP微信開發用Cache 解決資料快取
阿新 • • 發佈:2019-02-03
本文主要介紹,解決PHP微信開發時資料快取的問題,這裡用Cache
類舉例說明,具有參考價值,感興趣的小夥伴可以參考下
用php進行微信開發時,碰到access_token長久儲存的問題,以前都是用框架裡的Cache直接set、get一下就完了。現在沒框架可用了,只好自己動手寫一個cache暫時用。
這個Cache類用來快取一些具有時效性的資料,比如微信基礎介面的access_token、網頁Auth驗證的access_token等
下面的程式碼使用本地檔案進行資料的快取,
//測試
$cache
= new
Cache();
$cache ->dir =
"../cc/" ;
//$cache->setCache("zhang", "zhangsan", 100); echo
$cache ->getCache( "zhang" );
//$cache->removeCache("zhang");
$cache ->setCache( "liu" ,
"liuqi" , 100);
echo
$cache ->getCache( "liu" );
class
Cache{
public
$cacheFile = "cache.json" ;
//檔案
public
$dir = "./cach2/" ;
//目錄
//快取
public
function setCache( $name ,
$val , $expires_time ){
$file
= $this ->hasFile(); //字串轉陣列
$str
= file_get_contents ( $file );
$arr
= json_decode( $str , true);
//值為空,則移除該快取
if ( empty ( $val )){
unset( $arr [ $name ]);
} else {
$arr [ $name ] =
array ( "value" => $val ,
"expires_time" => $expires_time ,
"add_time" =>time());
}
//陣列轉字串
$str
= json_encode( $arr );
file_put_contents ( $file ,
$str );
}
public
function getCache( $name ){
$file
= $this ->hasFile();
//字串轉陣列
$allArr
= json_decode( $str , true);
$arr
= $allArr [ $name ];
if (! $arr
|| time() > ( $arr [ "expires_time" ] +
$arr [ "add_time" ])){
$this ->removeCache( $name );
//過期移除
return
false;
}
return
$arr [ "value" ];
}
public
function removeCache( $name ){
$this ->setCache( $name ,
'' , 0);
}
private
function hasFile(){
//如果不存在快取檔案,則建立一個
if (! file_exists ( $this ->dir)){
mkdir ( $this ->dir);
}
if (! file_exists ( $this ->dir
. $this ->cacheFile)){
touch( $this ->dir .
$this ->cacheFile);
}
return
$this ->dir . $this ->cacheFile;
}
}
|
上面的Cache類共有set、get、remove三種操作。另外還可以自定義快取檔案的儲存路徑,只要設定Cache的dir屬性就可以了。
以上就是PHP 微信開發時資料快取的方法,希望對大家的學習有所幫助.