28

PHP ファイルをインクルードする場合、どちらを使用する必要がありますか?

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

また

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

?

4

4 に答える 4

37

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

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

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

オプション

ファイルが存在しています()

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

ファイルが存在するかどうかだけを明示的に知りたい場合、これは偽陽性を返し、ディレクトリの場合は true を返します。

is_readable()

ファイルまたはディレクトリが存在し、読み取り可能 かどうかを示します。

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


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

is_file()

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

is_dir()

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

解決策と答え

存在を確認したい場合:

  1. ファイルのみです: 使用is_file()
  2. ディレクトリのみです: 使用is_dir()
  3. ファイルかディレクトリか: 使用file_exists()

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

  1. And はファイルのみです: and を使用is_file()しますis_readable()
  2. is_dir()Andは dir のみです:is_readable()
  3. And is file or dir: 使用is_readable()

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


require に依存する

ほとんどの PHP と「最善のアプローチ/関数/などは何か」と同様に、シナリオによって異なります。

requireシステムがハングするかどうかを管理するためだけに頼っていても、あまり役に立ちません。必要なファイルが利用できないため、require が失敗すると PHP が停止しますが、ファイルは単なる記事の画像またはユーザーのアバターであ​​ると想像してください。欠品画像の?

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

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

于 2015-06-05T19:16:49.883 に答える
9

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

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

于 2011-07-07T01:00:08.760 に答える
9

答えはis_readable()です。

bool is_readable (文字列 $filename )

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

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

于 2011-07-07T03:37:21.697 に答える
7
if (is_file($file) && is_readable($file))

ディレクトリにも使用is_readable($file)できるためです。true

于 2015-04-08T14:10:37.200 に答える