PHP: Dateinamen aus Pfad entfernen

Lesezeit: 3 Minuten

Angenommen, ich habe einen Pfad: images/alphabet/abc/23345.jpg

Wie entferne ich die Datei am Ende aus dem Pfad? Also lande ich bei: images/aphabet/abc/

Sie wollen dirname()

  • Was ist, wenn der Pfad „images/alphabet/abc/“ lautet?

    – zPuls3

    24. Oktober 2014 um 9:52 Uhr

  • @zPuls3 “Bei einer Zeichenfolge, die den Pfad einer Datei oder eines Verzeichnisses enthält, gibt diese Funktion den Pfad des übergeordneten Verzeichnisses zurück.”

    – Byron Whitlock

    29. Oktober 2014 um 23:17 Uhr

  • Ich stimme dem nicht zu. Dateinamen aus Pfad entfernen !== Name des übergeordneten Ordners. @abney317 sollte die richtige Antwort sein

    – Machado

    3. Oktober 2016 um 17:30 Uhr

  • dirname() gibt nur den übergeordneten Ordner an, ohne Dateinamen am Ende des Pfads schlägt dies fehl.

    – Machado

    18. Oktober 2016 um 13:21 Uhr


Benutzer-Avatar
Machado

dirname() gibt Ihnen nur den Namen des übergeordneten OrdnersAlso dirname() wird versagen wo pathinfo() wird nicht.

Dafür sollten Sie verwenden pathinfo():

$dirname = pathinfo('images/alphabet/abc/23345.jpg', PATHINFO_DIRNAME);

Das PATHINFO_DIRNAME erzählt pathinfo um die direkt zurückzugeben dirname.

Siehe einige Beispiele:

  • Für Pfad images/alphabet/abc/23345.jpgbeides funktioniert:

    <?php
    
    $dirname = dirname('images/alphabet/abc/23345.jpg'); 
    // $dirname === 'images/alphabet/abc/'
    
    $dirname = pathinfo('images/alphabet/abc/23345.jpg', PATHINFO_DIRNAME); 
    // $dirname === 'images/alphabet/abc/'
    
  • Für Pfad images/alphabet/abc/wo dirname scheitert:

    <?php
    
    $dirname = dirname('images/alphabet/abc/'); 
    // $dirname === 'images/alphabet/'
    
    $dirname = pathinfo('images/alphabet/abc/', PATHINFO_DIRNAME); 
    // $dirname === 'images/alphabet/abc/'
    

  • Hast du deine Beispiele getestet? dirname() und pathinfo() geben Sie den Pfad immer ohne abschließenden Schrägstrich zurück. Und zumindest in PHP 8.0 dirname() und pathinfo() gibt Ihnen identische Ergebnisse. Zum 'images/alphabet/abc/' beide Funktionen werden zurückgegeben "images/alphabet". Derzeit gibt es also keinen Unterschied zwischen ihnen.

    – Paul Melechow

    21. April um 15:20 Uhr

  • @PaulMelekhov bitte sehen Sie sich das Antwortdatum an, offensichtlich war es nicht in PHP 8.0. Wenn Sie mich jetzt fragen, wurde es wahrscheinlich in PHP 5.6 oder 5.4 getestet und diese Kommentare wurden von Hand geschrieben, sie sollen die Antwort veranschaulichen und nicht eine Ausgabereplik sein, sodass Sie den nachgestellten Schrägstrich ignorieren oder eine Änderung an der vorschlagen können Antworten.

    – Machado

    22. April um 20:58 Uhr

<?php
    $path = pathinfo('images/alphabet/abc/23345.jpg');
    echo $path['dirname'];
?>

http://php.net/manual/en/function.pathinfo.php

Benutzer-Avatar
Paul Melechow

Beachten Sie, dass, wenn eine Zeichenfolge nur einen Dateinamen ohne Pfad enthält (z "test.txt"), das dirname() und pathinfo() Funktionen geben einen einzelnen Punkt zurück (".") als Verzeichnis anstelle einer leeren Zeichenfolge. Und wenn Ihre Zeichenfolge mit endet "/", dh wenn ein String nur Pfad ohne Dateinamen enthält, ignorieren diese Funktionen diesen abschließenden Schrägstrich und geben Ihnen ein übergeordnetes Verzeichnis zurück. In einigen Fällen kann dies ein unerwünschtes Verhalten sein und Sie müssen etwas anderes verwenden. Zum Beispiel, wenn Ihr Pfad nur Schrägstriche enthalten darf "/"also nur eine Variante (nicht beide Slash "/" und Backslash "\") dann können Sie diese Funktion verwenden:

function stripFileName(string $path): string
{
    if (($pos = strrpos($path, "https://stackoverflow.com/")) !== false) {
        return substr($path, 0, $pos);
    } else {
        return '';
    }
}

Oder dasselbe etwas kürzer, aber weniger klar:

function stripFileName(string $path): string
{
    return substr($path, 0, (int) strrpos($path, "https://stackoverflow.com/"));
}

1283070cookie-checkPHP: Dateinamen aus Pfad entfernen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy