Bagaimana cara memeriksa apakah file (tidak dikelola) ada?

18

Saya tidak dapat menemukan fungsi Drupal API di D7 yang memberitahu saya jika ada file (tidak dikelola). D6 memiliki file_check_location tetapi tidak untuk 7.

Bagaimana cara memeriksa apakah file (tidak dikelola) ada?

kamu
sumber

Jawaban:

35

Anda bisa menggunakan fungsi PHP standar rawa lama file_exists()jika saya mengerti Anda benar:

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

Ini juga berfungsi untuk jalur normal (absolut) juga, misalnya:

$path = '/var/www/drupal/sites/default/files/images/an-image.jpg';
if (file_exists($path)) {
  // Do something
}
Clive
sumber
Clive untuk menyelamatkan lagi, terima kasih! Bisakah saya mempekerjakan Anda? ;-)
uwe
6
@MotoTribe Tergantung berapa banyak yang Anda tawarkan;)
Clive
Mengapa ini bekerja? Saya baru saja menguji ini dengan PHP biasa dan stream handle yang dimasukkan file_exists()dan tidak berfungsi. Ada penjelasan?
kaiser
Karena stream telah didaftarkan dengan benar oleh Drupal @kaiser. Lihat php.net/manual/en/wrappers.php
Clive
@Clive Saya harap Anda bisa mengarahkan saya ke sumber di Drupal. Selebihnya saya tahu dan tidak bisa bekerja dalam tes PHP biasa, maka saya bertanya. Sunting: nvm, temukan mereka
kaiser
3

Saya tidak tahu apa itu use case khusus Anda, tetapi Anda mungkin tidak perlu memeriksa untuk melihat apakah file tersebut ada.

Fungsi file_unmanaged_copy, file_unmanaged_move, file_unmanaged_delete, file_unmanaged_delete_recursive, dan file_unmanaged_save_data memeriksa untuk melihat apakah file itu ada dan mengembalikan false jika tidak.

Anda dapat menemukan kode sumber di drupal / include / file.inc dan lihatlah.

Dan Meigs
sumber
3

Anda harus menggunakan fungsi drupal:

file_destination ($ uri, FILE_EXISTS_ERROR)

dan cek

if (!file_destination($uri, FILE_EXISTS_ERROR)) {
  // The file exist
  // Do something
} 
Ehud Shahak
sumber
1
Ini akan berfungsi sebagai fungsi file_destination()gunakanfile_exists()
milkovsky