PHP – clearstatcache()解释

对于,,等函数is_file(),PHP会为每个文件缓存该函数的结果,以便在再次调用该函数时提高性能。file_exists()

但是在某些情况下,您想要清除此缓存的信息,例如在同一页面中多次获取同一文件的信息之类的任务。
需要注意的是,PHP还会缓存不存在的文件的信息。因此,当您file_exists()在不存在的文件上使用时。PHP将返回FALSE,直到您创建该文件为止。

创建此文件后,PHP将返回TRUE。但是,当您手动删除此文件并调用时file_exists(),该文件将返回TRUE。因为PHP将返回缓存的信息。

因此,请始终使用unlink()因为unlink()会自动删除该文件的缓存。

为了清除文件状态缓存,使用了clearstatcache()功能。该功能将清除以下功能列表中存储的所有缓存信息。
stat(),lstat(),file_exists(),is_writable(),is_readable(),is_executable(),is_file(),is_dir(),is_link(),filectime(),fileatime(),filemtime(),fileinode(),filegroup(),fileowner(),filesize(),filetype(),和fileperms()

这是摘自PHP手册的示例:

 $file = "sample.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));

#OUTPUT
UID @ Sun,2009年10月12日21:48:28 +0100:根
UID @ Sun,2009年10月12日21:48:28 +0100:根
UID @ Sun,2009年10月12日21:48:28 +0100:罗斯