Start · Sprachen · PHP · Referenz · md5_file

md5_file

Funktion

Berechnet den MD5-Hash einer Datei und gibt ihn als hexadezimalen String oder binär zurück.

seit PHP 4.2.0 Kategorie: string

Signatur

md5_file(string $filename, bool $binary = false): string|false

Beschreibung

md5_file() liest den Inhalt der angegebenen Datei und berechnet daraus den MD5-Prüfsummen-Hash (Message Digest 5). Das Ergebnis ist standardmäßig ein 32-stelliger hexadezimaler String (z. B. d41d8cd98f00b204e9800998ecf8427e).

Die Funktion eignet sich gut für schnelle Integritätsprüfungen von Dateien, z. B. zum Vergleich zweier Dateikopien oder zum Erkennen von Änderungen an einem Dokument. Sie liest die Datei intern blockweise, ohne den gesamten Inhalt auf einmal in den Speicher zu laden, was sie auch für größere Dateien praktisch macht.

Wird der Parameter binary auf true gesetzt, liefert die Funktion den Hash als 16-Byte langen binären String. Das ist sinnvoll, wenn der Hash in einer Binär-Datenbank gespeichert oder mit anderen binären Hashwerten verglichen werden soll.

Sicherheitshinweis: MD5 gilt kryptografisch als unsicher und ist anfällig für Kollisionen. Für sicherheitskritische Aufgaben (Passwort-Hashing, digitale Signaturen) sollten stattdessen hash_file() mit SHA-256 oder stärkeren Algorithmen verwendet werden. Für einfache Prüfsummen zur Fehlererkennung ist MD5 weiterhin geeignet.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Datei, deren MD5-Hash berechnet werden soll. Kann ein relativer oder absoluter Pfad sein. Unterstützt auch Stream-Wrapper wie file:// oder http://, sofern allow_url_fopen aktiviert ist.
$binary bool false Wenn true, wird der Hash als roher 16-Byte-Binärstring zurückgegeben. Standardmäßig (false) wird ein 32-stelliger hexadezimaler String zurückgegeben.

Rückgabewert

Typ
string|false
Beschreibung
Gibt bei Erfolg den MD5-Hash als 32-stelligen hexadezimalen String zurück (oder 16-Byte-Binärstring wenn binary = true). Gibt false zurück, wenn die Datei nicht geöffnet oder gelesen werden konnte.

Beispiele

MD5-Hash einer Datei berechnen und ausgeben

<?php
$datei = '/var/www/uploads/dokument.pdf';

$hash = md5_file($datei);

if ($hash !== false) {
    echo 'MD5-Hash: ' . $hash . PHP_EOL;
} else {
    echo 'Fehler: Datei konnte nicht gelesen werden.' . PHP_EOL;
}
MD5-Hash: 3b885a27e938b5c90ac6e401f3f44e80

Zwei Dateien auf Gleichheit prüfen

<?php
$datei1 = '/var/www/backups/config_original.php';
$datei2 = '/var/www/backups/config_kopie.php';

$hash1 = md5_file($datei1);
$hash2 = md5_file($datei2);

if ($hash1 !== false && $hash2 !== false) {
    if ($hash1 === $hash2) {
        echo 'Die Dateien sind identisch.' . PHP_EOL;
    } else {
        echo 'Die Dateien unterscheiden sich.' . PHP_EOL;
        echo 'Original: ' . $hash1 . PHP_EOL;
        echo 'Kopie:    ' . $hash2 . PHP_EOL;
    }
} else {
    echo 'Fehler beim Lesen einer der Dateien.' . PHP_EOL;
}
Die Dateien sind identisch.

Datei-Integrität nach einem Upload prüfen

<?php
// Bekannte MD5-Prüfsumme der erwarteten Datei
$erwartetHash = 'b026324c6904b2a9cb4b88d6d61c81d1';

$hochgeladeneDatei = $_FILES['datei']['tmp_name'] ?? null;

if ($hochgeladeneDatei && is_uploaded_file($hochgeladeneDatei)) {
    $aktuellerHash = md5_file($hochgeladeneDatei);

    if ($aktuellerHash === $erwartetHash) {
        echo 'Datei ist korrekt und unverändert.' . PHP_EOL;
    } else {
        echo 'Warnung: Datei stimmt nicht mit der erwarteten Prüfsumme überein!' . PHP_EOL;
    }
} else {
    echo 'Keine Datei hochgeladen.' . PHP_EOL;
}

// Wichtig · Fallstricke

Sicherheit: MD5 ist kryptografisch gebrochen und sollte nicht für sicherheitskritische Zwecke wie Passwort-Hashing oder die Prüfung auf absichtliche Manipulation verwendet werden, da Kollisionen gezielt erzeugt werden können. Für solche Anwendungsfälle empfiehlt sich hash_file('sha256', $datei) oder stärkere Algorithmen.

Dateizugriff: Die Datei muss für den PHP-Prozess lesbar sein. Auf Systemen mit restriktiven Dateiberechtigungen kann es zu false-Rückgaben kommen. Fehler werden zusätzlich als E_WARNING ausgegeben.

Performance: Da die Datei blockweise gelesen wird, ist der Speicherverbrauch auch bei großen Dateien gering. Dennoch kann das Hashing sehr großer Dateien zeitintensiv sein.