Wie überprüfe ich, ob eine (nicht verwaltete) Datei existiert?


18

Ich kann in D7 keine Drupal-API-Funktion finden, die angibt, ob eine (nicht verwaltete) Datei vorhanden ist. D6 hatte einen file_check_location aber nicht für 7.

Wie überprüfe ich, ob eine (nicht verwaltete) Datei existiert?

Antworten:


35

Sie könnten einfach die alte Standard-PHP-Funktion verwenden, file_exists()wenn ich Sie richtig verstehe:

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

Dies funktioniert auch für normale (absolute) Pfade, zB:

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

Clive wieder zur Rettung, danke! Kann ich Sie einstellen? ;-)
uwe

6
@MotoTribe Hängt davon ab, wie viel Sie anbieten;)
Clive

Warum funktioniert das? Ich habe dies gerade mit einfachem PHP und einem darin geworfenen Stream-Handle getestet file_exists()und es funktioniert nicht . Irgendeine Erklärung?
Kaiser

Weil die Streams von Drupal @kaiser richtig registriert wurden. Siehe php.net/manual/en/wrappers.php
Clive

@Clive Ich hoffte, Sie können mich auf die Quelle in Drupal verweisen. Den Rest kenne ich und kann nicht in einem einfachen PHP-Test arbeiten, daher habe ich gefragt. Edit: nvm, fand sie
Kaiser

3

Ich weiß nicht, was Ihr spezifischer Anwendungsfall ist, aber Sie müssen möglicherweise nicht überprüfen, ob die Datei vorhanden ist.

Die Funktionen file_unmanaged_copy, file_unmanaged_move, file_unmanaged_delete, file_unmanaged_delete_recursive und file_unmanaged_save_data prüfen, ob die Datei existiert, und geben false zurück, wenn dies nicht der Fall ist.

Sie finden den Quellcode in drupal / includes / file.inc und werfen einen Blick darauf.


3

Sie sollten die Drupal-Funktion verwenden:

file_destination ($ uri, FILE_EXISTS_ERROR)

und prüfe

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

1
Es wird als file_destination()Verwendungszweck file_exists()funktionieren
milkovsky
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.