Thomas G.: expolde() Bei letzem Punkt in einem String

Ich verwende explode(), um eine Eingabe in Datei-Adresse und Datei-Erweiterung aufzuteilen.

(Das kommt dann in die DB, Dateisystemfunktionen kann ich hier nicht verwenden)

Das Problem ist, dass in der Adresse durchaus mehrere Punkte vorkommen können. Um die Dateierweiterung zu bekommen, müsste ich es bei letzten "." aufteilen. Hat jemand Lösungsvorschläge?

Danke im Voraus

  1. Du kannst deinen String rückwärts durchsuchen und dann ausschneiden.
    Gruß
    Hanno

  2. Hallo,

    Das Problem ist, dass in der Adresse durchaus mehrere Punkte vorkommen können. Um die Dateierweiterung zu bekommen, müsste ich es bei letzten "." aufteilen. Hat jemand Lösungsvorschläge?

    Versuche es so:

    <?php

    $dateiname="das.ist.ein.langer.name.txt";

    // Position des letzten Punktes finden
    for($i=strlen($dateiname)-1;$i>=0;$i--)
    {
      if($dateiname[$i]==".")break;
    }

    // Teilstring nach dem letzten Punkt auslesen
    $erweiterung=substr($dateiname,$i+1,strlen(dateiname));
    print $erweiterung; // txt

    ?>

    MfG, Thomas

  3. Hallo Thomas,

    Das Problem ist, dass in der Adresse durchaus mehrere Punkte vorkommen können. Um die Dateierweiterung zu bekommen, müsste ich es bei letzten "." aufteilen. Hat jemand Lösungsvorschläge?

    list ($erweiterung, $name) = explode ('.', strrev ($datei), 2);
    $erweiterung = strrev ($erweiterung);
    $name = strrev ($name);

    Alternativ:

    $p = strrpos ($datei, '.');
    $name = substr ($datei, 0, $p);
    $erweiterung = substr ($datei, $p+1);

    Viele Grüße,
    Christian

    --
    Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!
    1. Hallo,

      $p = strrpos ($datei, '.');

      Auf die naheliegendsten Dinge kommt man manchmal nicht. Ich habe diese (mir durchaus bekannte) Funktion gerade nachgebildet:

      function lastIndexOf($str,$suchstr)
      {
        for($i=strlen($str)-1;$i>=0;$i--)
        {
          if($str[$i]==$suchstr)break;
        }
        return $i;
      }

      MfG, Thomas