Creați, deschideți, citiți, scrieți, ștergeți și verificați existența fișierelor în PHP. Lucrul cu fișiere în PHP. Citirea unui fișier, scrierea într-un fișier. Tutorial PHP. Ștergerea fișierelor, schimbarea chmodului, lucrul cu directoare. C Date PHP din fișier

În lecția anterioară, am învățat cum să folosim PHP pentru a accesa sistemul de fișiere al serverului. În acest tutorial vom folosi aceste informații pentru a citi dintr-un fișier text simplu.

Fișierele text sunt excelente pentru stocarea diferitelor tipuri de date. Ele nu sunt la fel de flexibile ca bazele de date, dar de obicei nu necesită atât de multă memorie. Mai mult, fișierele text sunt într-un format care poate fi citit pe majoritatea sistemelor.

Deschideți fișierul text

Pentru a deschide un fișier text, utilizați funcția fopen. Iată sintaxa sa:

Fopen( nume de fișier, mod)

Nume fișier Numele fișierului de deschis. modul Modul poate fi „r” (citire), „w” (scriere) sau „a” (adăugarea). În acest tutorial vom citi doar dintr-un fișier și, în consecință, vom folosi „r”. În lecția următoare vom învăța cum să scriem și să atașăm text.

Exemplele din acest tutorial folosesc fișierul unitednations.txt. Aceasta este o listă simplă a programelor și fondurilor ONU și a domeniilor acestora. Puteți descărca acest fișier sau puteți crea propriul fișier și îl puteți utiliza în exemple.

Mai întâi, să încercăm să deschidem unitednations.txt:

// Deschide un fișier text // Închide fișierul text fclose($f); ?>

Exemplul 1: Citirea unei linii dintr-un fișier text

Fișierul înregistrează sistematic: numele programului, virgulă, domeniu. După cum v-ați putea aștepta, multe mai multe informații pot fi înregistrate într-un fișier separat prin virgulă.

Pentru a obține informații din fiecare linie, folosim o matrice. Vezi Lecția 8 despre matrice.

