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
rss_feed