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)?

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 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.


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
} 

1
Będzie działać jako funkcja file_destination()użytkowafile_exists()
Milkovsky
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.