Citirea din fișiere text $f = fopen("unitednations.txt", "r"); // Citiți rând cu rând până la sfârșitul fișieruluiîn timp ce (!feof($f)) ( // Creați o matrice delimitată prin virgulă $arrM = explode(",",fgets($f)); // Scrie link-uri (obține date din matrice) ecou"

  • " . $arrM."
  • "; ) fclose($f); ?>

    Destul de convenabil, nu-i așa? În principiu, puteți extinde acest fișier cu sute de link-uri sau puteți extinde directorul pentru a include și adrese.

    În lecția următoare ne vom uita la cum să scrieți într-un fișier text.

    În PHP, de multe ori trebuie să vă ocupați de crearea unui fișier... este foarte simplu: nu există niciun fișier pe disc, codul a fost rulat și fișierul a apărut, apoi puteți citi acest fișier într-o altă variabilă sau chiar în orice pagină de pe Internet și apoi scrie ceva acolo... dar pentru asta trebuie să cunoști funcții speciale... mai multe despre asta în acest articol...

    Pentru a crea un fișier în PHP într-un script executabil, trebuie doar să specificați câteva funcții:

    Să aruncăm o privire la un exemplu:

    $text = "Un fel de text de scris în fișier";
    $fp = fopen("fișier.txt", "w");
    fwrite($fp, $text);
    fclose($fp);
    ?>

    Aici ar trebui să știi:

    fopen()- funcția deschide fișierul pentru citire sau scriere și clarificări;

    Această clarificare (parametrul de mod al funcției fopen) este foarte importantă:

    • "r" - deschideți un fișier în php Doar pentru lectură. Cursorul este plasat la început.
    • "r+" - deschideți un fișier în php pentru citit și scris. Cursorul este plasat la început. !!! - cu aceste două moduri r și r+, fișierele trebuie deja create (altfel va apărea o eroare Avertisment: fopen(file.txt): nu s-a putut deschide fluxul: Nu există un astfel de fișier sau director în...), și citim doar sau avem ocazia să adăugăm.
    • "w" - fișierul este deschis NUMAI pentru scriere. Fișierul este trunchiat la lungimea zero - adică este suprascris. Ceea ce este necesar este scris și Cursorul este plasat la început.
    • "w+" - deschide un fișier pentru scriere și citire! Restul este la fel ca în modul "w". !!! - in aceste doua moduri - in cazul in care fisierul nu a fost creat - SE VA FACE O INCERCARE DE CREARE!
    • "A" - deschideți fișierul NUMAI pentru scriere. Spre deosebire de „w”, această opțiune nu suprascrie conținutul fișierului, ci plasează cursorul la sfârșitul rândului și adaugă conținutul pe care am vrut să-l adăugăm la sfârșit.
    • "a+" - deschideți fișierul pentru scriere și citire.

    fscrie($fp, $text) - o funcție pentru scrierea într-un fișier în PHP - adică ceea ce este în variabila $text este scris într-un fișier care se află în variabila $fp;

    fclose($fp) - funcție de închidere a fișierului pe care l-am scris la variabila $fp;

    Acum puteți crea cu ușurință fișiere în php corect, le puteți deschide pentru citire și editare.

    Adăugări și funcții PHP utile pentru a lucra cu un fișier deschis:

    în timp ce(!feof($fp))(
    $mytext = fgets($fp, 99);
    echo $mytext."
    ";
    }

    aici este îndeplinită condiția - „până la sfârșitul fișierului, faceți asta” în timp ce(!feof($fp))

    1. Funcție fgets($fp, 99) - vă permite să împărțiți întregul conținut în secțiuni de 99 de octeți și, mai departe, pentru a vedea acest lucru mai clar plasăm o etichetă

    Această funcție șir fgets(mânerul resursei [, lungime int]) acceptă implicit 1024 de octeți (1 kilobyte) ca parametru de lungime, dacă nu este specificat, așa va fi. Acest parametru este opțional începând cu PHP 4.2.0 (returnează FALSE în caz de eroare)

    Funcții suplimentare pentru deschiderea, scrierea și crearea unui fișier

    Funcție - int readfile(string filename [, bool use_include_path [, contextul resursei]]) - citiți fișierul ca întreg.

    Citește un fișier și scrie conținutul în tamponul de ieșire. Și returnează numărul de octeți de ieșire. În cazul unei erori, va reveni dacă câinele nu este folosit - @readfile.

    Se va întâmpla ceva de genul acesta:

    La sfârșitul cuvântului există o etichetă
    .

    b. Funcție - matrice fişier(șir nume de fișier [, int use_include_path [, context de resurse]]), face același lucru ca funcția readfile, cu o excepție, adaugă conținutul fișierului într-o matrice:

    Astfel puteți citi orice pagină de pe Internet: $lines = file("http://site/"); și iterați prin matrice folosind funcția foreach;

    3a. funcția șir file_get_contents(string nume de fișier [, bool use_include_path [, contextul resursei [, int offset [, int maxlen]]]] - vă permite să obțineți conținutul ca un singur șir.

    Aceasta este o funcție PHP mai universală pentru citirea unui fișier, similară cu funcția fișier, doar conținutul este returnat ca șir, nu o matrice și puteți seta condiții - cu ce octet să începeți - decalaj si unde sa se termine - maxlen. La eșec, va returna FALSE.

    Important!!!- în acest caz, funcția înlocuiește 3 deodată: fopen(), fread() și fclose() și astfel scapă de marcaj.

    3b. funcția int fișier_put_conținut(string nume de fișier, date mixte [, int flags [, context de resurse]]) - identic cu apelurile secvențiale la funcțiile fopen(), fwrite() și fclose() - returnează numărul de octeți scriși.

    În general, interacțiunea cu fișierele în PHP se reduce la deschiderea fișierului, efectuarea acțiunilor necesare cu acestea și închiderea fișierului. La deschiderea unui fișier, se determină modul de lucru în continuare cu acesta. Aceasta poate fi deschisă pentru citire, scriere, adăugare de date. Există, de asemenea, moduri de deschidere a fișierelor care combină atât citirea, cât și scrierea.

    Există multe posibilități de citire din fișiere - puteți obține date în diferite forme - citire rând cu linie, obținerea unei matrice de șiruri și așa mai departe.

    Crearea și scrierea unui fișier

    Pentru a crea un fișier, trebuie să deschideți fișierul în modul de scriere. Deschiderea unui fișier se face cu funcția fopen. Primul parametru al acestei funcții specifică calea către fișier. Al doilea parametru indică modul de deschidere a fișierului. Pentru a crea un fișier, trebuie să specificați modul de înregistrare a fișierului - „w”.

    $f = fopen( „fișierul meu.txt” , „w” );

    Dacă un fișier cu același nume există deja, atunci modul de înregistrare vă va permite să creați un nou fișier gol în locul celui existent, ștergând toate datele acestuia.

    * Există și un parametru "w+", permițându-vă să deschideți simultan pentru citire și scriere. În acest caz, dacă un fișier cu același nume exista deja, datele din acesta vor fi șterse.

    La efectuarea unei operații de deschidere, funcția va returna valoarea unui descriptor de fișier - o variabilă de fișier specială, care va indica funcțiilor ulterioare cu ce fișier să își efectueze acțiunile.

    Pentru a adăuga date noi la un fișier deschis în modul de scriere, utilizați funcția fwrite. Primul parametru este un descriptor de fișier. Apoi linia care trebuie scrisă în fișier. Dacă este necesar, al treilea parametru poate fi utilizat pentru a limita numărul de caractere scrise.

    fwrite($f, „Textul meu de scris în fișier”.);

    După înregistrarea tuturor liniilor, acesta trebuie închis. Funcția fclose este utilizată pentru aceasta. Singurul parametru pentru acesta este descriptorul de fișier.

    fclose($f);

    Ca rezultat, codul pentru crearea și salvarea fișierului arată astfel:

    $f = fopen( „fișierul meu.txt” , „w” );
    fwrite($f, „Prima linie.\r\n”);
    ...
    fwrite($f, „Ultimul rând.\r\n”);
    fclose($f);

    * Simboluri „\r\n” indica caracterul de sfârșit de linie. Dacă nu adăugați, toate liniile din fișierul înregistrat vor fi combinate într-o singură linie.

    Adăugarea de date la un fișier existent

    Pentru a adăuga orice informație într-un fișier deja creat, trebuie să îl deschideți în modul de scriere, dar păstrând informațiile existente. Acestea. fișierul va fi deschis și pentru scriere, dar când scrieți într-un astfel de fișier, acestea vor fi adăugate la sfârșitul acestuia.

    $f = fopen( „fișierul meu.txt” , „a” ); „//Parametrul „a” specifică deschiderea în modul adăugare”
    fwrite($f, "Newline\r\n" );
    fclose($f);

    Dacă nu există un fișier cu numele specificat, fișierul va fi creat și toate datele vor fi scrise în el.

    * Există și un mod "a+", care deschide fișierul pentru citire și scriere, mergând la sfârșitul fișierului.

    Citirea dintr-un fișier

    Pentru a citi dintr-un fișier, funcției fopen i se atribuie parametrul „r”, ceea ce înseamnă că fișierul va fi deschis doar în citire. Funcția fgets citește dintr-un fișier. Primul parametru este un descriptor de fișier. Al doilea parametru, opțional, determină dimensiunea șirului de citit. Dacă al doilea parametru nu este specificat, linia curentă va fi citită până la caracterul de final de linie.

    $f = fopen( „fișierul meu.txt” , „r” ); // Parametrul „r” specifică deschiderea în modul citire
    $s = fgets($f);
    eco $s;
    fclose($f);

    * Mod "r+" deschide fișierul pentru citire și scriere.

    Pentru a citi toate liniile dintr-un fișier, puteți utiliza o buclă în care va citi câte o linie până la sfârșitul fișierului:

    $f = fopen( „fișierul meu.txt” , „r” );
    în timp ce (!feof($f))(
    $s = fgets($f);
    eco $s;
    }
    fclose($f);

    Funcția feof este utilizată într-o condiție de buclă pentru a determina sfârșitul fișierului și a termina ciclul de citire.

    Pe lângă metoda descrisă de obținere a datelor dintr-un fișier, PHP are multe funcții diferite. Uneori este mai ușor să obțineți imediat întregul conținut al unui fișier (funcția readfile) sau să încărcați toate liniile într-o matrice (funcția fișier) și să lucrați cu el. În astfel de scopuri, nu trebuie să deschideți fișierul pentru citire și să îl închideți. Toate aceste acțiuni vor fi efectuate de funcția în sine.

    readfile( „fișierul meu.txt”);

    $mas = fisier("fișierul meu.txt");

    foreach ($mas ca $m)
    eco $m;

    Folosind funcția fgetc, puteți citi conținutul unui fișier caracter cu caracter:

    $f = fopen( „fișierul meu.txt” , „r” );
    în timp ce (!feof($f))(
    $s = fgetc($f);
    eco $s;
    }
    fclose($f);

    Ștergerea unui fișier

    Eliminarea unui fișier se face cu funcția de deconectare. Parametrul specifică calea către fișierul de șters.

    deconectați( „fișierul meu.txt”);

    Se verifică dacă există un fișier

    Uneori, înainte de a efectua orice acțiune asupra unui fișier, trebuie să verificați dacă acesta există. Funcția file_exists este folosită pentru aceasta. Parametrul specifică calea către fișier.

    dacă (fișier_există ("fișierul meu.txt" ))
    ecou — Există un astfel de dosar.;
    altfel
    ecou „Nu există niciun fișier cu acest nume”.;

    Despre utilizarea funcțiilor fopen, fclose, feof, fgets, fgetss și fscanf

    Să enumerăm toate posibilitățile

    Unul dintre beneficiile lucrului cu limbaje de programare moderne precum PHP este numărul de funcții disponibile. PHP ar putea adopta cu ușurință motto-ul lui Perl, „Există mai multe moduri de a face ceva”, mai ales când vine vorba de procesarea fișierelor. Dar, odată cu multitudinea de instrumente disponibile, întrebarea devine care dintre ele este cel mai bun pentru a face treaba. Desigur, răspunsul la această întrebare depinde într-adevăr de obiectivele tale atunci când procesezi fișierul, așa că învățarea tuturor capacităților limbii merită timpul tău.

    Metode tradiționale fopen

    Metodele fopen sunt probabil cele mai familiare programatorilor C și C++ de altădată, deoarece sunt mai mult sau mai puțin instrumentele care ți-au fost la îndemână de ani de zile dacă ai lucrat cu acele limbaje de programare. Pentru oricare dintre aceste metode, urmați procedura standard, folosind fopen pentru a deschide fișierul, o funcție pentru a citi datele și apoi fclose pentru a închide fișierul, așa cum se arată în Lista 1.

    Listare 1. Deschiderea și citirea unui fișier folosind fgets
    $file_handle = fopen("fișierul meu", "r"); while (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

    Deși aceste funcții sunt familiare celor mai mulți programatori experimentați, permiteți-mi să analizez modul în care funcționează. În realitate, urmați acești pași:

    1. Deschideți fișierul. $file_handle stochează un link către fișierul în sine.
    2. Verificați dacă ați ajuns la sfârșitul fișierului.
    3. Continuați să citiți fișierul până ajungeți la sfârșit, imprimând fiecare rând pe care îl citiți.
    4. Închideți fișierul.

    Având în vedere asta, mă voi uita la fiecare funcție de fișier folosită aici.

    funcția fopen

    Funcția fopen stabilește o conexiune la un fișier. Spun „stabilește o conexiune” pentru că, pe lângă deschiderea unui fișier, fopen poate deschide și un URL:

    $fh = fopen("http://127.0.0.1/", "r");

    Această linie de program creează un link către pagina de mai sus și vă permite să începeți să o citiți ca fișier local.

    Notă: Opțiunea „r” utilizată în fopen indică faptul că fișierul este deschis doar pentru citire. Deoarece scrierea într-un fișier nu este inclusă în domeniul problemelor discutate în acest articol, nu voi enumera toate valorile posibile ale parametrului. Cu toate acestea, trebuie să schimbați „r” în „rb” dacă citiți din binare pentru compatibilitate între platforme. Mai jos este un exemplu de acest tip.

    funcţia feof

    Comanda feof determină dacă citirea a ajuns la sfârșitul fișierului și returnează True sau False. Bucla afișată în continuă până la sfârșitul fișierului „fișierul meu”. Rețineți că feof returnează și False dacă citiți o adresă URL și conexiunea expiră deoarece nu mai există date de citit.

    Funcția fclose

    Să sărim peste jumătatea Listingului 1 și să mergem la sfârșit; fclose face opusul fopen: închide conexiunea la fișier sau URL. După executarea acestei funcții, nu veți mai putea citi din fișier sau socket.

    funcția fgets

    Revenind cu câteva rânduri în Lista 1, ajungeți la inima procesului de procesare a fișierului: citirea efectivă a fișierului. Funcția fgets este arma preferată pentru primul exemplu. Preia o linie de date dintr-un fișier și o returnează ca șir. De acolo puteți afișa datele sau le puteți procesa în alt mod. Exemplul din Lista 1 tipărește întregul fișier.

    Dacă decideți să limitați dimensiunea fragmentului de date cu care lucrați, puteți adăuga un argument fgets pentru a limita lungimea maximă a șirului de date care este capturat. De exemplu, utilizați următorul cod pentru a limita lungimea unei linii la 80 de caractere:

    $șir = fgets($file_handle, 81);

    Gândiți-vă la „\0”, indicatorul de sfârșit de linie în C și setați lungimea la un caracter mai mare decât aveți nevoie de fapt. După cum puteți vedea, exemplul de mai sus folosește 81, în timp ce aveți nevoie de 80 de caractere. Obișnuiți să adăugați un caracter suplimentar ori de câte ori trebuie să setați o limită de lungime a liniei pentru o anumită funcție.

    funcția fread

    Funcția fgets este doar una dintre multele funcții disponibile pentru citirea unui fișier. Aceasta este una dintre funcțiile cele mai frecvent utilizate, deoarece procesarea unui fișier linie cu linie în cele mai multe cazuri are cea mai bună sens. De fapt, câteva alte caracteristici oferă capabilități similare. Oricum ar fi, analiza linie cu linie nu este întotdeauna ceea ce aveți nevoie.

    Și aici accesăm fread . Funcția fread are un scop ușor diferit de fgets: este destinată să citească din fișiere binare (adică fișiere care nu sunt inițial compuse din text care poate fi citit de om). Deoarece conceptul de „linii” nu este relevant pentru fișierele binare (structurile de date logice nu sunt de obicei împărțite în linii), trebuie să specificați numărul de octeți care trebuie citiți.

    $fh = fopen("fișierul meu", "rb"); $date = fread($file_handle, 4096);

    Exemplul de mai sus citește 4096 de octeți (4 KB) de date. Rețineți că, indiferent de valoarea pe care o specificați, fread va citi maximum 8192 de octeți (8 KB).

    Presupunând că fișierul nu este mai mare de 8 KB, fragmentul de program de mai jos ar trebui să citească întregul fișier într-o singură linie.

    $fh = fopen("fișierul meu", "rb"); $date = fread($fh, file size("fișierul meu")); fclose($fh);

    Dacă dimensiunea fișierului este mai mare, va trebui să utilizați o buclă pentru a citi restul.

    funcția fscanf

    Revenind la procesarea șirurilor, fscanf este, de asemenea, succesorul funcției tradiționale de bibliotecă de fișiere C. Dacă nu sunteți familiarizat cu aceasta, fscanf citește câmpurile de date în variabile dintr-un fișier.

    listă ($câmp1, $câmp2, $câmp3) = fscanf($fh, „%s %s %s”);

    Șirurile de format utilizate în această funcție sunt descrise în multe surse precum PHP.net, așa că nu voi repeta aceste informații aici. Este suficient să spunem că formatarea șirurilor este foarte flexibilă. De asemenea, trebuie menționat că toate câmpurile sunt plasate în variabila returnată de funcție. (În C, acestea ar fi trecute ca argumente.)

    funcția fgetss

    Funcția fgetss este diferită de funcțiile tradiționale de manipulare a fișierelor și vă oferă o mai bună înțelegere a capacităților PHP. Funcționează ca fgets, dar elimină orice etichete HTML sau PHP pe care le detectează, lăsând doar textul gol. Să luăm fișierul HTML de mai jos.

    Lista 2. Exemplu de fișier HTML
    Titlul meu

    Dacă înțelegi ce înseamnă „Pentru că nu există nimeni care să nu-ți facă durere”, atunci asculți prea mult din trupa America

    Să-l trecem prin funcția fgetss.

    Lista 3. Utilizarea fgetss
    $file_handle = fopen("fișierul meu", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

    Acesta este ceea ce veți obține ca rezultat:

    Titlul meu Dacă înțelegi ce înseamnă „Pentru că nu e nimeni pentru a nu te doare”, atunci asculți prea mult din trupa America

    funcția fpassthru

    Indiferent de modul în care citiți datele dintr-un fișier, puteți imprima datele rămase folosind canalul de ieșire standard folosind funcția fpassthru.

    fpassthru($fh);

    Această funcție imprimă datele, astfel încât să nu fie nevoie să le puneți într-o variabilă.

    Procesare neliniară a fișierelor: deplasarea printr-un fișier

    Desigur, funcțiile descrise mai sus vă permit doar să citiți dintr-un fișier secvenţial. Fișierele mai complexe pot necesita mutarea în diferite părți ale fișierului la începutul sau la sfârșitul fișierului. Pentru a face acest lucru aveți nevoie de funcția fseek.

    fseek($fh, 0);

    Exemplul de mai sus se întoarce la începutul fișierului. Dacă nu doriți să treceți chiar la începutul fișierului - să zicem, un kilooctet este suficient - scrieți pur și simplu:

    fseek($fh, 1024);

    Începând cu PHP V4.0, sunt disponibile și alte câteva opțiuni. De exemplu, dacă trebuie să avansați cu 100 de octeți față de poziția curentă, puteți utiliza următorul cod:

    fseek($fh, 100, SEEK_CUR);

    De asemenea, mutarea înapoi cu 100 de octeți se face prin:

    fseek($fh, -100, SEEK_CUR);

    Dacă doriți să reveniți la poziția de 100 de octeți înainte de sfârșitul fișierului, utilizați în schimb SEEK_END.

    fseek($fh, -100, SEEK_END);

    Odată ce noua poziție este atinsă, puteți utiliza fgets, fscanf sau o altă funcție pentru a citi datele.

    Notă: nu puteți folosi fseek pe descriptori de fișiere care fac referire la o adresă URL.

    Capturați un întreg fișier

    Acum trecem la câteva dintre capacitățile unice de procesare a fișierelor ale PHP: procesarea de blocuri mari de date pe una sau două linii. De exemplu, cum puteți prelua un fișier și afișa întregul său conținut pe pagina dvs. Web? Ei bine, ați văzut un exemplu de utilizare a unei bucle cu fgets. Dar cum poți să faci asta mai ușor? Procesul este aproape ridicol de ușor folosind fgetcontents, care pune întregul fișier pe o linie.

    $my_file = file_get_contents("numefișierul"); echo $fișierul_meu;

    Deși aceasta nu este cea mai bună opțiune, puteți scrie această comandă și mai scurt:

    echo file_get_contents("numele meu fișier");

    Acest articol se concentrează în primul rând pe procesarea fișierelor locale, cu toate acestea, merită remarcat faptul că puteți captura, afișa și analiza și alte pagini Web folosind funcțiile descrise.

    echo file_get_contents("http://127.0.0.1/");

    Această comandă este de fapt aceeași cu:

    $fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

    S-ar putea să te uiți la aceste exemple și să te gândești: „Este mult de muncă”. Dezvoltatorii PHP sunt de acord cu tine. Deci, puteți scurta comanda de mai sus la:

    readfile ("http://127.0.0.1/");

    Funcția readfile trimite întregul conținut al unui fișier sau al unei pagini Web în memoria tampon de ieșire implicită. În mod implicit, această comandă afișează un mesaj de eroare atunci când eșuează. Pentru a evita acest comportament (dacă îl doriți), încercați comanda:

    @readfile ("http://127.0.0.1/");

    Desigur, dacă trebuie să procesați conținutul fișierelor, atunci singura linie returnată de file_get_contents este probabil prea mult. Poate doriți mai întâi să-l împărțiți în bucăți folosind funcția split().

    $array = split("\n", file_get_contents("myfile"));

    Dar de ce ai nevoie de toată această complexitate dacă există o funcție perfect potrivită care să facă treaba pentru tine? Funcția PHP file() îndeplinește această sarcină într-un singur pas: returnează o matrice de șiruri ale cărei elemente sunt liniile fișierului.

    $array = fisier("fișierul meu");

    Trebuie remarcat faptul că există o mică diferență între cele două exemple de mai sus. Comanda split elimină liniile noi, în timp ce comanda fișierului încheie liniile matricei cu liniile noi (la fel ca fgets).

    Cu toate acestea, capabilitățile PHP depășesc cu mult cele descrise mai sus. Puteți analiza fișiere .ini întregi în stil PHP cu o singură comandă parse_ini_file. Comanda parse_ini_file se aplică fișierelor similare cu cele prezentate în Lista 4.

    Lista 4. Exemplu de fișier .ini
    ; Nume comentariu = Misiunea „Regele Arthur” = Pentru a căuta culoarea preferată a Sfântului Graal = Albastru Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

    Următoarele comenzi reprezintă un fișier ca o matrice și apoi tipăriți matricea:

    $file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

    Rezultatul va fi următorul rezultat:

    Lista 5. Ieșire
    Array ( => Regele Arthur => Pentru a căuta Sfântul Graal => Albastru => Mark Twain => Whoopi Goldberg)

    Desigur, puteți observa că această comandă a îmbinat secțiunile. Aceasta este acțiunea implicită, dar o puteți personaliza cu ușurință folosind al doilea argument al parse_ini_file: process_sections, care este o variabilă booleană. Setați process_sections la True.

    $file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

    Și rezultatul dvs. va arăta astfel:

    Lista 6. Ieșire
    Array ( => Array ( => Regele Arthur => Pentru a căuta Sfântul Graal => Albastru) => Array ( => Mark Twain => Whoopi Goldberg))

    PHP pune datele într-o matrice multidimensională ușor de analizat.

    Dar acesta este doar vârful aisbergului când vine vorba de procesarea fișierelor în PHP. Funcții mai complexe, cum ar fi tidy_parse_file și xml_parse, vă pot ajuta să analizați documente HTML și, respectiv, XML. Consultați secțiunea pentru informații mai detaliate despre cum funcționează aceste funcții. Ambele merită luate în considerare dacă veți lucra cu aceste tipuri de fișiere, dar în loc să treceți prin toate tipurile de fișiere posibile, ar putea dori să aruncați o privire mai atentă la conținutul acestui articol, care are câteva reguli generale bune pentru lucrând cu funcțiile pe care le-am descris până acum.

    Stilul de programare bun

    Nu presupuneți niciodată că totul din programul dvs. va funcționa conform intenției. De exemplu: ce se întâmplă dacă fișierul pe care îl căutați a fost mutat? Ce se întâmplă dacă o modificare a permisiunii vă face să nu puteți citi conținutul unui fișier? Puteți verifica existența unui fișier și drepturile de a-l citi în avans folosind metodele file_exists și is_readable.

    Lista 7. Utilizarea file_exists și is_redable
    $filename = "fișierul meu"; if (fișier_există($nume fișier) && este_lizibil ($nume fișier)) ($fh = fopen($nume fișier, "r"); # Procesare fclose($fh); )

    Cu toate acestea, în practică, această bucată de program va fi probabil exagerată pentru sarcina dvs. Manipularea valorilor returnate de fopen este mai simplă și mai precisă.

    if ($fh = fopen($nume fișier, "r")) ( # Se procesează fclose($fh); )

    Deoarece fopen returnează False dacă eșuează, acest lucru va asigura că fișierul va fi procesat numai dacă fișierul poate fi deschis. Desigur, dacă fișierul nu există sau este imposibil de citit, te-ai aștepta ca valoarea returnată să fie negativă. Prin urmare, o astfel de verificare este o capcană în care cad toate problemele potențiale. Alternativ, puteți ieși din program sau puteți afișa un mesaj de eroare dacă fișierul nu poate fi deschis.

    La fel ca fopen, funcțiile file_get_contents, file și readfile returnează False dacă fișierul nu poate fi deschis sau procesat. Funcțiile fgets, fgetss, fread, fscanf și fclose returnează, de asemenea, False dacă apare o eroare. Desigur, cu excepția fclose , probabil că ați procesat deja rezultatele pe care le returnează. În ceea ce privește fclose , nu se pot face multe dacă mânerul fișierului nu se închide corect, așa că verificarea valorii de returnare a fclose este în general exagerată.

    Alegerea este a ta

    PHP nu are lipsă de modalități eficiente de a citi și analiza fișiere. Funcțiile clasice precum fread vă pot servi în mod fiabil de cele mai multe ori, sau puteți fi mai atras de simplitatea readfile dacă asta este ceea ce aveți nevoie pentru a finaliza treaba. Alegerea depinde într-adevăr de ceea ce încercați să realizați.

    Dacă procesați cantități mari de date, probabil veți găsi fscanf mai util și mai eficient decât, să zicem, utilizarea fișierului în combinație cu comenzile ulterioare split și sprintf. Dacă pur și simplu afișați o cantitate mare de text cu modificări minore, totuși, utilizarea funcțiilor fișier , file_get_contents sau readfile poate avea mai mult sens. Această soluție va fi probabil corectă atunci când utilizați PHP pentru stocarea în cache sau chiar pentru crearea unui server proxy temporar.

    PHP oferă multe instrumente pentru lucrul cu fișierele. Cunoaște-te pe fiecare mai bine și află care instrumente sunt cele mai bune pentru proiectul la care lucrezi. Vi se oferă o gamă largă de instrumente software, utilizați-le cel mai eficient și distrați-vă procesând fișierele folosind PHP.

    şir fgets(mânerul resursei [, lungimea int])

    Returnează un șir de lungime - 1 octet citit din descriptorul de fișier indicat de handle . Citirea se termină când numărul de octeți citiți atinge lungimea - 1, când ajunge la sfârșitul liniei (care este inclusă în valoarea returnată) sau când ajunge la sfârșitul fișierului (oricare vine primul). Dacă lungimea nu este specificată, valoarea implicită este de 1 kilobyte sau 1024 de octeți.

    Dacă apare o eroare, funcția revine FALS .

    Cele mai frecvente greșeli:

    Programatori obișnuiți cu semantica funcțiilor „C”. fgets(), trebuie să ia în considerare diferența în modul în care este returnat indicatorul de sfârșit de fișier (EOF).

    Indicatorul de fișier trebuie să fie valid și să trimită către un fișier deschis cu succes de funcții fopen() sau fsockopen() .

    Mai jos este un exemplu simplu:


    Exemplul 1. Citirea unui fișier linie cu linie

    $handle = fopen("/tmp/inputfile.txt" , "r" );
    în timp ce (! feof ($handle )) (
    $buffer = fgets($handle, 4096);
    echo $buffer ;
    }
    fclose($handle);
    ?>

    Cometariu: Parametrul de lungime a devenit opțional începând cu versiunea PHP 4.2.0. Dacă acest parametru este omis, se presupune că lungimea șirului este 1024. Începând cu PHP 4.3, omiterea parametrului lungime va face ca fluxul să fie citit până la sfârșitul șirului. Dacă majoritatea liniilor din fișier sunt mai lungi de 8 kiloocteți, cea mai eficientă decizie în ceea ce privește resursele utilizate de script este de a specifica o lungime maximă a liniei.

    Cometariu: Această funcție poate procesa corect date binare începând cu PHP 4.3. Versiunile anterioare nu aveau această funcționalitate.