PHPでは、 ClearStatCache()関数は、ファイル状態キャッシュをクリアするための非常に実用的なツールです。 stat()やfile_exists()などの関数を使用してファイルのステータス情報を取得すると、PHPはこれらの結果をキャッシュして効率を向上させます。ただし、場合によっては、キャッシュをクリアし、最新のファイルステータス情報を取得する必要があります。この記事では、 STAT()関数の戻り値に対するClearStatCache()関数の特定の影響について詳しく説明します。
stat()関数は、ファイルの詳細を取得するために使用されます。ファイルサイズ、変更時間、アクセス時間、アクセス許可など、ファイルステータス情報を含む配列を返します。サンプルコードは次のとおりです。
$file = 'example.txt';
$stat = stat($file);
print_r($stat);
stat()によって返される配列には、次の情報が含まれています。
0:ファイルデバイス番号
1:Iノード番号
2:ファイルの種類と権限
3:リンクの数
4:ユーザーID
5:ユーザーグループID
6:ファイルサイズ
7:最後の訪問時間
8:最後の変更時間
9:ファイルステータスの変更時間
10:ファイル名
PHPでは、 STAT()または同様の機能を複数回呼び出すと、PHPはファイルのステータス情報を自動的にキャッシュします。キャッシュ後にファイルが変更された場合、PHPはデフォルトでキャッシュ値を更新しません。ファイルの最新の状態を強制するには、 ClearStatCache()関数を使用できます。
ClearStatCache()関数のプロトタイプは次のとおりです。
clearstatcache(bool $clear_realpath_cache = false, string $filename = null): void
2つのパラメーターを受け入れることができます。
$ CLEAR_REALPATH_CACHE :デフォルトはFALSEです。Trueに設定すると、実際のパスキャッシュがクリアされます。
$ filename :ファイル名が提供されている場合、PHPはファイルのキャッシュのみをクリアします。
ファイル情報を取得するためにSTAT()が呼び出されると、PHPはこの情報をキャッシュしてパフォーマンスを向上させます。 STAT()を呼び出した後にファイルの内容を変更しますが、次のSTAT()呼び出しでは、PHPがキャッシュ内の古いデータを返す場合があります。 stat()が最新のファイル情報を返していることを確認する場合は、 clearstatcache()を使用できます。
例えば:
$file = 'example.txt';
// 最初の呼び出し stat(),キャッシュ結果
$stat1 = stat($file);
print_r($stat1);
// ファイルコンテンツを変更します
file_put_contents($file, 'New content');
// クリアキャッシュ
clearstatcache();
// 2回目の呼び出し stat(),この時点で、キャッシュがクリアされています
$stat2 = stat($file);
print_r($stat2);
上記のコードでは、 STAT()への最初の呼び出しがファイルのキャッシュ情報を返します。次に、ファイルコンテンツを変更した後、 ClearStatCache()を呼び出してキャッシュをクリアします。 STAT()が再び呼び出されると、PHPはファイル情報を読み直し、最新のステータスに戻ります。
実際の開発には多くの一般的なシナリオがあります。
動的ファイルの操作:ファイルのアップロード、変更、削除の場合、最新のファイル情報を取得する必要があります。この時点で、 ClearStatCache()を呼び出すことで、 STAT()が最新のファイルステータスを返すことを確認できます。
同時アクセス:複数のプロセスまたはスレッドが同じファイルを同時に操作すると、ファイルのステータスが変更される場合があります。時代遅れのキャッシュを読むことを避けるために、 ClearStatCache()を定期的に呼び出してキャッシュを更新する必要があります。
デバッグフェーズ:開発およびデバッグプロセス中に、ファイルの変更をすぐにプログラムに反映する必要がある場合があります。 ClearStatCache()を呼び出すと、ファイルステータスの精度を確保するのに役立ちます。
ClearStatCache()を使用すると、すべてのファイルのステータスキャッシュがクリアされ、パフォーマンスに特定の影響がある場合があります。特別なニーズがない限り、頻繁に電話をかけないようにしてください。
場合によっては、特定のファイルのキャッシュをクリアするだけで、クリアランスの範囲を制限するためにファイル名をパラメーターとして渡すことができます。
例えば:
clearstatcache(true, 'example.txt');
これにより、すべてのファイルではなく、 example.txtファイルのキャッシュのみがクリアされます。
stat()関数に加えて、 file_exists()もキャッシュを使用する関数です。ファイルが変更された後にfile_exists()が呼び出された場合、古いキャッシュ結果を返すことができます。この場合、 ClearStatCache()を使用して、最新のファイルの存在情報が呼び出されるようにすることもできます。
サンプルコード:
$file = 'example.txt';
if (file_exists($file)) {
echo "ファイルが存在します\n";
} else {
echo "ファイルは存在しません\n";
}
// ファイルを削除します
unlink($file);
// クリアキャッシュ
clearstatcache();
// ファイルが存在するかどうかをもう一度確認してください
if (file_exists($file)) {
echo "ファイルが存在します\n";
} else {
echo "ファイルは存在しません\n";
}
上記のコードでは、 Unlink()を呼び出してファイルを削除した後、 ClearStatCache()を呼び出してCacheをクリアしてFile_Exists()が最新の結果を返すようにします。
ClearStatCache()関数は、PHPで重要な役割を果たします。ファイル状態のキャッシュをクリアし、 stat()およびその他の類似の関数が最新のファイル状態情報を取得することを確認できます。動的ファイル操作または同時アクセスを処理する場合、時間内にClearStatCache()を使用すると、キャッシュによって引き起こされるデータの矛盾を回避できます。ただし、この関数への頻繁な呼び出しはパフォーマンスに影響を与える可能性があり、実際の条件に従って慎重に使用する必要があることに注意する必要があります。