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
 
 
 

Verzeichnispfad ermitteln mit dirname()

Sie befinden sich: Home > Php Tutorial > Verzeichnispfad ermitteln...

Verzeichnispfad ermitteln mit dirname()


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

Die Funktion dirname() ist das Gegenstück zu basename(): Während basename() den Dateinamen liefert, gibt dirname() den Verzeichnispfad zurück. In der Praxis wird sie häufig gebraucht, um Dateien relativ zum aktuellen Skript einzubinden.

Grundlegende Verwendung

Die Funktion erwartet einen Pfad und gibt alles außer dem letzten Bestandteil zurück:

<?php

echo dirname('/var/www/html/index.php');
/* Ausgabe: /var/www/html */

echo dirname('/var/www/html/');
/* Ausgabe: /var/www */

echo dirname('config.php');
/* Ausgabe: . (aktuelles Verzeichnis) */
?>

Wenn der Pfad keinen Verzeichnistrenner enthält, gibt dirname() einen Punkt (.) zurück. Das steht für das aktuelle Verzeichnis. Ein Trailing-Slash am Ende wird vor der Auswertung entfernt.

Mehrere Ebenen mit dem levels-Parameter (PHP 7+)

Seit PHP 7.0 akzeptiert dirname() einen zweiten Parameter, der angibt, wie viele Verzeichnisebenen nach oben gegangen werden soll:

<?php

$pfad = '/var/www/html/projekt/public/index.php';

echo dirname($pfad, 1);
/* Ausgabe: /var/www/html/projekt/public */

echo dirname($pfad, 2);
/* Ausgabe: /var/www/html/projekt */

echo dirname($pfad, 3);
/* Ausgabe: /var/www/html */
?>

Das erspart verschachtelte Aufrufe wie dirname(dirname(dirname($pfad))), die früher nötig waren.

Praxisbeispiel: Dateien relativ einbinden

Ein typischer Anwendungsfall ist das Einbinden von Dateien relativ zum Speicherort des aktuellen Skripts. Dafür wird dirname() zusammen mit der magischen Konstante __FILE__ verwendet:

<?php

/* Konfiguration einbinden, egal von wo
das Skript aufgerufen wird */
$projektRoot = dirname(__FILE__, 2);

require $projektRoot . '/config.php';
require $projektRoot . '/src/functions.php';
?>

Durch dirname(__FILE__, 2) wird das Verzeichnis zwei Ebenen über dem aktuellen Skript ermittelt. So funktioniert der Include auch dann, wenn das Skript aus einem anderen Arbeitsverzeichnis heraus aufgerufen wird.

Die Alternative: __DIR__

Seit PHP 5.3 gibt es die magische Konstante __DIR__, die eine Kurzform für dirname(__FILE__) darstellt:

<?php

/* Beide Zeilen liefern das gleiche Ergebnis */
echo dirname(__FILE__);
echo __DIR__;

/* Fuer mehrere Ebenen nach oben: */
echo dirname(__DIR__, 2);
?>

In modernem PHP-Code wird __DIR__ bevorzugt, weil es kürzer und besser lesbar ist. Für mehrere Ebenen kann dirname(__DIR__, 2) verwendet werden.

dirname() vs. pathinfo()

Wer neben dem Verzeichnis auch den Dateinamen oder die Endung braucht, kann stattdessen pathinfo() verwenden. Diese Funktion liefert alle Bestandteile eines Pfades auf einmal:

<?php

$info = pathinfo('/var/www/html/bild.jpg');

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

Für den Fall, dass nur das Verzeichnis gebraucht wird, bleibt dirname() die einfachere und performantere Wahl.

 

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.