Cache 缓存 view 在Storage 下面会自动生成对应的文件。但是并不会自动删除缓存文件,所有今天就想着看看框架底层,后来发现,有一个 path方法可以获取 对应的 文件目录地址,因此找到解决办法。废话少说,下面贴出代码。
/**
* 清除 缓存文件
* f y j
*
*/
public static function deleteStoreFile($file)
{
$filedata = explode('/', $file);
$num = count($filedata);
$newfile_tmp= '';
$newfile = '';
foreach ($filedata as $key => $value) {
if(($key+2)<=$num)
{
$newfile .=empty($key)?$value:'/'.$value;
}
if(($key+1)<=$num-2)
{
$newfile_tmp .=empty($key)?$value:'/'.$value;
}
}
if (file_exists($file)) {
Util::deldir($newfile);
rmdir($newfile_tmp);
}
}
/**
* 清空 文件夹下面所有 子文件夹
* @param [type] $dir [description]
* @return [type] [description]
*/
public static function deldir($dir) {
//先删除目录下的文件:
$dh=opendir($dir);
while ($file=readdir($dh)) {
if($file!="." && $file!="..") {
$fullpath=$dir."/".$file;
if(!is_dir($fullpath)) {
unlink($fullpath);
} else {
Util::deldir($fullpath);
}
}
}
closedir($dh);
if(rmdir($dir)) {
return true;
}
return false;
}
把对应的 path 重写一些,因为是私有的额,外部访问不到。
/**
* 获取缓存文件跟路径
* fyj
*/
public function path($key)
{
$storagepath = storage_path('framework/cache');
$parts = array_slice(str_split($hash = sha1($key), 2), 0, 2);
return $storagepath.'/'.implode('/', $parts).'/'.$hash;
}
以下是删除代码调用
$file = $this->path(config('msgconfig.NEWS_SHOW_CACHE').$id);
if(file_exists($file))
{
Util::deleteStoreFile($file);
}