hash_file
funkcja
Oblicza skrót kryptograficzny zawartości pliku bez wczytywania go w całości do pamięci. Idealna do sum kontrolnych dużych plików.
hash_file(string $algo, string $filename, bool $binary = false, array $options = []): string|false
hash_file działa jak hash(), ale przetwarza plik strumieniowo — nie wczytuje całości do pamięci. Jest to kluczowa zaleta przy dużych plikach (obrazy, archiwa, kopie zapasowe). Zwraca false, gdy plik nie istnieje lub brak uprawnień do odczytu.
<?php
declare(strict_types=1);
// Suma kontrolna pliku (weryfikacja pobrania):
$skrot = hash_file('sha256', 'archiwum.zip');
// wynik: 64-znakowy hex, np. a1b2c3...
// Przykład weryfikowany:
file_put_contents('/tmp/test.txt', 'php');
echo hash_file('sha256', '/tmp/test.txt');
// wynik: 12a5d18ee896e59954bdce0f4acc7212eebe03dae1834ef4ce160ac5afa5c4a8
// Porównanie po pobraniu (stałoczasowe):
$oczekiwany = '12a5d18ee896e59954bdce0f4acc7212eebe03dae1834ef4ce160ac5afa5c4a8';
$obliczony = hash_file('sha256', '/tmp/test.txt');
if ($obliczony === false) {
throw new \RuntimeException('Nie można odczytać pliku');
}
if (!hash_equals($oczekiwany, $obliczony)) {
throw new \RuntimeException('Plik jest uszkodzony lub zmodyfikowany!');
}
// Dostępne algorytmy: sha256, sha512, md5, sha3-256 i wiele innych
// (pełna lista: hash_algos())