Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

Dateipfad zerlegen mit pathinfo()

Sie befinden sich: Home > Php Tutorial > Dateipfad zerlegen mit...

Dateipfad zerlegen mit pathinfo()


Eintrag am:  12.08.2010
Hits / Besucher:  11582
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Wer mit Dateien arbeitet, braucht oft einzelne Bestandteile eines Pfades: nur den Dateinamen, nur die Endung oder nur das Verzeichnis. Die Funktion pathinfo() zerlegt einen Pfad in einem einzigen Aufruf in alle vier Teile.

Grundlegende Verwendung

Ohne weitere Parameter gibt pathinfo() ein assoziatives Array mit vier Einträgen zurück:

<?php

$pfad = '/var/www/html/bilder/foto.jpg';
$info = pathinfo($pfad);

echo $info['dirname']; // /var/www/html/bilder
echo $info['basename']; // foto.jpg
echo $info['extension']; // jpg
echo $info['filename']; // foto
?>

Die vier Schlüssel sind immer gleich: dirname für das Verzeichnis, basename für den vollständigen Dateinamen, extension für die Endung und filename für den Namen ohne Endung.

Einzelne Bestandteile gezielt abfragen

Wenn nur ein bestimmter Teil gebraucht wird, kann der zweite Parameter eine PATHINFO_*-Konstante erhalten. Dann gibt die Funktion direkt einen String statt eines Arrays zurück:

<?php

$pfad = '/uploads/dokumente/rechnung.pdf';

echo pathinfo($pfad, PATHINFO_EXTENSION);
/* Ausgabe: pdf */

echo pathinfo($pfad, PATHINFO_FILENAME);
/* Ausgabe: rechnung */

echo pathinfo($pfad, PATHINFO_DIRNAME);
/* Ausgabe: /uploads/dokumente */

echo pathinfo($pfad, PATHINFO_BASENAME);
/* Ausgabe: rechnung.pdf */
?>

Das ist kürzer und performanter als erst das komplette Array zu erzeugen und dann nur einen Wert zu lesen.

Sonderfälle beachten

Bei Dateien ohne Endung oder mit mehreren Punkten im Namen verhält sich pathinfo() folgendermaßen:

<?php

/* Datei ohne Endung */
$info = pathinfo('/etc/hosts');
echo $info['filename']; // hosts
echo isset($info['extension']) ? $info['extension'] : 'keine';
/* Ausgabe: keine */

/* Mehrere Punkte im Namen */
$info = pathinfo('archiv.2024.01.tar.gz');
echo $info['filename']; // archiv.2024.01.tar
echo $info['extension']; // gz
?>

Bei Dateien ohne Endung fehlt der Schlüssel extension im Array komplett. Deshalb sollte vor dem Zugriff mit isset() oder dem Null-Coalescing-Operator (??) geprüft werden. Bei mehreren Punkten wird nur der letzte Teil als Endung erkannt.

Praxisbeispiel: Upload-Dateityp prüfen

Ein häufiger Einsatz ist die Prüfung der Dateiendung bei Uploads:

<?php

$erlaubteEndungen = ['jpg', 'jpeg', 'png', 'gif', 'webp'];

$dateiname = $_FILES['bild']['name'];
$endung = strtolower(
pathinfo($dateiname, PATHINFO_EXTENSION)
);

if (!in_array($endung, $erlaubteEndungen, true)) {
die('Dateityp nicht erlaubt.');
}

/* Sicheren Dateinamen generieren */
$neuerName = uniqid('img_') . '.' . $endung;
?>

Mit PATHINFO_EXTENSION wird die Endung extrahiert und gegen eine Whitelist geprüft. Durch strtolower() werden auch Endungen wie .JPG oder .Png korrekt erkannt.

OOP-Alternative: SplFileInfo

Für objektorientierte Projekte bietet SplFileInfo die gleichen Informationen über Methoden statt Array-Zugriffe:

<?php

$datei = new SplFileInfo('/var/www/html/bild.jpg');

echo $datei->getPath(); // /var/www/html
echo $datei->getFilename(); // bild.jpg
echo $datei->getExtension(); // jpg
echo $datei->getBasename('.jpg'); // bild
?>

SplFileInfo bietet darüber hinaus weitere Methoden wie getSize(), isReadable() und getMTime(), die bei der Arbeit mit dem Dateisystem nützlich sind.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.