PHP 文件系统 clearstatcache() 函数



PHP 文件系统clearstatcache()函数用于清除文件状态数据缓存。为了提高效率,PHP 会缓存特定函数的数据。当脚本需要准确的结果并多次访问文件时,clearstatcache()确保不会使用缓存的数据。

此功能在对同一文件执行多个操作时很有用,因为它只针对这些文件名清除缓存数据,确保数据是最新的。

clearstatcache() 函数的必要性

PHP 会缓存各种内置函数(如 stat())的结果,以节省资源消耗。即使这种缓存提高了效率,如果文件被修改并且稍后在脚本中调用该函数,数据也可能过时。为了确保文件更新后的数据有效,需要调用clearstatcache()以清除有关文件状态的缓存信息。

语法

以下是 PHP 文件系统clearstatcache()函数的语法:

void clearstatcache ([ bool $clear_realpath_cache = FALSE [, string $filename ]] )

参数

以下是clearstatcache()函数的必填和可选参数:

序号 参数及说明
1

clear_realpath_cache(必填)

一个布尔值,指示是否清除 realpath 缓存。如果设置为 TRUE,则清除缓存。

2

filename(可选)

一个包含要清除其缓存的文件名的字符串。如果给出缓存,则仅删除该特定文件的缓存。

返回值

该函数返回 NULL。

PHP 版本

clearstatcache()函数最初作为 PHP 4 核心的一部分引入,并且与 PHP 5、PHP 7、PHP 8 兼容。

示例

因此,我们将在这个示例中看到 PHP 文件系统clearstatcache()函数的基本用法。因此,我们将检查并打印位于“/PhpProject”目录中的文件“sample.txt”的文件大小。

在代码中,除了clearstatcache()之外,我们还使用了 filesize()、fopen()、ftruncate() 和 fclose() 函数。这些函数可用于操作和获取有关文件“/PhpProject/sample.txt”的信息,例如其大小。

<?php
   // check filesize
   echo filesize("/PhpProject/sample.txt");
   echo "\n";

   $file = fopen("/PhpProject/sample.txt", "a+");
   // truncate file
   ftruncate($file, 100);
   fclose($file);

   // Clear cache and check filesize again
   clearstatcache();
   echo filesize("/PhpProject/sample.txt"); 
?>

输出

这将产生以下结果:

25
100

示例

我们还可以使用 PHP 中带参数的clearstatcache()方法来从缓存中删除特定文件信息。

<?php
   $file = "sample.txt";

   // Clears cache for "sample.txt" only
   clearstatcache(true, $file); 
   echo "Cache cleared for $file\n";

   // Clear cache for all files
   clearstatcache(true); 
   echo "Cache cleared for all files\n";

?> 

输出

这将生成以下结果:

Cache cleared for all files

示例

现在我们将尝试使用clearstatcache()和 filesize() 函数清除缓存。因此,我们将显示清除缓存之前和之后的文件大小。

<?php
   // File path
   $file = "/Applications/XAMPP/xamppfiles/htdocs/mac/myfile.txt";

   // get filesize before clearing cache
   echo "Filesize before clearing cache: " . filesize($file) . "<br>";

   // clear cache for the specific file
   clearstatcache(true, $file);

   // get filesize after clearing cache
   echo "Filesize after clearing cache: " . filesize($file) . "<br>";
?> 

输出

这将导致以下结果:

Filesize before clearing cache: 756
Filesize after clearing cache: 305

受影响的函数

PHP 缓存这些函数的结果:

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()

重要说明

  • 当文件被删除时,unlink() 函数会自动清除缓存,因此无需使用clearstatcache()
  • PHP 在使用 file_exists() 时会缓存信息,但仅针对现有文件。它不会缓存不存在的文件的数据。
  • 如果您对同一文件名执行多个操作并且需要删除有关该特定文件的缓存信息,请使用clearstatcache(),因为它会缓存有关特定文件名的信息。

总结

clearstatcache()函数对于删除缓存的文件状态并检索有关文件或函数的最新信息非常有用。它是一个集成的 PHP 文件系统函数。

php_function_reference.htm
广告