【PHP學習】靜態檔案快取綜合小案例以及一些函式的注意點
阿新 • • 發佈:2018-11-02
靜態快取技術
儲存在磁碟上的靜態檔案,用PHP生 成資料到靜態檔案中。原理如下:
php中的快取操作
- 生成快取
- 獲取快取
- 刪除快取
甩一段別人的程式碼
class Response{ static public function datas($code,$info,$data,$type='json'){ switch ($type) { case 'json': # code... return self::json($code,$info,$data); break; case 'xml': return self::xml($code,$info,$data); break; case "array": $arr=array( 'code'=>$code, 'info'=>$info, 'data'=>$data, ); var_dump($arr); break; default: # code... break; } } // xml static public function xml($code,$info,$data){ if (!is_numeric($code)) { //is_numeric() 函式用於檢測變數是否為數字或數字字串 # code... return false; } if ($info && $data) { $str=' <?xml version="1.0" encoding="UTF-8"> <item> <code>'.$code.'</code> <info>'.$info.'</info> <data> '; $str.=self::item($data); $str.=' </data> </item> '; return $str; }else{ return false; } } //多維陣列,使用遞迴 static public function item($data){ $str=""; # code... foreach ($data as $key => $value) { # code... if (is_array($value)) { # code... $str.="<data$key>".self::item($value)."</data$key>\n"; }else{ $str.="<$key>{$value}</$key>"; } } return $str; } // json static public function json($code,$info,$data){ if (!is_numeric($code)) { # code... return false; } if ($info && $data) { # code... $arr=array( 'code'=>$code, 'info'=>$info, 'data'=>$data, ); return json_encode($arr); }else{ return false; } } }
大概的邏輯是:
通過呼叫類裡面的CacheData函式
- 將快取檔案的路徑賦值給$path
- 判斷一下快取檔案的路徑目錄是否存在,不在的話建立一個
- 判斷呼叫此類的CacheData函式是否有出入資料
- 若有
將快取的時間+資料+時間戳存入快取檔案中
- 若沒有
判斷檔案是否存在、通過判斷檔案傳入的是不是null決定是否刪除快取
4。判斷檔案是不是過期了 沒過期就返回快取檔案裡的一部分
需要注意的函式
sprintf('%010d',$time):例如給$time=100 通過函式會0000000100,即不足十位數用0補全
file_put_contents($this->path, $str);,即使.txt檔案不存在,也可以用這個函式,函式會在指定目錄下建立指定檔案,並存入資料。
is_null()具體如下: 在本類中你可以給呼叫的函式$data賦空值,但是賦null,則會刪除快取。
substr($datas, 0,10); //擷取字串裡0~10位
substr($datas, -10); //擷取倒數10位
substr($datas,10,-10); //從第十位到倒數第十位。