Advertisement
  1. Code
  2. PHP

So überprüfen Sie mit PHP, ob eine Datei vorhanden ist

by
Read Time:5 minsLanguages:

German (Deutsch) translation by Ines Willenbrock (you can also view the original English article)

Oft müssen Sie entweder Dateien verschieben oder einige Daten in PHP speichern. In beiden Fällen kann es uns helfen, im Voraus zu wissen, ob eine Datei existiert oder nicht, um unerwartetes Verhalten zu vermeiden.

PHP verfügt über eine Vielzahl von Funktionen, um verschiedene Arten von Abfragen im Zusammenhang mit Dateien zu verarbeiten. In diesem Tutorial gebe ich Ihnen einen kurzen Überblick über all diese Funktionen, damit Sie eine auswählen können, die in Ihrer Situation am besten funktioniert.

Die Wichtigkeit der Überprüfung, ob eine Datei vorhanden ist

Es gibt viele Szenarien, in denen es wichtig sein könnte, zu überprüfen, ob eine Datei vorhanden ist, bevor etwas anderes getan wird. Nehmen wir an, Ihre Website ermöglicht es Benutzern, Bilddateien auf Ihren Server hochzuladen, auf die sie später zugreifen können. Es ist fair anzunehmen, dass es immer eine Chance auf einen kollidierenden Dateinamen gibt, wenn viele Benutzer Ihren Dienst verwenden, um mehrere Dateien häufig hochzuladen.

In solchen Fällen ist es wichtig zu überprüfen, ob sich bereits eine andere Datei an dem Speicherort befindet, an dem Sie die kürzlich hochgeladene Datei eines Benutzers speichern möchten. Sie haben dann die Möglichkeit, einige Schritte auszuführen, z. B. die Datei in etwas anderes umzubenennen oder den Benutzer wissen zu lassen, dass sein Upload eine vorhandene Datei überschreibt.

Betrachten wir eine andere Situation, in der Sie Daten an eine Datei in PHP anhängen sollen. Wenn die Datei, die Sie erstellt haben, um alle Ihre Daten zu schreiben, aus irgendeinem Grund gelöscht wird, erstellen Funktionen wie file_put_contents() einfach eine neue Datei mit dem angegebenen Namen und speichern Ihre Daten in der neu erstellten Datei. Dies mag in einigen Situationen wünschenswert sein, aber das wird nicht immer der Fall sein. Es ist also sinnvoll, vorher zu prüfen, ob die Datei existiert, wenn Sie bereits erwarten, dass sie vorhanden ist, bevor Sie mit dem Schreiben Ihrer Daten beginnen.

Überprüfen, ob eine Datei vorhanden ist mit PHP

Es gibt drei verschiedene Funktionen, mit denen Sie mit PHP überprüfen können, ob eine Datei vorhanden ist.

Die erste Funktion ist file_exists(). Diese Funktion akzeptiert einen einzelnen Parameter, der der Pfad ist, in dem sich Ihre Datei befindet. Beachten Sie, dass es sowohl für vorhandene Dateien als auch für Verzeichnisse true zurückgegeben wird. Dies kann für Ihre Bedürfnisse ausreichend sein oder auch nicht.

Sie können die Funktion is_file() verwenden, wenn Sie sicherstellen möchten, dass der angegebene Pfad auf eine Datei und nicht auf ein Verzeichnis verweist. Ebenso können Sie mit der Funktion is_dir() überprüfen, ob der angegebene Pfad vorhanden ist und auf ein Verzeichnis verweist.

Ausgabe

Im obigen Beispiel habe ich absichtlich eines der Verzeichnisse squares.zip genannt um zu zeigen, dass es wichtig ist, eigene Überprüfungen durchzuführen, anstatt davon auszugehen, dass der angegebene Dateiname tatsächlich ein Dateiname oder ein Verzeichnis ist.

