(PHP 4, PHP 5, PHP 7, PHP 8)
clearstatcache — ファイルのステータスのキャッシュをクリアする
$clear_realpath_cache
= false
, string $filename
= ""): void
stat
やlstat
、
またはその他の関数(後述)を使用すると、PHPはパフォーマンス向上のために
それらの関数の戻り値をキャッシュします。しかし、ケースによっては、
キャッシュされた情報を消去したい場合もあるでしょう。
例えば、一つのスクリプト上で同じファイルが何度もチェックされ、
そのファイルが変更されたり削除されたりする可能性がある場合、
ステータスキャッシュを消去しなければならないと感じるでしょう。
このようなケースでは、clearstatcache()を使用することで
ファイルの情報に関してPHPが持っているキャッシュをクリアすることができます。
PHP は存在しないファイルについての情報はキャッシュしないことにも
注意してください。もし存在しないファイルに対して
file_exists() をコールする場合、ファイルを作成するまで
この関数は false
を返します。もしファイルを作成した場合、
たとえファイルを削除したとしても true
を返します。
しかし、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().
clear_realpath_cache
realpath キャッシュもクリアするかどうか。
filename
realpath キャッシュを特定のファイル名だけに対してクリアする。
clear_realpath_cache
が true
の場合にのみ使用。
値を返しません。
例1 clearstatcache() の例
<?php
$file = 'output_log.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));
?>
上の例の出力は、 たとえば以下のようになります。
UID @ Sun, 12 Oct 2008 20:48:28 +0100: root UID @ Sun, 12 Oct 2008 20:48:28 +0100: root UID @ Sun, 12 Oct 2008 20:48:28 +0100: ross