MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Sistemul de fișiere

Ca și majoritatea limbajelor de programare, PHP suportă lucrul cu fișierele, care sunt unul dintre modurile de stocare a informațiilor.

Deschiderea și închiderea fișierelor

Pentru deschiderea fișierelor în PHP este definită funcția fopen(). Ea are următoarea definiție: resource fopen(string $filename, string $mode). Primul parametru $filename reprezintă calea către fișier, iar al doilea - modul de deschidere. În funcție de scopul deschiderii și tipul fișierului, acest parametru poate lua următoarele valori:

  • 'r': fișierul se deschide doar pentru citire. Dacă fișierul nu există, returnează false
  • 'r+': fișierul se deschide pentru citire cu posibilitatea de scriere. Dacă fișierul nu există, returnează false
  • 'w': fișierul se deschide pentru scriere. Dacă un astfel de fișier există deja, el este suprascris, dacă nu - se creează
  • 'w+': fișierul se deschide pentru scriere cu posibilitatea de citire. Dacă un astfel de fișier există deja, el este suprascris, dacă nu - se creează
  • 'a': fișierul se deschide pentru scriere. Dacă un astfel de fișier există deja, datele se scriu la sfârșitul fișierului, iar datele vechi rămân. Dacă fișierul nu există, se creează
  • 'a+': fișierul se deschide pentru citire și scriere. Dacă fișierul există deja, datele se adaugă la sfârșit. Dacă fișierul nu există, se creează

Rezultatul funcției fopen va fi un descriptor de fișier. Acest descriptor este folosit pentru operațiile cu fișierul și pentru închiderea lui.

După terminarea lucrului, fișierul trebuie închis cu ajutorul funcției fclose(), care primește ca parametru descriptorul fișierului. De exemplu, să deschidem și să închidem un fișier:

$fd = fopen("form.php", 'r') or die("nu s-a reușit deschiderea fișierului");
fclose($fd);

Construcția or die("text eroare") permite oprirea execuției scriptului și afișarea unui mesaj de eroare dacă funcția fopen nu a reușit să deschidă fișierul.

Citirea fișierului

Pentru citirea fișierului se pot folosi mai multe funcții. Pentru citirea linie cu linie se folosește funcția fgets(), care primește descriptorul fișierului și returnează o linie citită. Să parcurgem fișierul linie cu linie:

<?php
$fd = fopen("form.php", 'r') or die("nu s-a reușit deschiderea fișierului");
while(!feof($fd))
{
   $str = htmlentities(fgets($fd));
   echo $str;
}
fclose($fd);
?>

La fiecare apel al funcției fgets(), PHP va plasa indicatorul la sfârșitul liniei citite. Pentru a urmări sfârșitul fișierului, se folosește funcția feof(), care returnează true la sfârșitul fișierului. Și cât timp nu se ajunge la sfârșitul fișierului, putem folosi funcția fgets().

Citirea completă a fișierului

Dacă trebuie să citim complet fișierul, putem să ne simplificăm viața folosind funcția file_get_contents():

<?php
$str = htmlentities(file_get_contents("form.php"));
echo $str;
?>

În acest caz nu trebuie să deschidem explicit fișierul, să obținem descriptorul și apoi să închidem fișierul.

Citirea pe blocuri

De asemenea, putem citi fișierul pe blocuri, adică să citim un anumit număr de octeți din fișier folosind funcția fread():

<?php
$fd = fopen("form.php", 'r') or die("nu s-a reușit deschiderea fișierului");
while(!feof($fd))
{
   $str = htmlentities(fread($fd, 600));
   echo $str;
}
fclose($fd);
?>

Funcția fread() primește doi parametri: descriptorul fișierului citit și numărul de octeți citiți. La citirea unui bloc, indicatorul în fișier se plasează la sfârșitul acestui bloc. Și, de asemenea, cu ajutorul funcției feof() putem urmări sfârșitul fișierului.

Scrierea fișierului

Pentru scrierea fișierului se folosește funcția fwrite(), care scrie în fișier un șir de caractere:

<?php
$fd = fopen("hello.txt", 'w') or die("nu s-a reușit crearea fișierului");
$str = "Salut lume";
fwrite($fd, $str);
fclose($fd);
?>

Funcționează similar cu funcția fputs():

<?php
$fd = fopen("hello.txt", 'w') or die("nu s-a reușit crearea fișierului");
$str = "Salut lume";
fputs($fd, $str);
fclose($fd);
?>

Lucrul cu indicatorul fișierului

La deschiderea fișierului pentru citire sau scriere în modul 'w', indicatorul în fișier se plasează la început. La citirea datelor, PHP mută indicatorul în fișier la sfârșitul blocului citit.

Cu toate acestea, putem controla manual indicatorul în fișier și să-l plasăm într-un loc arbitrar. Pentru aceasta trebuie să folosim funcția fseek, care are următoarea definiție formală:

int fseek (resource $handle , int $offset [, int $whence = SEEK_SET ] )

Parametrul $handle reprezintă descriptorul fișierului.

Parametrul $offset - deplasarea în octeți relativ la începutul fișierului de la care va începe citirea/scrierea. Al treilea parametru opțional specifică modul de setare a deplasării. Acesta poate avea trei valori:

  • SEEK_SET: valoarea implicită, setează deplasarea la offset octeți relativ la începutul fișierului
  • SEEK_CUR: setează deplasarea la offset octeți relativ la poziția curentă în fișier
  • SEEK_END: setează deplasarea la offset octeți de la sfârșitul fișierului

În cazul unei setări reușite a indicatorului, funcția fseek() returnează 0, iar în caz de eșec returnează -1.

Exemplu de utilizare a funcției:

$fd = fopen("hello.txt", 'w+') or die("nu s-a reușit deschiderea fișierului");
$str = "Salut lume!"; // șirul de caractere pentru scriere
fwrite($fd, $str); // scriem șirul la început
fseek($fd, 0); // plasăm indicatorul la început
fwrite($fd, "Bună"); // scriem la început șirul "Bună"
fseek($fd, 0, SEEK_END); // plasăm indicatorul la sfârșit
fwrite($fd, $str); // scriem la sfârșit încă un șir de caractere
fclose($fd);
← Lecția anterioară Lecția următoare →