Es ist wichtig, sich daran zu erinnern, dass sowohl is_file() als auch is_dir() auch für solche Pfade false zurückgeben, die tatsächlich vorhanden sind, wenn das übergeordnete Verzeichnis nicht über die richtigen Berechtigungen verfügt.

Überprüfen, ob Datei vorhanden ist und lesbar oder beschreibbar ist

Zwei weitere Funktionen namens is_readable() und is_writable() können verwendet werden, um zusätzliche Informationen über eine Datei zu erhalten, neben der Überprüfung, ob sie vorhanden ist.

Wie der Name schon sagt, überprüft die Funktion is_readable() zwei Dinge: Erstens, ob die Datei oder das Verzeichnis tatsächlich existiert, und zweitens, ob die Datei lesbar ist. Ebenso prüft die Funktion is_writable() auch zwei Dinge, ob die Datei oder das Verzeichnis existiert und beschreibbar ist.

Ausgabe

Ich würde Ihnen raten, bei der Interpretation des Rückgabewerts dieser beiden Funktionen vorsichtig zu sein. Zum Beispiel ist unser erster Instinkt, wenn is_readable() false zurückgibt, zu denken, dass die Datei, die wir abgefragt haben, nicht lesbar ist. Die Funktion gibt jedoch auch false zurück, wenn die Datei nicht vorhanden ist. Es ist wichtig, diesen Aspekt dieser Funktionen immer im Auge zu behalten.

Vorsicht vor zwischengespeicherten Ergebnissen

Der Rückgabewert, den Sie von einem Aufruf all dieser fünf Funktionen – nämlich file_exists(), is_file(), is_dir(), is_readable() und is_writeable() – erhalten, wird zwischengespeichert. Dies bedeutet, dass wiederholte Aufrufe einer Funktion, sagen wir is_file(), Ihnen veraltete Ergebnisse zeigen können.

PHP speichert die Ergebnisse dieser Funktionen zwischen, um die Leistung zu verbessern. Dadurch wird sichergestellt, dass mehrere Aufrufe zum Abfragen derselben Datei schneller funktionieren. Ihre Rückgabewerte bleiben jedoch auch dann gleich, wenn sich die Datei im Laufe der Skriptausführung ändert.

Die Ergebnisse werden nur für Dateien zwischengespeichert, die bereits vorhanden sind. Dies bedeutet, dass das Aufrufen einer Funktion is_file() weiterhin false für nicht vorhandene Dateien zurückgibt, aber true zurückgibt, sobald die Datei erstellt wird. Auf der anderen Seite gibt die Funktion weiterhin true für eine Datei zurück, die während des ersten Aufrufs vorhanden war, auch nachdem die Datei gelöscht wurde.

Wenn Sie den obigen Codeausschnitt für eine tatsächlich vorhandene Datei ausführen und diese dann manuell löschen, während das Skript wartet, gibt der Aufruf von is_file() immer noch true zurück. Sie können jedoch die richtigen Ergebnisse erzielen, indem Sie einfach clearstatcache() aufrufen, bevor Sie die Existenz der Datei erneut abfragen.

Ausgabe

Eine weitere Sache, die Sie beachten sollten, ist, dass ein Aufruf von unlink() den Cache automatisch löscht, so dass Sie später neue Ergebnisse für Aufrufe von Funktionen wie is_file() erhalten.

Abschließende Gedanken

Wir begannen dieses Tutorial, indem wir lernten, wie wichtig es ist, die Existenz von Dateien in PHP zu überprüfen. Danach lernten wir verschiedene Funktionen auf, mit denen Sie überprüfen können, ob eine Datei in PHP vorhanden ist. Wir haben auch die Vor- und Nachteile gelernt, die einige dieser Funktionen haben können.

Wie ich bereits gegen Ende erwähnt habe, speichert PHP die Ergebnisse einiger dieser Funktionsaufrufe zwischen, um die Leistung zu verbessern. Stellen Sie daher sicher, dass Sie den Cache leeren, bevor Sie etwas Wichtiges mit diesen Dateien tun.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.