fopen / fclose în PHP

Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.

Sintaxă
fopen(string $filename, string $mode, bool $use_include_path = false, $context = null)

Ce face fopen / fclose

fopen este primul pas când lucrezi cu un fișier bucată cu bucată: deschizi fișierul, citești sau scrii cu fgets, fread, fwrite, apoi îl închizi cu fclose. Pentru citiri și scrieri dintr-o singură bucată sunt mai simple file_get_contents și file_put_contents.

Modul spune ce faci cu fișierul: "r" doar citire; "w" scriere (golește fișierul sau îl creează); "a" adăugare la final; "x" creare, eșuează dacă fișierul există; "c" scriere fără golire. Cu + ("r+", "w+", "a+") poți și citi, și scrie.

Parametri

Parametru Descriere
$filename Calea fișierului sau o adresă (de exemplu php://memory, https://...).
$mode Modul de deschidere: r, w, a, x, c, opțional cu +.
$use_include_path Opțional. true caută fișierul și în include_path.
$context Opțional. Un context de stream, creat cu stream_context_create.

Ce returnează

fopen: o resursă de fișier sau false (cu avertisment) la eroare. fclose: true la succes.

Exemple

Exemplul 1: Scriere și citire

<?php
$f = fopen("lista.txt", "w");
fwrite($f, "lapte\npâine\n");
fclose($f);

$f = fopen("lista.txt", "r");
echo fread($f, 100);
fclose($f);

Rezultat

lapte
pâine

Exemplul 2: Modul a adaugă la final

<?php
file_put_contents("jurnal.log", "08:00 pornire\n");

$f = fopen("jurnal.log", "a");
fwrite($f, "08:05 utilizator logat\n");
fclose($f);

echo file_get_contents("jurnal.log");

Rezultat

08:00 pornire
08:05 utilizator logat

Exemplul 3: Verificarea rezultatului

Am pus @ doar ca să ascundem avertismentul în exemplu. În cod real, verifici rezultatul ca mai jos și scrii eroarea în jurnal.

<?php
$f = @fopen("lipsa.txt", "r");

if ($f === false) {
    echo "Nu pot deschide fișierul";
}

Rezultat

Nu pot deschide fișierul

Greșeli frecvente

  • Deschizi cu "w" un fișier pe care voiai doar să îl completezi. Modul "w" șterge conținutul vechi imediat. Pentru adăugare folosește "a".
  • Nu verifici dacă fopen a returnat false și apelezi fwrite pe el. Primești TypeError.
  • Uiți fclose într-un script care deschide multe fișiere. Poți atinge limita de fișiere deschise a sistemului.

Comenzi înrudite

  • fgets: Citește o linie dintr-un fișier deschis cu fopen.
  • fread: Citește un număr dat de octeți dintr-un fișier deschis.
  • fwrite / fputs: Scrie un text într-un fișier deschis cu fopen. fputs este același lucru, cu alt nume.
  • feof: Verifică dacă s-a ajuns la sfârșitul unui fișier deschis.
  • file_get_contents: Citește tot conținutul unui fișier (sau al unei adrese URL) într-un text.