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