(管理されていない)ファイルが存在するかどうかを確認する方法は?


18

(管理されていない)ファイルが存在するかどうかを通知するDrupal API関数がD7に見つかりません。D6にはfile_check_locationがありましたが、7にはありませんでした。

(管理されていない)ファイルが存在するかどうかを確認する方法は?

回答:


35

あなたがfile_exists()正しいことを理解していれば、古い沼地の標準PHP関数を使用することができます:

$uri = 'public://images/an-image.jpg';
if (file_exists($uri)) {
  // Do something
}

これは通常の(絶対)パスでも同様に機能します。例:

$path = '/var/www/drupal/sites/default/files/images/an-image.jpg';
if (file_exists($path)) {
  // Do something
}

助けてくれてありがとう あなたを雇ってもいいですか?;-)
uwe

6
@MotoTribeは提供する金額に依存します;)
クライヴ

なぜこれが機能するのですか?これをプレーンPHPとストリームハンドルでテストしましたがfile_exists()、機能しませ。説明はありますか?
カイザー

ストリームはDrupal @kaiserによって適切に登録されているためです。参照してくださいphp.net/manual/en/wrappers.php
クライヴ

@Clive Drupalのソースを教えていただければ幸いです。私が知っている残りの部分は、単純なPHPテストで動作することができないので、尋ねました。編集: NVMは、それら見つかった
カイザー

3

特定のユースケースが何であるかはわかりませんが、ファイルが存在するかどうかを確認する必要はないかもしれません。

関数file_unmanaged_copy、file_unmanaged_move、file_unmanaged_delete、file_unmanaged_delete_recursive、file_unmanaged_save_dataは、ファイルが存在するかどうかを確認し、存在しない場合はfalseを返します。

ソースコードはdrupal / includes / file.incにあり、ご覧ください。


3

drupal関数を使用する必要があります。

file_destination($ uri、FILE_EXISTS_ERROR)

そしてチェック

if (!file_destination($uri, FILE_EXISTS_ERROR)) {
  // The file exist
  // Do something
} 

1
それはように動作しますfile_destination()用途のfile_exists()機能
milkovsky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.