PHP | clearstatcache 函数
怎样清除文件操作缓存信息
最近更新时间 2020-12-30 16:27:07
clearstatcache 清除文件状态缓存。
使用 stat()、lstat() 等函数时,PHP 将缓存这些函数的返回信息以提供更快的性能。在某些情况下,你可能想清除被缓存的信息。例如,如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。
对于不存在的文件,PHP 并不会缓存其信息。所以如果调用 file_exists() 来检查不存在的文件,在该文件没有被创建之前,它都会返回 false。如果该文件被创建了,就算以后被删除,它都会返回 true 函数 unlink() 会自动清除该缓存。
函数定义
clearstatcache([ bool $clear_realpath_cache = false [, string $filename ]]):void
// 源文件位于:ext/standard/filestat.c
# 函数定义
PHP_FUNCTION(clearstatcache)
{
...
php_clear_stat_cache(clear_realpath_cache, filename, filename_len);
}
...
if (clear_realpath_cache) {
if (filename != NULL) {
realpath_cache_del(filename, filename_len);
} else {
realpath_cache_clean();
}
}
参数
- checkclear_realpath_cache - 是否清除真实路径缓存。
- checkfilename - 清除文件名指定的文件的真实路径缓存; 只在 clear_realpath_cache 为 true 时启用。
返回值
- checkvoid - 无返回值。
示例1: - 使用 clearstatcache() 函数清除文件状态缓存。
<?php
/**
* PHP 使用 clearstatcache() 函数清除文件状态缓存。
*
* @since Version 1.0.0
* @filesource
*/
// 文件路径
$path = "./foo.txt";
// 显示文件大小
echo 'Size1::'.filesize($path).PHP_EOL;
// 读取文件
$file = fopen($path, "a+");
// 截取文件
ftruncate($file, 5);
fclose($file);
// 显示文件大小
echo 'Size2::'.filesize($path).PHP_EOL;
// 清除文件缓存
clearstatcache();
// 显示文件大小
echo 'Size3::'.filesize($path).PHP_EOL;
Size1::66 Size2::66 Size3::5