ホームページ  >  記事  >  バックエンド開発  >  is_file() 関数が file_exists() 関数を置き換えることができない理由

is_file() 関数が file_exists() 関数を置き換えることができない理由

怪我咯
怪我咯オリジナル
2017-07-11 10:52:462277ブラウズ

本当に

file_exists の代わりに is_file を使用できますか?答えは否定的です。なぜ?理由は簡単で、is_file には キャッシュがあるためです

次のコードを使用してテストできます:

コードは次のとおりです:

<?php  
      $filename = &#39;test.txt&#39;;
      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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。