関数の概要
clearstatcache は、PHPが保持しているファイル情報のキャッシュをクリアするための関数です。PHPはファイルの状態(サイズや更新日時など)を高速化のためにキャッシュしていますが、ファイルの状態が変わった直後に最新情報を取得したい場合に、この関数を使ってキャッシュをリセットします。
パラメータの説明
clear_realpath_cache(bool型・省略可能): 実際のファイルパスのキャッシュも消したい場合にtrueを指定します。デフォルトはfalseです。filename(string型・省略可能): キャッシュをクリアしたい特定のファイル名を指定します。指定しない場合はすべてのファイルキャッシュがクリアされます。
戻り値
clearstatcache は戻り値を返しません。内部でキャッシュがクリアされるだけなので、戻り値はありません。
使用例
基本的な使い方
<?php
// ファイルサイズを取得
$size1 = filesize('example.txt');
echo "最初のサイズ: " . $size1 . "n";
// ファイルを更新(例として追記)
file_put_contents('example.txt', "追記内容n", FILE_APPEND);
// キャッシュをクリアしないまま再度ファイルサイズを取得
$size2 = filesize('example.txt');
echo "更新後のサイズ(キャッシュ有り): " . $size2 . "n";
// キャッシュをクリア
clearstatcache();
// キャッシュクリア後にファイルサイズを取得
$size3 = filesize('example.txt');
echo "更新後のサイズ(キャッシュクリア後): " . $size3 . "n";
?>
ファイルの更新後にキャッシュをクリアしないと、filesize 関数は変更前の古いサイズを返してしまいます。clearstatcache を使うことで正しい最新情報を取得できます。
特定のファイルのキャッシュのみをクリア
<?php
// 特定のファイル'example.txt'のキャッシュだけをクリア
clearstatcache(true, 'example.txt');
?>
複数のファイルが操作されている場合、特定のファイルだけキャッシュをクリアしたいときに便利です。
実際のパスのキャッシュもクリアする
<?php
// 実ファイルパスのキャッシュもリセット
clearstatcache(true);
?>
ファイルのシンボリックリンクやパス解決が変更された場合に、実際のパスのキャッシュもクリアして正しく動作させたいときに使います。
関連する関数
filesize– ファイルのサイズを取得する関数で、キャッシュの影響を受けることがあるfilemtime– ファイルの最終更新日時を取得する関数file_exists– ファイルの存在をチェックする関数realpath– ファイルの絶対パスを取得する関数(実パスキャッシュに関連)
まとめ
clearstatcache は、PHPのファイル情報に関するキャッシュを手動でクリアするための便利な関数です。ファイル操作後に最新の状態を正確に取得したい場合に役立ちます。特にファイルサイズや更新日時を取得する際にキャッシュの影響で古い情報が返る問題を防ぐことができるため、実務でも頻繁に使われます。パラメータで特定ファイルや実際のパスのキャッシュのみをクリアすることも可能で、柔軟に対応できる点も特徴です。
