删除缓存也很简单,使用:
F('data',NULL);
复制代码
第二个参数传入NULL,则表示删除标识为data的数据缓存。
支持批量删除功能,尤其是针对子目录缓存的情况,假设我们要删除user子目录下面的所有缓存数据,可以使用:
F('user/*',NULL);
又或者使用过滤条件删除,例如:
F('user/[^a]*',NULL);
文档中说删除子缓存目录内容用F('user/*',NULL);或者F('user/[^a]*',NULL);经测试发现无效。查看系统定义的F函数:function F($name, $value='', $path=DATA_PATH) {<br>
static $_cache = array();<br>
$filename = $path . $name . '.php';<br>
if ('' !== $value) {<br>
if (is_null($value)) {<br>
// 删除缓存<br>
return unlink($filename);<br>
} else {<br>
// 缓存数据<br>
$dir = dirname($filename);<br>
// 目录不存在则创建<br>
if (!is_dir($dir))<br>
mkdir($dir);<br>
return file_put_contents($filename, strip_whitespace("<?php \nreturn " . var_export($value, true) . ";\n?>"));<br>
}<br>
}<br>
if (isset($_cache[$name]))<br>
return $_cache[$name];<br>
// 获取缓存数据<br>
if (is_file($filename)) {<br>
$value = include $filename;<br>
$_cache[$name] = $value;<br>
} else {<br>
$value = false;<br>
}<br>
return $value;<br>
}
当$value为null时执行删除操作即unlink($filename);而$filename = $path . $name . '.php';当我们传入F('user/*',NULL);时,就变成缓存目录/user/*.php,也就是执行了unlink(/user/*.php),而实际并没有这个文件,所以最后没有文件被删除。
改进建议:1。自己获取缓存目录下所有文件名,可以用scandir或者glob函数,然后循环删除。
2。修改F函数,增加对子目录内容的循环判断。或者直接删除缓存子目录
总之F函数没有实现批量删除。
AD:真正免费,域名+虚机+企业邮箱=0元