W3docs

Der ultimative Leitfaden zur PHP-Funktion basename()

Erfahren Sie, wie die PHP-Funktion basename() Dateipfade verarbeitet, Dateinamen extrahiert und Suffixe entfernt – mit praxisnahen Beispielen.

Früher oder später werden Sie in Ihrer PHP-Entwicklung Dateipfade verarbeiten müssen. Ob es darum geht, den Namen einer Datei, ihre Erweiterung oder das übergeordnete Verzeichnis zu ermitteln – Sie werden viel mit Dateipfaden arbeiten. Eine der am häufigsten verwendeten Funktionen dafür ist PHPs basename()-Funktion.

In diesem Leitfaden tauchen wir tief in die basename()-Funktion ein und behandeln alles, was Sie wissen müssen, um sie effektiv in Ihren PHP-Projekten einzusetzen.

Was ist die Funktion basename()?

Die basename()-Funktion ist eine eingebaute PHP-Funktion, die die letzte Namenskomponente eines Dateipfads zurückgibt. Einfacher ausgedrückt: Sie gibt den Namen einer Datei oder eines Verzeichnisses aus einem angegebenen Pfad zurück.

Die Syntax für die Verwendung der basename()-Funktion lautet wie folgt:

Die Syntax der PHP-Funktion basename()

basename( string $path, string $suffix );

Die Funktion nimmt zwei Parameter entgegen:

  • $path – Der Pfad zu einer Datei oder einem Verzeichnis.
  • $suffix – Ein optionales Suffix, das vom Dateinamen entfernt werden soll.

Sehen wir uns einige Beispiele an, um zu verstehen, wie die Funktion funktioniert.

Beispiel der PHP-Funktion basename()

php— editable, runs on the server

Wie Sie sehen, gibt die basename()-Funktion den Namen der Datei oder des Verzeichnisses am Ende des Pfads zurück.

Wie funktioniert die Funktion basename()?

Die basename()-Funktion arbeitet durch reine String-Manipulation – sie greift niemals auf das Dateisystem zu. Sie sucht den letzten Verzeichnis-Separator im Pfad und gibt alles danach zurück. Da der Pfad nicht validiert wird, muss die Datei oder das Verzeichnis nicht existieren, damit basename() ein Ergebnis liefert.

Einige Verhaltensweisen sollten Sie sich merken:

  • Abschließende Separatoren werden entfernt. basename("/var/www/html/") gibt html zurück, keinen leeren string. Die Funktion entfernt abschließende Schrägstriche, bevor sie die letzte Komponente extrahiert.
  • Der Separator ist plattformabhängig. Auf Unix-ähnlichen Systemen wird nur / als Separator behandelt. Unter Windows werden sowohl / als auch \ erkannt. Das bedeutet, dass ein Windows-Pfad wie C:\xampp\app.php unter Linux/macOS unverändert zurückgegeben wird, da \ dort kein Separator ist.
  • Sie ist byte-orientiert, nicht „intelligent". basename() analysiert keine URLs. Die Übergabe von http://example.com/page.html?id=5 gibt page.html?id=5 zurück – der Query-String bleibt erhalten, weil er nach dem letzten / steht. Für URLs sollten Sie zunächst parse_url() verwenden.

Wenn der optionale Parameter $suffix angegeben wird, wird dieses Suffix vom Ende des Dateinamens entfernt, bevor er zurückgegeben wird.

Suffixe mit $suffix entfernen

Das zweite Argument erlaubt es, ein bekanntes Suffix – meistens eine Dateiendung – in einem Schritt zu entfernen:

<?php

echo basename("/uploads/2024/report.final.pdf") . PHP_EOL;            // report.final.pdf
echo basename("/uploads/2024/report.final.pdf", ".pdf") . PHP_EOL;    // report.final
echo basename("/home/user/archive.tar.gz", ".tar.gz") . PHP_EOL;      // archive

Zwei Fallstricke, über die viele stolpern:

  • Der Vergleich ist Groß-/Kleinschreibung-sensitiv. basename("/img/PHOTO.PNG", ".png") gibt PHOTO.PNG unverändert zurück, weil .PNG.png. Normalisieren Sie die Schreibweise zuerst, oder übergeben Sie das Suffix genau so, wie es im Dateinamen vorkommt.
  • Es wird nur das Suffix entfernt, niemals eine „echte" Erweiterung. Wenn Sie die Erweiterung selbst oder den Namen ohne jede beliebige Erweiterung benötigen, verwenden Sie stattdessen pathinfo() – es versteht Erweiterungen:
<?php

$path = "/path/to/archive.tar.gz";

