ホームページ >バックエンド開発 >PHPチュートリアル >PHP における is_file と file_exists の違い、is_file が file_exits を置き換えられない理由

PHP における is_file と file_exists の違い、is_file が file_exits を置き換えられない理由

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-28 08:28:221485ブラウズ

is_file は、ファイルが存在するかどうかを判断し、指定されたファイル名が通常のファイルであるかどうかを確認します。

file_exists はファイルまたはディレクトリが存在するかどうかを判断し、

is_dir はディレクトリが存在するかどうかを判断します。

これら 2 つの関数の結果はキャッシュされますが、is_file は N 倍高速です。

もう 1 つ注目すべき点があります。

ファイルが存在する場合、is_file は file_exists よりも N 倍高速です。

ファイルが存在しない場合、is_file は file_exists よりも遅くなります。

結論としては、file_exits 関数は実行されません。ファイルが実際に存在するかどうかは速度に影響しますが、is_file の方が大きな影響を与えます。


最初の質問は、本当に file_exists の代わりに is_file を使用できるのかということです。答えは否定的です。なぜ?理由は簡単で、is_file がキャッシュされているからです

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

コードをコピーしますコードは次のとおりです:

$filename = 'test. txt';
if ( is_file($filename)) {
echo "$filename が存在します!n";
} else {
echo "$filename は存在しません!n";
}
sleep(10);
if (is_file ($filename)) {
echo "$filename が存在します!n";
using using using using using '''' using '''' echo "'' ‑アウト アウト アウト アウト アウト アウト アウト アウト スルーアウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト クリーン アウトアウト アウト アウト アウト クリーン アウト アウト ライト クリーン アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウト アウトアウト上記のコードでは、is_file 関数を初めて使用してファイルが存在するかどうかを確認し、次に sleep 関数を呼び出して 10 秒間スリープします。この 10 秒以内に、test.txt ファイルを削除する必要があります。最後に、is_file 関数を 2 回目に呼び出した結果を確認します。出力結果は次のとおりです。
test.txt が存在します!
test.txt が存在します!
そうですね、「test.txt が存在します!」が 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 が返されます。
ここまで言っておきますが、is_file の方がパフォーマンスが良いと主張するのであれば、それは仕方ありません


上記は、PHP における is_file と file_exists の違いを紹介しており、is_file が file_exits を置き換えることができない理由も含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。

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