HOWTO · PHP

Prüfen, ob Datei in PHP vorhanden ist

Dieser Artikel stellt vor, wie man in PHP prüfen kann, ob eine Datei existiert. Er beinhaltet die Funktion file_exists().

Auf dieser Seite

Mit PHPs file_exists() lässt sich prüfen, ob ein Pfad aktuell auf eine vorhandene Datei oder ein Verzeichnis verweist. Die Funktion gibt einen booleschen Wert zurück, anhand dessen Sie entscheiden können, was als Nächstes geschehen soll. Die Prüfung beschreibt den Zustand des Pfads zu diesem Zeitpunkt; sie garantiert nicht, dass ein späterer Dateivorgang erfolgreich ist.

Prüfen, ob ein Pfad mit file_exists() existiert

Übergeben Sie den Pfad als Zeichenfolge. Dieses eigenständige Beispiel erstellt eine temporäre Datei, prüft sie und entfernt sie anschließend. Der Erfolgszweig ist daher nicht von einer bereits vorhandenen Projektdatei abhängig.

Führen Sie dieses Beispiel aus. Die Meldungen im unveränderten Code sind englisch: Je nach Prüfergebnis wird ausgegeben, dass die Datei bereit ist oder nicht gefunden wurde.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

$directory = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'file-exists-' . uniqid('', true);
mkdir($directory);
$file = $directory . DIRECTORY_SEPARATOR . 'example.txt';
file_put_contents($file, 'Ready');

if (file_exists($file)) {
    echo "File is ready.\n";
} else {
    echo "File was not found.\n";
}

unlink($file);
rmdir($directory);

Für dieses Beispiel wird kein konkretes Ausgabeergebnis behauptet, da dieses Paket keinen Ausführungsnachweis enthält. Verwenden Sie in Ihrem eigenen Code dasselbe bedingte Muster mit dem Pfad, den Sie prüfen möchten. Ein Ergebnis von true bedeutet, dass der Pfad vorhanden ist; bei false wurde er von PHP zum Prüfzeitpunkt nicht gefunden.

Dateien und Verzeichnisse unterscheiden

file_exists() gibt auch für ein Verzeichnis true zurück. Wenn der nächste Schritt ausdrücklich ein Verzeichnis voraussetzt, prüfen Sie es mit is_dir(); für eine reguläre Datei verwenden Sie is_file(). Diese Prüfungen beantworten unterschiedliche Fragen: Allein aus der Existenz lässt sich der Typ des Pfads nicht ableiten.

Die Meldungen im unveränderten Codebeispiel sind englisch. Es gibt aus, ob der Pfad auf ein Verzeichnis oder eine Datei verweist oder ob an diesem Pfad weder eine Datei noch ein Verzeichnis gefunden wurde.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

$path = __DIR__ . DIRECTORY_SEPARATOR . 'uploads';

if (is_dir($path)) {
    echo 'The path is a directory.';
} elseif (is_file($path)) {
    echo 'The path is a file.';
} else {
    echo 'No file or directory was found at this path.';
}

Der Pfad wird aus __DIR__ zusammengesetzt. Diese Konstante verweist auf das Verzeichnis, in dem sich die aktuelle PHP-Datei befindet. Ersetzen Sie die letzte Pfadkomponente durch den Speicherort, den Ihre Anwendung prüfen soll.

Pfade und Prüfergebnisse sicher handhaben

Ein relativer Pfad wird im Kontext des laufenden PHP-Prozesses ausgewertet. Daher kann dieselbe Zeichenfolge auf unterschiedliche Speicherorte verweisen, wenn sich das Arbeitsverzeichnis unterscheidet. Ein absoluter Pfad beginnt an der Wurzel des Dateisystems und macht den gewünschten Speicherort eindeutig. Wenn ein relativer Pfad zu einem unerwarteten Ergebnis führt, prüfen Sie, welchen Pfad PHP verwendet – bei der Fehlersuche können Sie ihn beispielsweise mit getcwd() ergänzen – oder setzen Sie ihn ausgehend von einem bekannten Verzeichnis wie __DIR__ zusammen.

Nutzen Sie die Prüfung, um einen sinnvollen nächsten Schritt auszuwählen, behandeln Sie den anschließenden Vorgang aber als fehleranfällig. Der Pfad kann sich nach der Prüfung ändern, und seine Existenz bedeutet nicht, dass der Prozess ihn lesen, beschreiben oder anderweitig verwenden kann. Prüfen Sie auch das Ergebnis des tatsächlichen Vorgangs und behandeln Sie Fehler entsprechend den Anforderungen Ihrer Anwendung.

Häufige Einschränkungen und Fehlersuche

Wenn file_exists() unerwartet false zurückgibt, prüfen Sie die Schreibweise und den Aufbau des Pfads. Vergewissern Sie sich anschließend, dass er in der Umgebung des PHP-Prozesses auf den gewünschten Speicherort verweist. Berücksichtigen Sie auch, ob sich der Pfad zwischen den Prüfungen geändert hat oder ob der laufende Prozess den betreffenden Speicherort im Dateisystem prüfen kann. Die Funktion meldet das Ergebnis ihrer Pfadprüfung; sie ermittelt nicht die Ursache für ein negatives Ergebnis.

Das PHP-Handbuch beschreibt file_exists() als Prüfung, ob eine Datei oder ein Verzeichnis vorhanden ist, und weist darauf hin, dass das Ergebnis vom konfigurierten Dateisystemkontext abhängt. Verwenden Sie die Funktion nicht als Prüfung der Verfügbarkeit entfernter Ressourcen. Nutzen Sie dafür den passenden Mechanismus des jeweiligen Protokolls oder Dienstes. Im PHP-Handbuch zu file_exists() finden Sie Angaben zum Parameter, Rückgabewert und weitere Hinweise.

Gehen Sie bei wiederholten Prüfungen nicht davon aus, dass ein früheres Ergebnis weiterhin gilt. Führen Sie nach Möglichkeit den benötigten Vorgang aus und behandeln Sie dessen Ergebnis direkt. So bleibt Ihr Programm korrekt, wenn sich das Dateisystem zwischen Prüfung und Vorgang ändert.