Wie kann ich die Erweiterung einer Datei mit PHP ändern?

Lesezeit: 4 Minuten

Benutzer-Avatar
PHLAK

Wie kann ich die Erweiterung einer Datei mit PHP ändern?

Beispiel: photo.jpg in photo.exe

In modernen Betriebssystemen können Dateinamen durchaus Punkte enthalten, die lange vor der Dateiendung stehen, zum Beispiel:

my.file.name.jpg

PHP bietet eine Möglichkeit, den Dateinamen ohne die Erweiterung zu finden, die dies berücksichtigt, und fügt dann einfach die neue Erweiterung hinzu:

function replace_extension($filename, $new_extension) {
    $info = pathinfo($filename);
    return $info['filename'] . '.' . $new_extension;
}

  • Für mich ist dies die beste Antwort, da eine Funktion in PHP für das verwendet wird, wofür sie entwickelt wurde. Es führt auch die Berechnung in einem einzigen Befehl aus, was weniger C-Code im Inneren von PHP bedeutet.

    – Wolomike

    28. Oktober 2011 um 23:18 Uhr

  • Ich denke, dies sollte die Pfadinformationen beibehalten: return $info[‘dirname’].”/”.$info[‘filename’] . ‘.’ . $neue_Erweiterung;

    – James T. Snell

    2. Januar 2014 um 4:46 Uhr

  • Ohne den Pfad kann Ihre Anwendung möglicherweise brechen!

    – Guilherme Sampaio

    31. Juli 2020 um 18:01 Uhr

substr_replace($file , 'png', strrpos($file , '.') +1)

Ändert jede Erweiterung nach Ihren Wünschen. Ersetzen Sie png durch die gewünschte Erweiterung.

  • Warnung: Es wird Ihren Dateinamen durcheinander bringen, wenn es keine Erweiterung findet.

    – Moradnejad

    8. Januar 2019 um 8:09 Uhr

Benutzer-Avatar
Alex

Ersetzen Sie die Erweiterung, behalten Sie die Pfadinformationen bei

function replace_extension($filename, $new_extension) {
    $info = pathinfo($filename);
    return ($info['dirname'] ? $info['dirname'] . DIRECTORY_SEPARATOR : '') 
        . $info['filename'] 
        . '.' 
        . $new_extension;
}

  • Beste Antwort! Achtung, DS nicht in diese Situation passen

    – Thanh Trung

    3. Juli 2013 um 9:38 Uhr

  • Oh mein Gott … Ich bin so an Magento gewöhnt, wo sie definieren DS = DIRECTORY_SEPARATOR. Meine Antwort bearbeitet. Vielen Dank.

    – Alex

    5. Juli 2013 um 20:47 Uhr

  • Möglicherweise ist es nicht sicher, weil es nicht nur die Erweiterung ändert. Unter Windows kann es beispielsweise sein, ein Trennzeichen in ein anderes zu ändern.

    – Enyby

    13. Februar 2015 um 15:05 Uhr

  • @Enyby: was meinst du? Haben Sie einen nicht funktionierenden Beispielnamen?

    – Alex

    13. Februar 2015 um 15:11 Uhr

  • ‘c:\\windows\\system32/drivers/etc/some.file..png’ – Wechsel zu ‘jpg’ gibt nächstes Ergebnis: ‘c:\\windows\\system32/drivers/etc\\some.file. .jpg’ – Trennzeichen vor Dateinamen geändert. In einigen Fällen kann es zu Nebenwirkungen kommen.

    – Enyby

    13. Februar 2015 um 15:40 Uhr


Benutzer-Avatar
Galen

Sie können die verwenden rename(string $from, string $to, ?resource $context = null) Funktion.

Sobald Sie den Dateinamen in einer Zeichenfolge haben, verwenden Sie zuerst Regex, um die Erweiterung durch eine Erweiterung Ihrer Wahl zu ersetzen. Hier ist eine kleine Funktion, die das tut:

function replace_extension($filename, $new_extension) {
    return preg_replace('/\..+$/', '.' . $new_extension, $filename);
}

Dann nutzen Sie die umbenennen() Funktion zum Umbenennen der Datei mit dem neuen Dateinamen.

  • Eigentlich ist das eine schlechte Idee. In modernen Betriebssystemen können Dateinamen Punkte im Namen enthalten, z. B. wenn die Erweiterung in “.tif” geändert wird, würde “this.is.a.test.pdf” bei Verwendung in “this.tif” stattdessen entfernt werden , verwenden Sie: $info = pathinfo($filename); gib $info zurück[‘filename’] . “.” . $neue_Erweiterung;

    – Toni Maro

    3. September 2011 um 22:19 Uhr


  • preg_replace('/\.[^.]+$/', '.' . $extension, $file) um mit dem zuletzt gefundenen übereinzustimmen . funktioniert aber nicht, wenn die Datei keine Erweiterung hat

    – Thanh Trung

    3. Juli 2013 um 9:35 Uhr

Benutzer-Avatar
Niksmac

Ersetzen Sie es einfach durch Regexp:

$filename = preg_replace('"\.bmp$"', '.jpg', $filename);

Sie können diesen Code auch erweitern, um andere Bilderweiterungen zu entfernen, nicht nur bmp:

$filename = preg_replace('"\.(bmp|gif)$"', '.jpg', $filename);

  • Eigentlich ist das eine schlechte Idee. In modernen Betriebssystemen können Dateinamen Punkte im Namen enthalten, z. B. wenn die Erweiterung in “.tif” geändert wird, würde “this.is.a.test.pdf” bei Verwendung in “this.tif” stattdessen entfernt werden , verwenden Sie: $info = pathinfo($filename); gib $info zurück[‘filename’] . “.” . $neue_Erweiterung;

    – Toni Maro

    3. September 2011 um 22:19 Uhr


  • preg_replace('/\.[^.]+$/', '.' . $extension, $file) um mit dem zuletzt gefundenen übereinzustimmen . funktioniert aber nicht, wenn die Datei keine Erweiterung hat

    – Thanh Trung

    3. Juli 2013 um 9:35 Uhr

Benutzer-Avatar
Chris Hadi

Für Regex-Fans wäre die modifizierte Version von Thanh Trungs „preg_replace“-Lösung, die immer die neue Erweiterung enthält (so dass Sie, wenn Sie ein Dateikonvertierungsprogramm schreiben, nicht versehentlich die Quelldatei mit dem Ergebnis überschreiben):

preg_replace('/\.[^.]+$/', '.', $file) . $extension

  • Das ist eine clevere Lösung. Indem Sie eine Regex verwenden, um die Erweiterung einfach zu entfernen, und dann eine Zeichenfolgenverkettung verwenden, um die neue Erweiterung anzuwenden, funktioniert sie unter mehr Bedingungen als jede der anderen bereitgestellten Lösungen.

    – Ryan Williams

    15. November 2016 um 0:47 Uhr

1215560cookie-checkWie kann ich die Erweiterung einer Datei mit PHP ändern?

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

Privacy policy