web-dev-qa-db-ja.com

file_exists()またはis_読み取り可能()

PHPファイルを含める場合はどちらを使用する必要がありますか?

if(file_exists($file) require "$file";

または

if(is_readable($file) require "$file";

27
Co za asy...

file_exists()またはis_readable()
PHPファイルを含める場合はどちらを使用する必要がありますか?

これは、onlyファイルまたはディレクトリが存在するかどうか、またはどちらかが問題ないかどうか、および読み取り可能かどうかを確認する必要があります。

ファイルやディレクトリの存在だけを気にし、読み取る必要がない場合もあれば、読み取る必要がある場合もあります。

オプション

file_exists()

ファイルまたはディレクトリが存在するかどうかを確認します。

fileが存在するかどうかだけを明示的に知りたい場合は、ディレクトリの場合はtrueを返すのと同様に、誤検知を返します。

is_読み取り可能()

fileまたはdirectoryが存在し、読み取り可能かどうかを示します。

ファイルが読み取り可能かどうかだけを明示的に知りたい場合は、ディレクトリの場合にtrueを返す可能性があるため、誤検知が返される可能性があります。


あなたが言及していないが、おそらく必要な追加のオプション:

is_file()

それが存在し、通常のファイル(ディレクトリではない)であるかどうかを示します。

is_dir()

それが存在し、ディレクトリ(ファイルではない)であるかどうかを示します。

ソリューションと回答

存在を確認したい場合:

  1. ファイルのみです:is_file()を使用してください
  2. ディレクトリのみです:is_dir()を使用します
  3. ファイルまたはディレクトリです:file_exists()を使用します

存在し、読み取り可能であることを確認したい場合:

  1. そして、ファイルのみです:is_file()is_readable()を使用します
  2. そして、dirだけです:is_dir()is_readable()を使用してください
  3. そして、ファイルまたはディレクトリです:is_readable()を使用します

file_exists()is_readable()もチェックするため、is_readable()file_exists()を一緒に使用する必要はありません。
is_readable()is_file()またはis_dir()のペアリングは、特に読み取り可能かどうかを確認するだけですファイルのみ、または具体的にはディレクトリのみ。


に依存する

ほとんどのPHPおよび「最良のアプローチ/関数/ etcは何ですか」と同様に-それはシナリオによって異なります。

システムがハングするかどうかを管理するためにrequireだけに依存することは、実際には役に立ちません。必要なファイルが利用できないと想像してください。PHP requireが失敗すると停止しますが、ファイルは単なる記事の画像またはユーザーのアバターです。サイトのナビゲーション、ロゴ、リンクを提供したくないのですか?記事の画像がないという理由だけで、あらゆる種類のページテキストとコンテンツ?

重要:
ファイルがデータベース接続クラスであり、ページコンテンツ全体の提供を許可している場合、ファイルが存在しない場合は、システムを停止する必要があります。
もちろん、404ページの提供や、「申し訳ありませんが、エラーが発生しました。調査します」などのエラーメッセージなど、何らかの出口戦略が必要です。

非重要:
ファイルが存在しないこと、または少なくともアプリケーションの他の部分に悪影響を及ぼさないことが有効な場合があります。
画像ファイルが存在しない場合など、メッセージやデフォルトの画像を提供できます。たとえば、ユーザーアバターが見つからない場合は、デフォルトのアバターが表示されます。

28
James

答えは:is_読み取り可能()です。

bool is_読み取り可能(文字列$ filename)

ファイルが存在し、読み取り可能かどうかを示します。

http://us3.php.net/manual/en/function.is-written.php

9
Dan Spiteri

ファイルをrequireに移動する場合、エラーチェックに意味はありません。 requireの代わりにincludeを使用するポイントは、ファイルが存在しないときにスクリプトの実行を停止することです。

ファイルが存在するかどうかを気にしない場合は、includeを使用してください。

6
Brian Graham
if(is_file($file) && is_readable($file))

is_writtenはディレクトリにも当てはまるから

4
pulsit