Signatur
Beschreibung
sha1_file() liest den Inhalt der angegebenen Datei und berechnet daraus den SHA1-Hash (Secure Hash Algorithm 1). Das Ergebnis ist standardmäßig ein 40 Zeichen langer hexadezimaler String. Mit dem Parameter $binary = true wird stattdessen ein roher 20-Byte-Binär-String zurückgegeben.
Die Funktion ist nützlich, um Datei-Integrität zu prüfen – etwa beim Vergleich heruntergeladener Dateien mit einem bekannten Prüfsummen-Wert, beim Erkennen von Dateiänderungen oder beim Aufbau eines einfachen Cache-Mechanismus auf Basis von Dateiinhalten.
Im Unterschied zu sha1(), das einen String als Eingabe erwartet, liest sha1_file() die Datei direkt ein. Das ist speichereffizienter als das manuelle Einlesen mit file_get_contents() und anschließendem Übergeben an sha1().
Sicherheitshinweis: SHA1 gilt für kryptografische Zwecke (z. B. Passwort-Hashing oder digitale Signaturen) als nicht mehr sicher. Für solche Anwendungsfälle sollte stattdessen hash_file() mit einem stärkeren Algorithmus wie sha256 oder sha3-256 verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Datei, deren Inhalt gehasht werden soll. Kann ein lokaler Dateipfad oder – sofern allow_url_fopen aktiviert ist – eine URL sein. |
|
| $binary | bool | false | Gibt an, ob der Hash als roher Binär-String (20 Bytes, true) oder als 40-stelliger Hex-String (false) zurückgegeben werden soll. |
Rückgabewert
$binary = true). Bei einem Fehler (z. B. Datei nicht lesbar) wird false zurückgegeben.Beispiele
Einfache Prüfsumme einer Datei berechnen
<?php
$hash = sha1_file('/var/www/uploads/archive.zip');
if ($hash === false) {
echo 'Datei konnte nicht gelesen werden.';
} else {
echo 'SHA1-Hash: ' . $hash;
}
// Beispielausgabe: SHA1-Hash: da39a3ee5e6b4b0d3255bfef95601890afd80709
Dateiintegrität prüfen durch Hash-Vergleich
<?php
$expectedHash = 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d';
$file = '/var/www/downloads/setup.exe';
$actualHash = sha1_file($file);
if ($actualHash === false) {
echo 'Fehler: Datei nicht lesbar.';
} elseif (hash_equals($expectedHash, $actualHash)) {
echo 'Datei ist integer – Hash stimmt überein.';
} else {
echo 'WARNUNG: Hash stimmt nicht überein! Datei möglicherweise manipuliert.';
}
Einfacher Datei-Cache basierend auf SHA1
<?php
$templateFile = '/var/www/templates/main.tpl';
$cacheDir = '/var/www/cache/';
$hash = sha1_file($templateFile);
$cacheFile = $cacheDir . $hash . '.cache';
if (file_exists($cacheFile)) {
echo 'Cache gefunden, lade gecachte Version: ' . $cacheFile;
} else {
// Template neu kompilieren und cachen
file_put_contents($cacheFile, 'kompilierter Inhalt...');
echo 'Neuer Cache erstellt: ' . $cacheFile;
}
// Wichtig · Fallstricke
SHA1 ist kryptografisch unsicher: SHA1-Kollisionen sind seit 2017 praktisch demonstriert worden (SHAttered-Angriff). Für sicherheitsrelevante Verwendungen wie Signaturprüfung oder Integritäts-Checks in sicherheitskritischen Systemen sollte hash_file('sha256', $filename) oder hash_file('sha3-256', $filename) verwendet werden.
Für den Vergleich von Hash-Werten sollte immer hash_equals() statt === oder == eingesetzt werden, um Timing-Angriffe zu verhindern – auch wenn bei reinen Integritätschecks (ohne geheimen Schlüssel) das Risiko gering ist.
Wenn die Datei sehr groß ist, kann das Lesen je nach System etwas Zeit in Anspruch nehmen, da der gesamte Dateiinhalt verarbeitet werden muss.