echo pathinfo($path, PATHINFO_FILENAME) . PHP_EOL;   // archive.tar
echo pathinfo($path, PATHINFO_EXTENSION) . PHP_EOL;  // gz

Warum ist die Funktion basename() nützlich?

Die basename()-Funktion ist äußerst nützlich beim Arbeiten mit Dateipfaden in PHP. Häufige Anwendungsfälle sind:

  • Den Namen einer Datei ermitteln, um ihn Benutzern anzuzeigen.
  • Die Dateiendung aus einem Dateinamen entfernen.
  • Den Namen des Verzeichnisses ermitteln, das eine Datei enthält.

Durch die Verwendung der basename()-Funktion können Sie Dateipfade einfach bearbeiten, um die benötigten Informationen zu erhalten.

Praxisbeispiel: ein sicherer Download-Name

Eine häufige Aufgabe besteht darin, einen serverseitigen Dateipfad zu nehmen und dem Benutzer nur den Dateinamen anzuzeigen – zum Beispiel in einem Download-Header. basename() ist das richtige Werkzeug, weil es den Verzeichnisanteil unabhängig von der Tiefe des Pfads verwirft:

<?php

$storedPath = "/var/www/storage/invoices/2024/INV-00042.pdf";
$downloadName = basename($storedPath);

header("Content-Disposition: attachment; filename=\"$downloadName\"");
// filename="INV-00042.pdf"

Dies ist auch für die Sicherheit relevant: Wenn ein Pfad aus Benutzereingaben aufgebaut wird, reduziert basename() etwaige ../-Traversal-Segmente auf einen einzelnen Namen, was es zu einem nützlichen Schutz gegen Directory-Traversal macht, wenn Sie nur einen reinen Dateinamen benötigen.

Best Practices für die Verwendung der Funktion basename()

Bei der Verwendung der basename()-Funktion in Ihren PHP-Projekten gibt es einige Best Practices zu beachten.

Immer die Funktion basename() zur Dateinamen-Extraktion verwenden

Verwenden Sie beim Extrahieren von Dateinamen aus Pfaden immer die basename()-Funktion. Obwohl es möglich ist, String-Manipulationsfunktionen für das gleiche Ergebnis zu verwenden, ist die basename()-Funktion zuverlässiger und effizienter.

Vorsicht mit dem Parameter $suffix

Wenn Sie den Parameter $suffix zum Entfernen einer Dateiendung verwenden, stellen Sie sicher, dass Sie den führenden Punkt . einschließen und dass er exakt mit den abschließenden Zeichen übereinstimmt. Der Vergleich ist Groß-/Kleinschreibung-sensitiv, und das Suffix wird nur entfernt, wenn es exakt mit dem Ende des Dateinamens übereinstimmt.

Fehler sorgfältig behandeln

Wenn die basename()-Funktion auf einen Fehler stößt (z. B. einen leeren Pfad), gibt sie einen leeren string "" zurück. Stellen Sie sicher, dass Sie dies in Ihrem Code sorgfältig behandeln, um unerwartetes Verhalten zu vermeiden.

Fazit

Die basename()-Funktion ist ein leistungsstarkes Werkzeug für die Arbeit mit Dateipfaden in PHP. Wenn Sie verstehen, wie sie funktioniert, und Best Practices für ihre Verwendung befolgen, können Sie Ihre PHP-Entwicklungsprojekte effizienter und zuverlässiger gestalten.

Mit diesem Leitfaden sollten Sie nun ein umfassendes Verständnis der basename()-Funktion haben und sie effektiv in Ihren PHP-Projekten einsetzen können.

Das folgende Diagramm fasst zusammen, wie basename() einen Pfad auflöst:

graph TD;
    A[Path] --> B{basename()};
    B -->|No suffix| C[File name];
    B -->|With suffix| D[File name without suffix];

Verwandte Funktionen

basename() ist eine von mehreren PHP-Funktionen für die Arbeit mit Pfaden. Greifen Sie auf eine andere zurück, wenn Sie Folgendes benötigen:

  • dirname() — den Verzeichnis-Teil eines Pfads (das Gegenteil von basename()).
  • pathinfo() — Verzeichnis, Dateiname, Basisname und Erweiterung auf einmal.
  • realpath() — den absoluten, kanonischen Pfad mit aufgelösten Symlinks.
  • file_exists() — um zu prüfen, ob der Pfad tatsächlich auf eine echte Datei oder ein Verzeichnis zeigt.

Übung

Übung
Was ist die Funktionalität der Funktion 'basename' in PHP?
Was ist die Funktionalität der Funktion 'basename' in PHP?
Was this page helpful?