ホームページ  >  記事  >  バックエンド開発  >  PHPにファイルが存在するかどうかを確認する方法

PHPにファイルが存在するかどうかを確認する方法

PHPz
PHPzオリジナル
2023-08-26 12:29:231756ブラウズ

PHPにファイルが存在するかどうかを確認する方法

多くの場合、PHP でファイルを移動したり、ファイルにデータを保存したりする必要があります。いずれの場合も、ファイルが存在するかどうかを事前に把握しておくと、予期しない動作を回避できます。

PHP には、ファイルに関連するさまざまな種類のクエリを処理するためのさまざまな関数が付属しています。このチュートリアルでは、状況に最も適した機能を選択できるように、これらすべての機能の概要を説明します。

ファイルが存在するかどうかの確認の重要性

多くの場合、他の操作を実行する前にファイルが存在するかどうかを確認することが重要です。 Web サイトで、ユーザーが後でアクセスできるように画像ファイルをサーバーにアップロードできるとします。多くのユーザーがサービスを使用して複数のファイルを頻繁にアップロードしている場合、ファイル名の競合の可能性が常にあると考えるのが妥当です。

この場合、ユーザーが最後にアップロードしたファイルを保存する場所に別のファイルが既に存在するかどうかを確認することが重要になります。その後、ファイルの名前を別の名前に変更するか、アップロードすると既存のファイルが上書きされることをユーザーに通知するなどの手順を実行することを選択できます。

PHP でファイルにデータを追加する必要がある別のシナリオを考えてみましょう。すべてのデータを書き込むために作成したファイルが何らかの理由で削除された場合、file_put_contents() のような関数は、指定された名前で新しいファイルを作成し、新しく作成されたファイルにデータを保存します。これが望ましい場合もありますが、常にそうであるとは限りません。したがって、データの書き込みを開始する前にファイルが存在することがすでに予想されている場合は、事前にファイルが存在するかどうかを確認することが合理的です。

PHPにファイルが存在するかどうかを確認する

PHP にファイルが存在するかどうかを確認するには、3 つの異なる関数を使用できます。

最初の関数は file_exists() です。この関数は、ファイルが存在するパスである 1 つのパラメータを受け入れます。既存のファイルとディレクトリに対して true を返すことに注意してください。これはニーズにとって十分でない場合もあります。

指定したパスがディレクトリではなくファイルを指していることを確認したい場合は、is_file() 関数の使用を検討してください。同様に、is_dir() 関数を使用して、指定したパスが存在し、ディレクトリを指しているかどうかを確認できます。

リーリー 出力 リーリー

上の例では、指定されたファイル名が実際にファイル名またはディレクトリであると想定せず、独自のチェックを行うことが重要であることを示すために、ディレクトリの 1 つに意図的に squares.zip という名前を付けています。

##is_file()is_dir() は、親ディレクトリに適切なアクセス許可がない場合でも、false を返すことに留意することが重要です。実際に存在する道もこんな感じです。

ファイルが存在し、読み取りおよび書き込み可能かどうかを確認してください

is_read() および is_writable() という名前の他の 2 つの関数を使用すると、ファイルが存在するかどうかを確認するだけでなく、ファイルに関する追加情報を取得できます。

名前が示すように、

is_read() 関数は 2 つのことをチェックします。1 つはファイルまたはディレクトリが実際に存在するか、2 つ目はファイルが読み取り可能であるかです。同様に、is_writable() 関数も、ファイルまたはディレクトリが存在することと、書き込み可能であることの 2 つのことをチェックします。 リーリー

出力 リーリー これら 2 つの関数の戻り値を解釈するときは注意することをお勧めします。たとえば、

is_read() が false を返した場合、私たちは最初に、クエリしているファイルが読み取り可能ではないと本能的に考えます。ただし、この関数は、ファイルが存在しない場合にも false を返します。これらの機能のこの側面を常に念頭に置くことが重要です。

キャッシュされた結果に注意してください

5 つの関数すべてを呼び出して返される戻り値、つまり

file_exists()is_file()is_dir()is_read ( ) および is_writeable()—キャッシュされます。これは、関数 (is_file() など) を繰り返し呼び出すと、古い結果が表示される可能性があることを意味します。

PHP はパフォーマンスを向上させるために、これらの関数の結果をキャッシュします。これにより、同じファイルをクエリする複数の呼び出しがより高速に実行されます。ただし、スクリプト実行中にファイルが変更されても、戻り値は変わりません。

既存のファイルの結果のみをキャッシュします。これは、関数

is_file() を呼び出すと、存在しないファイルに対しては false を返し続けるが、ファイルが作成されると true を返し始めることを意味します。 。一方、最初の呼び出し時に存在していたファイルの場合、ファイルが削除された場合でも、関数は引き続き true を返します。 リーリー

実際に存在するファイルに対して上記のコード スニペットを実行し、スクリプトの待機中にそのファイルを手動で削除した場合でも、

is_file() を呼び出しても true が返されます。ただし、ファイルが存在するかどうかを再度クエリする前に clearstatcache() を呼び出すだけで、正しい結果が得られます。 输出

"squares.txt" is indeed a file.
"squares.txt" is indeed a file.
The file probably no longer exists.

要记住的另一件事是,调用 unlink() 会自动清除缓存,因此稍后调用 is_file() 等函数时会得到新的结果。

最终想法

本教程首先介绍了检查 PHP 中文件是否存在的重要性。之后,我们了解了可用于检查 PHP 中文件是否存在的不同函数。我们还了解了其中一些功能可能具有的优点和缺点。

正如我在最后提到的,PHP 将缓存其中一些函数调用的结果以提高性能。因此,请确保在对这些文件执行重要操作之前清除缓存。

以上がPHPにファイルが存在するかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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