fseek în PHP

Mută cursorul unui fișier deschis la o anumită poziție, în octeți.

Sintaxă
fseek($stream, int $offset, int $whence = SEEK_SET): int

Ce face fseek

fseek stabilește de unde va citi sau scrie următoarea operație. Al treilea parametru spune față de ce se numără: SEEK_SET de la început (implicit), SEEK_CUR de la poziția curentă, SEEK_END de la final, de obicei cu o valoare negativă.

Atenție la valoarea returnată: 0 înseamnă succes, iar -1 eroare. Mutarea dincolo de final este permisă și returnează tot 0.

Parametri

Parametru Descriere
$stream Resursa returnată de fopen.
$offset Poziția, în octeți. Poate fi negativă cu SEEK_END sau SEEK_CUR.
$whence Opțional. SEEK_SET, SEEK_CUR sau SEEK_END.

Ce returnează

0 la succes, -1 la eroare.

Exemple

Exemplul 1: Salt la o poziție și de la final

<?php
file_put_contents("cod.txt", "RO-2026-IASI");
$f = fopen("cod.txt", "r");

fseek($f, 3);
echo fread($f, 4) . "\n";

fseek($f, -4, SEEK_END);
echo fread($f, 4);
fclose($f);

Rezultat

2026
IASI

Exemplul 2: Ultimii octeți dintr-un jurnal mare

<?php
file_put_contents("server.log", str_repeat("INFO cerere OK\n", 1000) . "ERROR disc plin\n");

$f = fopen("server.log", "r");
fseek($f, -16, SEEK_END);
echo fread($f, 16);
fclose($f);

Rezultat

ERROR disc plin

Greșeli frecvente

  • Verifici succesul cu if (fseek(...)). Succesul este 0, adică fals. Compară cu === 0.
  • Calculezi poziția în caractere pe un text cu diacritice. Pozițiile sunt în octeți.

Comenzi înrudite

  • ftell: Returnează poziția curentă a cursorului dintr-un fișier deschis.
  • rewind: Mută cursorul unui fișier deschis înapoi la început.
  • fread: Citește un număr dat de octeți dintr-un fișier deschis.