fread în PHP

Citește un număr dat de octeți dintr-un fișier deschis.

Sintaxă
fread($stream, int $length): string|false

Ce face fread

fread citește cel mult $length octeți de la poziția curentă. Spre deosebire de fgets, nu se oprește la sfârșitul liniei, deci este potrivit pentru fișiere binare (imagini, arhive) sau pentru citirea pe bucăți de mărime fixă.

Dacă fișierul are mai puțini octeți decât ai cerut, primești doar cât există.

Parametri

Parametru Descriere
$stream Resursa returnată de fopen.
$length Numărul maxim de octeți citiți. Trebuie să fie mai mare decât 0.

Ce returnează

Textul citit (poate fi mai scurt decât $length) sau false la eroare.

Exemple

Exemplul 1: Citirea întregului fișier

<?php
file_put_contents("mesaj.txt", "Salut, Ana!");

$f = fopen("mesaj.txt", "r");
$text = fread($f, filesize("mesaj.txt"));
fclose($f);

echo $text;

Rezultat

Salut, Ana!

Exemplul 2: Citire pe bucăți

<?php
file_put_contents("cod.txt", "ABCDEFGHIJ");

$f = fopen("cod.txt", "r");
while (($bucata = fread($f, 4)) !== "") {
    echo "[$bucata]";
}
fclose($f);

Rezultat

[ABCD][EFGH][IJ]

Exemplul 3: Recunoașterea unei imagini PNG

Orice fișier PNG începe cu aceiași 8 octeți. Îi citim și îi comparăm.

<?php
file_put_contents("poza.png", "\x89PNG\r\n\x1a\n" . "restul imaginii");

$f = fopen("poza.png", "rb");
$inceput = fread($f, 8);
fclose($f);

var_dump($inceput === "\x89PNG\r\n\x1a\n");

Rezultat

bool(true)

Greșeli frecvente

  • Apelezi fread($f, filesize($fisier)) pe un fișier gol. filesize este 0 și primești ValueError, pentru că lungimea trebuie să fie mai mare decât 0.
  • Folosești fread pentru fișiere text citite linie cu linie. fgets este mai simplu.

Comenzi înrudite

  • fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.
  • fgets: Citește o linie dintr-un fișier deschis cu fopen.
  • fwrite / fputs: Scrie un text într-un fișier deschis cu fopen. fputs este același lucru, cu alt nume.
  • filesize: Returnează dimensiunea unui fișier, în octeți.