Signatur
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
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;
}
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;
}
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.