hash_update_stream în PHP

Securitate și hash PHP 5.1.2+

Adaugă la un calcul de amprentă incremental datele citite dintr-un stream deschis (fișier, rețea).

Sintaxă
hash_update_stream(HashContext $context, $stream, int $length = -1): int

Ce face hash_update_stream

hash_update_stream citește dintr-un stream deschis cu fopen și adaugă octeții citiți în contextul de hash. Cu $length citește cel mult acel număr de octeți; implicit citește până la final.

Stream-ul rămâne deschis și poziția avansează, deci poți continua citirea cu alt apel.

Parametri

Parametru Descriere
$context Contextul creat cu hash_init.
$stream Un stream deschis pentru citire.
$length Opțional. Numărul maxim de octeți citiți; -1 înseamnă până la final.

Ce returnează

Numărul de octeți adăugați.

Exemple

Exemplul 1: Citire în două etape

Textul are 15 octeți, pentru că litera „ș” ocupă 2.

<?php
file_put_contents("mesaj.txt", "Salut din Iași");

$ctx = hash_init("sha1");
$f = fopen("mesaj.txt", "r");
echo hash_update_stream($ctx, $f, 5) . " octeți\n";
echo hash_update_stream($ctx, $f) . " octeți\n";
fclose($f);

var_dump(hash_final($ctx) === sha1_file("mesaj.txt"));

Rezultat

5 octeți
10 octeți
bool(true)

Greșeli frecvente

  • Dai un stream deschis doar pentru scriere ("w"). Nu se citește nimic și amprenta este a unui text gol.

Comenzi înrudite

  • hash_update_file: Adaugă la un calcul de amprentă incremental tot conținutul unui fișier.
  • hash_init: Pornește un calcul de amprentă incremental: datele se adaugă pe bucăți, iar rezultatul se obține la final.
  • hash_final: Încheie un calcul de amprentă incremental și returnează rezultatul.