This can be obvious, but hash_update_stream() move file pointer. So, use rewind(), if you plan to read the file after hashing.
(PHP 5 >= 5.1.2, PHP 7, PHP 8, PECL hash >= 1.1)
hash_update_stream — Pega datos en un contexto de cifrado activo desde un flujo de datos abierto
context
Contexto para cifrado que se obtiene mediante hash_init().
handle
Gestor de fichero abierto devuelto mediante alguna función de creación de flujo de datos.
length
Número máximo de caracteres para copiar desde handle
en el contexto de cifrado.
Actual número de bytes añadidos desde handle
para el contexto de datos de cifrado.
Ejemplo #1 Ejemplo de hash_update_stream()
<?php
$fp = tmpfile();
fwrite($fp, 'The quick brown fox jumped over the lazy dog.');
rewind($fp);
$ctx = hash_init('md5');
hash_update_stream($ctx, $fp);
echo hash_final($ctx);
?>
El resultado del ejemplo sería:
5c6ffbdd40d9556b73a21e63c3e0e904
This can be obvious, but hash_update_stream() move file pointer. So, use rewind(), if you plan to read the file after hashing.