ホームページ >バックエンド開発 >PHPチュートリアル >PHP における is_file と file_exists の違い、is_file が file_exits を置き換えられない理由
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 が再度呼び出されたとき、ファイル名が最初と同じであれば、そのファイルは直接キャッシュに返されます。