1. 程式人生 > >PHP實現資料快取的方法利用檔案快取

PHP實現資料快取的方法利用檔案快取

//如果檔案生產失敗,多半是當前檔案沒有建立檔案與目錄的許可權,請給予許可權即可
//這裡呼叫快取,使用方法類是TP的S方法
if(!$cate = CacheHtml('IndexModelPlodesadasdw')){
    $cate = array('asdsad'=>'asdsad','asfqwf'=>'qwfqwf');
    //這裡生成快取
    CacheHtml('IndexModelPlodesadasdw',100,$cate);
}
print_r($cate);

/**
 * [CacheHtml 快取方法]
 * @E-mial [email protected]
* @TIME 2017-10-11 * @WEB http://blog.iinu.com.cn * @param [type] $cache [快取名稱] * @param [type] $cachetime [快取時間] * @param [type] $cachedata [快取的資料] * @param [type] $cachepath [快取的路徑] * @param [type] $cachetype [快取型別] */ function CacheHtml($cache,$cachetime=5,$cachedata='',$cachepath='',$cachetype=1){ //檢查檔名是否存在特殊字元 $cache = preg_match("/_/",$cache) ? '1' : $cache; if($cache == 1){ return false; } //快取路徑 $cachepath = $cachepath == '' ? $_SERVER['DOCUMENT_ROOT'] : $cachepath; //快取目錄 $catalog = 'cache'; //檔案字尾 $fileSuffix = '.php'; //檢查快取目錄是否存在 is_dir($catalog) or @mkdir($cachepath.$catalog, 0777); //遍歷查詢該目錄下所有檔案 $ArrayFile = listDir($cachepath.$catalog); //把獲取掉的檔案字尾刪除 if(!empty($ArrayFile)){ foreach($ArrayFile as $k=>$v){ //只匹配字尾為.php的 if(mb_substr($v,-4) == '.php'){ //拆分檔名 $getFileNameTime = explode('_',$v); //獲取當前檔案的到期時間 $getFileEndTime = $getFileNameTime[count($getFileNameTime)-2]; //把快取時間到期的檔案刪除 if(time() >= $getFileEndTime){ //刪除到期檔案 unlink($cachepath.$catalog.'/'.$v); return false; } //獲取檔名 $getFileName = $getFileNameTime[count($getFileNameTime)-1]; //當前檔名等於傳入檔名時 if($getFileName == $cache.$fileSuffix){ //合併檔名 $cacheName = $v; } } } } //檢查快取是否存在 if(is_file($cachepath.$catalog.'/'.$cacheName)){ //快取存在則開啟 $fileopen = fopen($cachepath.$catalog.'/'.$cacheName,'r'); //讀取快取的資料 $fileData = fread($fileopen,filesize($cachepath.$catalog.'/'.$cacheName)); //將快取的資料返回 $fileData = json_decode($fileData,true); }else{ if($cachetime==5 || empty($cachedata)){ return false; } //判斷資料型別 if(is_string($cachedata)){ //資料為字串將資料組合為陣列並且轉換為JSON $jsonData = json_encode(array($cachedata)); }else{ //資料為陣列將陣列轉換為JSON $jsonData = json_encode($cachedata); } //組合檔名 $cacheName = time().'_'.(time()+$cachetime).'_'.$cache.$fileSuffix; //快取不存在則建立 $fileopen = fopen($cachepath.$catalog.'/'.$cacheName,'w+'); //將快取的資料寫入檔案 $fileData = fwrite($fileopen,$jsonData); } //關閉 fclose($fileopen); return $fileData; } /** * [listDir 遍歷目錄下所有檔案] * @E-mial
[email protected]
* @TIME 2017-10-11 * @WEB http://blog.iinu.com.cn * @param [type] $dir [要遍歷的路徑] * @return [type] [description] */ function listDir($dir) { if(!is_dir($dir)) { return false; } if(!$dh = opendir($dir)) { return false; } while(($file = readdir($dh)) !== false) { if((is_dir($dir."/".$file)) && $file!="." && $file!="..") { $arr[] = $file; listDir($dir."/".$file."/"); } else { if($file!="." && $file!="..") { $arr[] = $file; } } } closedir($dh); return $arr; }

相關推薦

PHP實現資料快取方法利用檔案快取

//如果檔案生產失敗,多半是當前檔案沒有建立檔案與目錄的許可權,請給予許可權即可 //這裡呼叫快取,使用方法類是TP的S方法 if(!$cate = CacheHtml('IndexModelPlodesadasdw')){ $cate = array('asdsad

php複製檔案PHP複製資料夾下面所有檔案

說明:下面的程式碼實現了將d盤test1資料夾裡的全部內容複製到d盤的test2資料夾中 <span style="font-size:18px;"><?php function recurse_copy($src,$des) { $dir = o

php實現資料結構】單向連結串列

什麼是單向連結串列 連結串列是以鏈式儲存資料的結構,其不需要連續的儲存空間,連結串列中的資料以節點來表示,每個節點由元素(儲存資料)和指標(指向後繼節點)組成。 單向連結串列(也叫單鏈表)是連結串列中最簡單的一種形式,每個節點只包含一個元素和一個指標。它有一個表頭,並且除了最後一個節點外,所有節點都有其後

php刪除資料夾(臨時檔案)程式碼

      我們有時候需要刪除剛生成的臨時檔案,比如上傳圖片或者生成圖片的時候,我們需要現在本地儲存起來,然後再上傳到圖片伺服器。當圖片上傳到伺服器之後,那本地儲存的圖片就沒用了,為了避免專案檔案過大,所以刪除本地的圖片檔案的就變得很有必要。 直接分享一段程式碼

PHP 實現下載安卓apk檔案

header("Content-type:text/html;charset=utf-8"); $file_name="檔名"; $file_path="檔案路徑"; //首先要判斷給定的檔案存在與否 if(!file_exists($file_path)){

php JSON資料格式化方法

php 的json_encode能把陣列轉換為json格式的字串。字串沒有縮排,中文會轉為unicode編碼,例如\u975a\u4ed4。人閱讀比較困難。現在這個方法在json_encode的基礎上

利用ehcache2.6實現資料快取

對於一個大專案中利用快取來提高使用者訪問資料的速度和減小資料庫的壓力是很有必要的,今天就要跟大家分享一下利用ehcache實現資料快取。具體步驟如下: 1.編寫ehcache.xml。這裡面一定要有預設的快取,然後自己可以寫一個快取。 快取引數解釋: ma

PHP學習】靜態檔案快取綜合小案例以及一些函式的注意點

靜態快取技術 儲存在磁碟上的靜態檔案,用PHP生 成資料到靜態檔案中。原理如下: php中的快取操作 生成快取 獲取快取 刪除快取 甩一段別人的程式碼 class Response{ static public function datas($cod

PHP實現獲取檔案字尾名的幾種常用方法

方法1: function get_file_type($filename){ $type = substr($filename, strrpos($filename, ".")+1); return $type; } 方法2: function get_file_type($filena

nginx實現動態/靜態檔案快取-技術流ken

1.簡介 本系列博文將分為三大部分,這是第一部分。分別介紹nginx的動態以及靜態檔案的快取,使用nginx實現反向代理,以及nginx實現負載均衡。相信在讀完本篇博文之後,你會對nginx強大的應用功能驚歎不已,並且深深的愛上這款輕量級web服務程式。 2.nginx實現靜態檔案快取實戰 1.nginx靜態

PHP利用反射實現物件呼叫方法

寫個例子: <?php class Test { function phone() { return '13888888888'; } function

## SpringBoot Tair 實現資料快取

Tair詳細描述: Tair是一個Key/Value結構資料的解決方案,它預設支援基於記憶體和檔案的兩種儲存方式,分別與快取和持久化儲存對應。Tari的功能是get、put、delete以及批量介面。 Tair中的每個資料都包含版本號,版本號在每次更新後都會遞增

利用cpu快取實現高效能程式

我們選購電腦時,CPU處理器的配置會有快取大小,它是CPU效能的重要指標。 為什麼呢?因為CPU計算速度與訪問主存速度非常不匹配! 先來看計算速度。單顆CPU計算速度目前在2GHz-4GHz之間,以2.5GHz計即每秒鐘計算25億次,每個時鐘週期耗時1/2.5GHz=

PHP使用3種方法實現資料採集

什麼叫採集? 就是使用PHP程式,把其他網站中的資訊抓取到我們自己的資料庫中、網站中。 PHP製作採集的技術: 從底層的socket到高層的檔案操作函式,一共有3種方法可以實現採集。 1. 使用so

PHP靜態檔案快取

ob_start(); 2 echo ‘aaa’; 3 $string = ob_get_contents(); 4 file_put_contents(‘a.html’, $string); 5 ob_flush(); 6 flush();與緩衝區有關的函式 1.ob_implic

php 爬蟲的簡單實現, 獲取整個頁面, 再把頁面的資料匯入本地的檔案當中

$curlobj = curl_init(); //建立一個curl 的資源,下面要用的 curl_setopt($curlobj,CURLOPT_URL,"http://www.baidu.com

spring boot學習(06):Redis 實現資料快取和 Session 共享

前言 前面我們學習了redis的基本使用,我們知道redis最常用的應用場景,就是資料快取和session共享,Spring Boot 針對這兩個場景都做了一些優化,讓我們在實際專案中使用非常的方便。 資料快取 使用 Redis 做為資料快取

spring結合redis如何實現資料快取

1、實現目標   通過redis快取資料。(目的不是加快查詢的速度,而是減少資料庫的負擔)   2、所需jar包     注意:jdies和commons-pool兩個jar的版本是有對應關係的,注意引入jar包是要配對使用,否則將會報錯。因為commons-pooljar的目

Python 按行讀取文字檔案 快取 和 非快取實現

需求 最近專案中有個讀取檔案的需求,資料量還挺大,10萬行的數量級。 java 使用快取讀取檔案是,會相應的建立一個內部緩衝區陣列在java虛擬機器記憶體中,因此每次處理的就是這一整塊記憶體。 簡單的想:就是如果不用快取,每次都要硬碟–虛擬機器快取–讀取;

利用檔案頭來實現的一些檔案型別的方法封裝

package com.opslab.util.algorithmImpl; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import jav