PHP | clearstatcache 函数

Lasted 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