clearstatcache(bool $clear_realpath_cache=false,string $filename=?):void
当使用 stat(),lstat() 或者任何列在受影响函数表(见下面)中的函数时,PHP 将缓存这些函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。
必须注意的是,对于不存在的文件,PHP 并不会缓存其信息。所以如果调用 is_file() 来检查是否文件,在该文件没有被创建之前,它都会返回 false。如果该文件被创建了,就算以后被删除,它都会返回 true 。函数 unlink() 会自动清除该缓存(unlink()不会清除远程文件缓存).
受影响的函数包括 stat(), lstat(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() 和 fileperms()。
参数:
- clear_realpath_cache 是否清除真实路径缓存
- filename 清除文件名指定的文件的真实路径缓存; 只在 clear_realpath_cache 为 true 时启用
<?php
$file = 'output_log.txt';
function get_owner($file)
{
$stat = stat($file);
$user = posix_getpwuid($stat['uid']);
return $user['name'];
}
$format = "UID @ %s: %s\n";
printf($format, date('r'), get_owner($file));
chown($file, 'ross');
printf($format, date('r'), get_owner($file));
clearstatcache();
printf($format, date('r'), get_owner($file));
?>
UID @ Sun, 12 Oct 2008 20:48:28 +0100: root
UID @ Sun, 12 Oct 2008 20:48:28 +0100: root
UID @ Sun, 12 Oct 2008 20:48:28 +0100: ross
<?php
$filename = test.txt';
if (is_file($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
}
sleep(10);
echo "<br >";
if (is_file($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
}
首先确保test.txt文件存在,第一次使用is_file函数判断文件是否存在,然后调用sleep睡眠10秒,然后手动删除test.txt文件,最后看看第二次调用is_file函数的结果,输出
test.txt exists!
test.txt exists!
把is_file替换成file_exists函数,结果返回
test.txt exists!
test.txt no exists!
is_file缓存了第一次调用的结果信息,file_exists则没有缓存