本当に
file_exists の代わりに is_file を使用できますか?答えは否定的です。なぜ?理由は簡単で、is_file には キャッシュがあるためです
次のコードを使用してテストできます:
コードは次のとおりです:
<?php $filename = 'test.txt'; if (is_file($filename)) { echo "$filename exists!\n"; } else { echo "$filename no exists!\n"; } sleep(10); if (is_file($filename)) { echo "$filename exists!\n"; } else { echo "$filename no exists!\n"; } ?>
テスト コードを実行するとき、test.txt ファイルが存在することを確認します。上記のコードでは、is_file関数を初めて使用してファイルが存在するかどうかを判断し、その後sleep関数を呼び出して10秒間スリープします。この 10 秒以内に、test.txt ファイルを削除します。最後に、is_file 関数を 2 回目に呼び出した結果を確認します。出力結果は以下の通りです:
test.txt names!
test.txt names!
なるほど、「test.txt names!」が 2 回出力されたのはなぜでしょうか。理由は、is_file にキャッシュがあるためです。 is_file 関数が初めて呼び出されたとき、PHP はファイルの属性 (file stat) を保存します。is_file が再度呼び出されたとき、ファイル名が最初と同じであれば、ファイルは直接キャッシュに返されます。 。 is_file を file_exists に変更してはどうでしょうか?上記のコードの is_file 関数を file_exists 関数に変更し、上記のテスト メソッドを再度使用してテストできます。結果は次のとおりです: test.txt は存在します!
test.txt は存在しません!
file_exists を 2 回呼び出すと、ファイルが存在しないことが返されます。これは、file_exists 関数がキャッシュされていないためです。 file_exists の場合、ファイルが存在するかどうかをディスク
で検索するため、2 回目のみ false を返します。
そのため、file_exists の代わりに is_file を使用することはできません
以上がis_file() 関数が file_exists() 関数を置き換えることができない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。