Jak sprawdzić, czy istnieje plik (niezarządzany)?

18

Nie mogę znaleźć funkcji API Drupal w D7, która mówi mi, czy istnieje plik (niezarządzany). D6 miał lokalizację sprawdzania_pliku, ale nie dla 7.

Jak sprawdzić, czy istnieje plik (niezarządzany)?

uwe
źródło

Odpowiedzi:

35

Możesz po prostu użyć starej standardowej funkcji PHP, file_exists()jeśli dobrze rozumiem:

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

Działa to również dla normalnych (absolutnych) ścieżek, np .:

$path = '/var/www/drupal/sites/default/files/images/an-image.jpg';
if (file_exists($path)) {
  // Do something
}
Clive
źródło
Clive na ratunek, dzięki! Czy mogę Cię zatrudnić? ;-)
uwe
6
@MotoTribe Zależy, ile oferujesz;)
Clive
Dlaczego to działa? Właśnie przetestowałem to z prostym PHP i wrzuconym uchwytem strumienia file_exists()i to nie działa. Jakieś wyjaśnienie?
kaiser
Ponieważ strumienie zostały poprawnie zarejestrowane przez Drupal @kaiser. Zobacz php.net/manual/en/wrappers.php
Clive
@Clive Miałem nadzieję, że możesz wskazać mi źródło w Drupal. Resztę znam i nie mogę pracować w zwykłym teście PHP, dlatego zapytałem. Edytuj: nvm, znalazłem ich
Kaiser
3

Nie wiem, jaki jest konkretny przypadek użycia, ale może nie być konieczne sprawdzenie, czy plik istnieje.

Funkcje file_unmanaged_copy, file_unmanaged_move, file_unmanaged_delete, file_unmanaged_delete_recursive i file_unmanaged_save_dcursive sprawdzają, czy plik istnieje i zwraca false, jeśli nie istnieje.

Możesz znaleźć kod źródłowy w drupal / include / file.inc i zajrzyj.

Dan Meigs
źródło
3

Powinieneś użyć funkcji drupal:

nazwa_pliku ($ uri, FILE_EXISTS_ERROR)

i zaznacz

if (!file_destination($uri, FILE_EXISTS_ERROR)) {
  // The file exist
  // Do something
} 
Ehud Shahak
źródło
1
Będzie działać jako funkcja file_destination()użytkowafile_exists()
Milkovsky