Start · Sprachen · PHP · Referenz · recode_file

recode_file

Funktion

Kodiert den Inhalt einer Datei gemäß einer Recode-Anweisung um und schreibt das Ergebnis in eine Ausgabedatei.

seit PHP 4.0.0 Kategorie: string

Signatur

recode_file(string $request, resource $input, resource $output): bool

Beschreibung

recode_file() liest den Inhalt der über $input geöffneten Datei, wandelt ihn gemäß der in $request angegebenen Recode-Zeichensatzkodierung um und schreibt das Ergebnis in die über $output geöffnete Datei. Die Funktion nutzt die GNU-Recode-Bibliothek, die eine Vielzahl von Zeichensatzkodierungen (z. B. ISO-8859-1, UTF-8, ASCII) und Transformationen unterstützt.

Die Recode-Anweisung wird in der Form QuellKodierung..ZielKodierung angegeben, z. B. ISO-8859-1..UTF-8. Es ist auch möglich, Konvertierungsketten (mehrere Kodierungen hintereinander) zu verwenden, wie sie die GNU-Recode-Bibliothek unterstützt.

Im Gegensatz zu recode_string(), die mit Strings arbeitet, ist recode_file() besonders für große Dateien geeignet, da sie direkt mit Datei-Ressourcen arbeitet und kein Einlesen des gesamten Inhalts in den Arbeitsspeicher erfordert.

Hinweis: Die recode-Erweiterung gilt als veraltet und wurde ab PHP 7.4 als deprecated markiert. Ab PHP 8.0 ist sie nicht mehr Bestandteil des PHP-Kerns und muss als PECL-Erweiterung separat installiert werden. Als moderne Alternative wird mb_convert_encoding() oder iconv() empfohlen.

Parameter

Name Typ Default Beschreibung
$request Pflicht string Die Recode-Anweisung, die die Quell- und Zielkodierung beschreibt, z. B. ISO-8859-1..UTF-8. Die Syntax entspricht der GNU-Recode-Bibliothek.
$input Pflicht resource Eine geöffnete Datei-Ressource (fopen()), aus der der zu kodierende Inhalt gelesen wird.
$output Pflicht resource Eine geöffnete Datei-Ressource (fopen()), in die der umkodierte Inhalt geschrieben wird.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Umkodierung erfolgreich war, andernfalls false.

Beispiele

ISO-8859-1-Datei nach UTF-8 konvertieren

<?php
// Quelldatei im ISO-8859-1-Format öffnen
$input = fopen('eingabe_latin1.txt', 'r');

// Zieldatei zum Schreiben öffnen
$output = fopen('ausgabe_utf8.txt', 'w');

if ($input === false || $output === false) {
    die('Datei konnte nicht geöffnet werden.');
}

// Umkodierung von ISO-8859-1 nach UTF-8
$result = recode_file('ISO-8859-1..UTF-8', $input, $output);

if ($result) {
    echo 'Datei erfolgreich umkodiert.';
} else {
    echo 'Fehler bei der Umkodierung.';
}

fclose($input);
fclose($output);
?>
Datei erfolgreich umkodiert.

Moderne Alternative mit iconv (empfohlen ab PHP 8.0)

<?php
// Empfohlene Alternative zu recode_file() ab PHP 8.0
$inputFile  = 'eingabe_latin1.txt';
$outputFile = 'ausgabe_utf8.txt';

$content = file_get_contents($inputFile);
if ($content === false) {
    die('Quelldatei konnte nicht gelesen werden.');
}

$converted = iconv('ISO-8859-1', 'UTF-8', $content);
if ($converted === false) {
    die('Konvertierung fehlgeschlagen.');
}

file_put_contents($outputFile, $converted);
echo 'Datei erfolgreich mit iconv umkodiert.';
?>
Datei erfolgreich mit iconv umkodiert.

// Wichtig · Fallstricke

Deprecation: Die recode-Erweiterung wurde in PHP 7.4 als veraltet (deprecated) markiert und ist ab PHP 8.0 nicht mehr im PHP-Kern enthalten. Für neue Projekte sollten stattdessen iconv() oder mb_convert_encoding() verwendet werden.

Voraussetzung: Die GNU-Recode-Bibliothek muss auf dem System installiert und PHP mit der --with-recode-Option kompiliert worden sein. Auf vielen modernen Systemen ist diese Bibliothek nicht mehr standardmäßig verfügbar.

Kompatibilität: Die Recode-Bibliothek kann in manchen Fällen in Konflikt mit anderen Bibliotheken wie iconv oder gettext geraten, was zu unerwarteten Fehlern führen kann.