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ă
fopena returnatfalseși apelezifwritepe el. PrimeștiTypeError. - 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.