W3docs

md5_file()

Artikel über die PHP-Funktion md5_file(), die den MD5-Hash einer Datei berechnet. Nützlich für Dateiverarbeitung, Integritätsprüfung und Deduplizierung.

Die PHP-Funktion md5_file() liest eine Datei und gibt den MD5-Hash ihres Inhalts als 32-stelligen hexadezimalen String zurück. Im Gegensatz zu md5(), das einen bereits im Speicher vorhandenen String hasht, liest md5_file() die Datei direkt von der Festplatte — so können Sie eine Datei beliebiger Größe mit einem Fingerabdruck versehen, ohne den gesamten Inhalt zuerst in eine Variable laden zu müssen.

Diese Seite behandelt die Syntax, beide Ausgabemodi, die praktischen Anwendungsfälle von md5_file() (Integritätsprüfung, Änderungserkennung, Deduplizierung), mögliche Fallstricke und Situationen, in denen MD5 das falsche Werkzeug ist.

Syntax

md5_file(string $filename, bool $binary = false): string|false
ParameterBeschreibung
$filenamePfad zur zu hashenden Datei. Kann ein lokaler Pfad oder eine Stream-Wrapper-URL (http://, php://, etc.) sein, wenn Wrapper aktiviert sind.
$binaryBei false (Standard) wird ein 32-stelliger Kleinbuchstaben-Hex-String zurückgegeben. Bei true werden rohe 16 Byte Binärdaten zurückgegeben.

Rückgabewert: den MD5-Hash bei Erfolg oder false, wenn die Datei nicht gelesen werden kann. (Vor PHP 8.0 hieß das zweite Argument $raw_output.)

Einfaches Beispiel

Der Hash wird aus den Bytes der Datei berechnet, daher liefert eine Datei mit dem exakten Text Hello, World! (ohne abschließenden Zeilenumbruch) immer denselben Digest:

php— editable, runs on the server

Ausgabe:

65a8e27d8879283831b664bd8b7f0ad4

Da MD5 deterministisch ist, liefert das Hashen desselben Inhalts überall — auf jeder Maschine, in jeder Sprache — diesen identischen Wert. Diese Eigenschaft macht die Funktion für die unten beschriebenen Anwendungsfälle nützlich.

Dateiintegrität prüfen

Der häufigste Anwendungsfall ist die Überprüfung, ob eine heruntergeladene Datei mit einer veröffentlichten Prüfsumme übereinstimmt. Vergleichen Sie den berechneten Hash mit dem erwarteten Wert mithilfe von hash_equals() (ein zeitsicherer Vergleich) anstatt ==:

<?php
$expected = "65a8e27d8879283831b664bd8b7f0ad4";
$actual   = md5_file("example.txt");

if ($actual === false) {
    echo "Could not read the file.";
} elseif (hash_equals($expected, $actual)) {
    echo "File is intact.";
} else {
    echo "File is corrupted or has been modified.";
}
?>

Änderungen erkennen und deduplizieren

Das Speichern des Datei-Hashs ermöglicht eine einfache spätere Überprüfung, ob sich die Datei geändert hat: erneut hashen und mit dem gespeicherten Wert vergleichen. Zwei Dateien mit demselben Hash sind (mit überwältigender Wahrscheinlichkeit) byteweise identisch, was md5_file() zum Auffinden von Duplikaten nützlich macht:

<?php
$a = md5_file("photo1.jpg");
$b = md5_file("photo2.jpg");

echo ($a === $b) ? "Duplicate files\n" : "Different files\n";
?>

Rohe Binärausgabe

Übergeben Sie true als zweites Argument, um die 16 rohen Bytes statt der 32 Hexadezimalzeichen zu erhalten. Dies ist nützlich, wenn Sie den Hash kompakt in einer BINARY(16)-Datenbankspalte mit fester Breite speichern möchten:

<?php
$raw = md5_file("example.txt", true);

echo strlen($raw);        // 16 (bytes) instead of 32 (hex chars)
echo bin2hex($raw);       // 65a8e27d8879283831b664bd8b7f0ad4
?>

Fehlerbehandlung

Wenn der Pfad fehlt oder nicht lesbar ist, gibt md5_file() false zurück und gibt eine Warnung aus. Prüfen Sie immer, ob die Datei vorhanden ist, bevor Sie sie hashen, um einen klaren Fehler ausgeben zu können:

<?php
$filename = "example.txt";

if (!is_readable($filename)) {
    echo "File not found or not readable.";
} else {
    echo md5_file($filename);
}
?>

Wann MD5 nicht verwendet werden sollte

MD5 ist schnell und geeignet für nicht sicherheitsrelevante Aufgaben wie Änderungserkennung, Caching-Schlüssel und Deduplizierung. Für Sicherheitszwecke ist es gebrochen: Angreifer können zwei verschiedene Dateien mit demselben MD5-Hash erstellen (eine Kollision). Verwenden Sie es nicht zum:

  • Speichern von Passwörtern (verwenden Sie password_hash()),
  • Schutz vor böswilliger Manipulation einer Datei.

Für manipulationssichere Fingerabdrücke bevorzugen Sie einen SHA-2-Family-Digest über hash_file():

<?php
echo hash_file("sha256", "example.txt");
?>

Verwandte Funktionen

  • md5() — einen String statt einer Datei hashen.
  • sha1_file() — SHA-1-Hash des Dateiinhalts.
  • crc32() — schnelle 32-Bit-Prüfsumme zur Fehlererkennung.
  • file_get_contents() — eine gesamte Datei in einen String einlesen.

Zusammenfassung

md5_file() gibt den MD5-Digest des Inhalts einer Datei zurück — standardmäßig als Hex-String oder als rohe Binärdaten mit $binary = true. Die Funktion ist ideal für Integritätsprüfung, Änderungserkennung und Deduplizierung, sollte jedoch nie für sicherheitskritische Aufgaben verwendet werden, bei denen ein SHA-2-Hash über hash_file() die richtige Wahl ist.

Übung

Übung
Was ist der Zweck und die Anwendung der Funktion md5_file() in PHP?
Was ist der Zweck und die Anwendung der Funktion md5_file() in PHP?
Was this page helpful?