Kreirajte, otvarajte, čitajte, pišite, brišite i provjerite postojanje datoteke u PHP-u. Rad sa fajlovima u PHP-u. Čitanje datoteke, pisanje u datoteku. PHP tutorial. Brisanje fajlova, promena chmod-a, rad sa direktorijumima. C Php podaci iz datoteke

U prethodnoj lekciji naučili smo kako koristiti PHP za pristup sistemu datoteka servera. U ovom vodiču ćemo koristiti ove informacije za čitanje iz jednostavne tekstualne datoteke.

Tekstualne datoteke su odlične za pohranjivanje različitih vrsta podataka. Nisu tako fleksibilne kao baze podataka, ali obično ne zahtijevaju toliko memorije. Štaviše, tekstualne datoteke su u formatu koji je čitljiv na većini sistema.

Otvorite tekstualni fajl

Da biste otvorili tekstualnu datoteku, koristite funkciju fopen.

Evo njegove sintakse: Fopen()

naziv datoteke, način rada

Ime datoteke Ime datoteke za otvaranje.

mod Mode može biti "r" (čitanje), "w" (pisanje) ili "a" (dodavanje). U ovom vodiču ćemo samo čitati iz datoteke i shodno tome koristiti "r".

U sljedećoj lekciji ćemo naučiti kako napisati i priložiti tekst. Primjeri u ovom vodiču koriste datoteku unitednations.txt. Ovo je jednostavna lista UN programa i fondova i njihovih domena. Možete preuzeti ovu datoteku ili kreirati svoju i koristiti je u primjerima. Prvo, pokušajmo otvoriti unitednations.txt:

// Otvorite tekstualni fajl

// Zatvori tekstualni fajl

fclose($f);

?> Primjer 1: Čitanje reda iz tekstualne datoteke Datoteka sistematski bilježi: naziv programa, zarez, domen. Kao što možete očekivati, mnogo više informacija može se snimiti u datoteku razdvojenu zarezima. Da bismo dobili informacije iz svake linije, koristimo niz. Pogledajte lekciju 8 o nizovima. Čitanje iz tekstualnih datoteka $f = fopen("unitednations.txt", "r"); // Čitanje red po red do kraja datoteke dok (!feof($f)) (

  • // Kreirajte niz razdvojen zarezima
  • "; $arrM = explode(",",fgets($f));

    // Pisanje linkova (preuzimanje podataka iz niza)

    eho"

    U PHP-u se često morate baviti kreiranjem datoteke... vrlo je jednostavno: nema datoteke na disku, kod je pokrenut i datoteka se pojavila, onda možete pročitati ovu datoteku u drugu varijablu ili čak bilo koju stranicu na Internet i onda tamo nešto napiši...ali za ovo treba znati posebne funkcije...više o tome u ovom članku...

    Da biste kreirali datoteku u PHP-u u izvršnoj skripti, trebate samo navesti nekoliko funkcija:

    Pogledajmo primjer:

    $text = "Neka vrsta teksta za pisanje u fajl";
    $fp = fopen("file.txt", "w");
    fwrite($fp, $text);
    fclose($fp);
    ?>

    Ovdje bi trebao znati:

    fopen()- funkcija otvara datoteku za čitanje ili pisanje i pojašnjenja;

    Ovo pojašnjenje (parametar načina rada fopen funkcije) je vrlo važno:

    • "r" - otvorite datoteku u php SAMO čitanje. Kursor se postavlja na početak.
    • "r+" - otvorite datoteku u php za čitanje i pisanje. Kursor se postavlja na početak. !!! - sa ova dva načina rada r i r+, fajlovi moraju već biti kreirani (inače će se pojaviti greška Upozorenje: fopen(file.txt) : nije uspjelo otvoriti stream: nema takve datoteke ili direktorija u...), a mi samo čitamo ili imamo priliku dodati.
    • "w" - fajl se otvara SAMO za pisanje. Fajl se skraćuje na nultu dužinu - odnosno prepisuje se. Zapisuje se ono što je potrebno i kursor se postavlja na početak.
    • "w+" - otvara fajl za pisanje I ČITANJE! Ostalo je isto kao u "w" modu. !!! - u ova dva moda - ako fajl nije kreiran - POKUŠAJ SE DA SE PRAVI!
    • "a" - otvorite datoteku SAMO za pisanje. Za razliku od "w", ova opcija ne prepisuje sadržaj datoteke, već postavlja kursor na kraj reda i dodaje sadržaj koji smo željeli dodati na kraj.
    • "a+" - otvorite datoteku za pisanje i čitanje.

    fwrite($fp, $text) - funkcija za pisanje u datoteku u PHP-u - to jest, ono što je u promenljivoj $text upisuje se u datoteku koja je u promenljivoj $fp;

    fclose($fp) - funkcija za zatvaranje datoteke koju smo zapisali u varijablu $fp;

    Sada možete lako kreirati datoteke u php-u ispravno, otvoriti ih za čitanje i uređivanje.

    Korisni PHP dodaci i funkcije za rad sa otvorenim fajlom:

    while(!feof($fp))(
    $mytext = fgets($fp, 99);
    echo $mytext."
    ";
    }

    ovdje je ispunjen uslov - "dok se ne dostigne kraj fajla, uradi ovo" dok(!feof($fp))

    1. Funkcija fgets($fp, 99) - omogućava vam da podijelite sav sadržaj na sekcije od 99 bajtova i dalje, da biste to jasnije vidjeli postavljamo oznaku

    Ova funkcija niza fgets(ručnik resursa [, int dužina]) podrazumevano prihvata 1024 bajta (1 kilobajt) kao parametar dužine, ako nije navedeno biće tako. Ovaj parametar je opcioni od PHP 4.2.0 (vraća FALSE u slučaju greške)

    Dodatne funkcije za otvaranje, pisanje i kreiranje datoteke

    Funkcija - int readfile(string filename [, bool use_include_path [, kontekst resursa]]) - pročitajte datoteku u cjelini.

    Čita datoteku i upisuje sadržaj u izlazni bafer. I vraća broj izlaznih bajtova. U slučaju greške, vratit će se ako se pas ne koristi - @readfile.

    Nešto poput ovoga će se dogoditi:

    Na kraju riječi nalazi se oznaka
    .

    b. Funkcija - niz fajl(string filename [, int use_include_path [, kontekst resursa]]), radi isto što i readfile funkcija, s jednim izuzetkom dodaje sadržaj datoteke u niz:

    Na ovaj način možete čitati bilo koju stranicu na Internetu: $lines = file("http://site/"); i iterirati niz pomoću funkcije foreach;

    3a. string funkcija file_get_contents(string filename [, bool use_include_path [, kontekst resursa [, int offset [, int maxlen]]]] - omogućava vam da dobijete sadržaj kao jedan niz.

    Ovo je univerzalnija PHP funkcija za čitanje datoteke, slična funkciji datoteke, samo se sadržaj vraća kao niz, a ne niz, i možete postaviti uslove - s kojim bajtom početi - offset i gde da završim - maxlen. U slučaju neuspjeha, vratit će FALSE.

    Važno!!!- u ovom slučaju, funkcija zamjenjuje 3 odjednom: fopen(), fread() i fclose() i tako se oslobađa oznake.

    3b. int funkcija file_put_contents(string ime datoteke, mješoviti podaci [, int zastavice [, kontekst resursa]]) - identično sekvencijalnim pozivima funkcija fopen(), fwrite() i fclose() - vraća broj upisanih bajtova.

    Općenito, interakcija s datotekama u PHP-u se svodi na otvaranje datoteke, obavljanje potrebnih radnji s njima i zatvaranje datoteke. Prilikom otvaranja datoteke određuje se način daljeg rada s njom. Ovo može biti otvaranje za čitanje, pisanje, dodavanje podataka. Postoje i načini otvaranja datoteka koji kombinuju čitanje i pisanje.

    Postoji mnogo mogućnosti za čitanje iz datoteka - možete dobiti podatke u različitim oblicima - čitanje red po red, dobivanje niza nizova itd.

    Kreiranje i pisanje fajla

    Da biste kreirali datoteku, morate je otvoriti u načinu pisanja. Otvaranje datoteke se vrši pomoću fopen funkcije. Prvi parametar ove funkcije specificira putanju do datoteke. Drugi parametar označava način otvaranja datoteke. Da biste kreirali datoteku, morate odrediti način snimanja datoteke - "w".

    $f = fopen( "myfile.txt" , "w" );

    Ako datoteka s istim imenom već postoji, tada će vam način snimanja omogućiti da napravite novu praznu datoteku umjesto postojeće, brišući sve njene podatke.

    * Tu je i parametar "w+", što vam omogućava da otvorite istovremeno za čitanje i pisanje. U tom slučaju, ako je datoteka s istim imenom već postojala, podaci u njoj će biti izbrisani.

    Prilikom izvođenja operacije otvaranja, funkcija će vratiti vrijednost deskriptora datoteke - posebne varijable datoteke, koja će narednim funkcijama ukazati s kojom datotekom treba izvršiti svoje radnje.

    Da biste dodali nove podatke u datoteku otvorenu u načinu pisanja, koristite funkciju fwrite. Prvi parametar je deskriptor datoteke. Zatim red koji treba upisati u datoteku. Ako je potrebno, treći parametar se može koristiti za ograničavanje broja upisanih znakova.

    fwrite($f, "Moj tekst za pisanje u datoteku.");

    Nakon snimanja svih linija, mora se zatvoriti. Za to se koristi funkcija fclose. Jedini parametar za to je deskriptor datoteke.

    fclose($f);

    Kao rezultat toga, kod za kreiranje i spremanje datoteke izgleda ovako:

    $f = fopen( "myfile.txt" , "w" );
    fwrite($f, "Prvi red.\r\n");
    ...
    fwrite($f, "Posljednji red.\r\n");
    fclose($f);

    * Simboli "\r\n" označava kraj reda. Ako ne dodate, svi redovi u snimljenoj datoteci će se spojiti u jedan red.

    Dodavanje podataka u postojeći fajl

    Da biste dodali bilo koju informaciju već kreiranoj datoteci, potrebno je da je otvorite u načinu pisanja, ali da sačuvate postojeće informacije. One. fajl će takođe biti otvoren za pisanje, ali kada se piše u takav fajl, oni će biti dodati na njegov kraj.

    $f = fopen( "myfile.txt" , "a" ); "//Parametar "a" određuje otvaranje u načinu dodavanja"
    fwrite($f, "Novi red\r\n" );
    fclose($f);

    Ako datoteka sa navedenim imenom ne postoji, datoteka će biti kreirana i svi podaci će biti upisani u nju.

    * Postoji i način rada "a+", koji otvara datoteku za čitanje i pisanje, idući do kraja datoteke.

    Čitanje iz datoteke

    Za čitanje iz datoteke, fopen funkciji je dodijeljen parametar "r", što znači da će se datoteka otvoriti samo za čitanje. Funkcija fgets čita iz datoteke. Prvi parametar je deskriptor datoteke. Drugi, opcioni, parametar određuje veličinu niza koji se čita. Ako drugi parametar nije naveden, trenutni red će se čitati do znaka za kraj reda.

    $f = fopen( "myfile.txt" , "r" ); // Parametar "r" određuje otvaranje u načinu čitanja
    $s = fgets($f);
    echo $s;
    fclose($f);

    * Način rada "r+" otvara fajl za čitanje i pisanje.

    Da biste pročitali sve redove iz datoteke, možete koristiti petlju u kojoj će čitati red po red do kraja datoteke:

    $f = fopen( "myfile.txt" , "r" );
    dok (!feof($f))(
    $s = fgets($f);
    echo $s;
    }
    fclose($f);

    Funkcija feof se koristi u stanju petlje za određivanje kraja datoteke i završetak ciklusa čitanja.

    Pored opisane metode dobijanja podataka iz datoteke, PHP ima mnogo različitih funkcija. Ponekad je lakše odmah dobiti cijeli sadržaj datoteke (funkcija readfile) ili učitati sve linije u niz (funkcija datoteke) i raditi s njim. U takve svrhe ne morate otvarati datoteku za čitanje i zatvarati je. Sve ove radnje će izvršiti sama funkcija.

    readfile( "myfile.txt" );

    $mas = file("myfile.txt" );

    foreach ($mas kao $m)
    echo $m;

    Koristeći fgetc funkciju, možete čitati sadržaj datoteke znak po znak:

    $f = fopen( "myfile.txt" , "r" );
    dok (!feof($f))(
    $s = fgetc($f);
    echo $s;
    }
    fclose($f);

    Brisanje fajla

    Uklanjanje fajla se vrši funkcijom unlink. Parametar specificira putanju do datoteke koju treba izbrisati.

    prekinuti vezu ( "myfile.txt" );

    Provjera da li datoteka postoji

    Ponekad, prije nego što izvršite bilo kakvu radnju na datoteci, morate provjeriti postoji li. Za to se koristi funkcija file_exists. Parametar specificira putanju do datoteke.

    if (file_exists("myfile.txt" ))
    echo "Postoji takav fajl.";
    ostalo
    echo "Ne postoji datoteka s tim imenom.";

    O korištenju funkcija fopen, fclose, feof, fgets, fgetss i fscanf

    Hajde da navedemo sve mogućnosti

    Jedna od prednosti rada sa modernim programskim jezicima kao što je PHP je broj dostupnih funkcija. PHP bi lako mogao usvojiti Perlov moto, "Postoji više od jednog načina da se nešto uradi", posebno kada je u pitanju obrada datoteka. Ali s mnoštvom dostupnih alata, postavlja se pitanje koji je najbolji za obavljanje posla. Naravno, odgovor na ovo pitanje zaista ovisi o tome koji su vaši ciljevi prilikom obrade datoteke, tako da je učenje svih mogućnosti jezika vrijedno vašeg vremena.

    Tradicionalne fopen metode

    Fopen metode su vjerovatno najpoznatije C i C++ programerima iz prošlosti, jer su manje-više alati koji su vam godinama bili na dohvat ruke ako ste radili sa tim programskim jezicima. Za bilo koju od ovih metoda, slijedite standardnu ​​proceduru, koristeći fopen da otvorite datoteku, funkciju za čitanje podataka, a zatim fclose da zatvorite datoteku, kao što je prikazano u Listingu 1.

    Listing 1. Otvaranje i čitanje datoteke koristeći fgets
    $file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

    Iako su ove funkcije poznate većini iskusnih programera, dopustite mi da analiziram kako rade. U stvarnosti slijedite ove korake:

    1. Otvorite fajl. $file_handle pohranjuje vezu do samog fajla.
    2. Provjerite jeste li stigli do kraja datoteke.
    3. Nastavite čitati datoteku dok ne dođete do kraja, ispisujući svaki red koji pročitate.
    4. Zatvorite fajl.

    Imajući to na umu, pogledat ću svaku funkciju datoteke koja se ovdje koristi.

    fopen funkcija

    Funkcija fopen uspostavlja vezu sa datotekom. Kažem "uspostavlja vezu" jer, osim otvaranja datoteke, fopen može otvoriti i URL:

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

    Ova linija programa stvara vezu do gornje stranice i omogućava vam da je počnete čitati kao lokalnu datoteku.

    Napomena: Opcija "r" koja se koristi u fopen označava da je datoteka otvorena samo za čitanje. Budući da pisanje u datoteku nije uključeno u opseg pitanja o kojima se raspravlja u ovom članku, neću navoditi sve moguće vrijednosti parametra. Međutim, trebate promijeniti "r" u "rb" ako čitate iz binarnih datoteka radi kompatibilnosti na više platformi. Ispod je primjer ove vrste.

    feof funkcija

    Naredba feof određuje da li je čitanje stiglo do kraja datoteke i vraća True ili False. Petlja prikazana u nastavlja se do kraja datoteke "myfile". Imajte na umu da feof također vraća False ako čitate URL i veza istekne jer nema više podataka za čitanje.

    Funkcija fclose

    Preskočimo sredinu Listinga 1 i idemo do kraja; fclose radi suprotno od fopen: zatvara vezu sa datotekom ili URL-om. Nakon izvršavanja ove funkcije, više nećete moći čitati iz datoteke ili utičnice.

    fgets funkcija

    Vraćajući se nekoliko redova unazad u Listingu 1, dolazite do srži procesa obrade datoteke: zapravo čitanje datoteke. Funkcija fgets je vaše oružje izbora za prvi primjer. On hvata red podataka iz datoteke i vraća ga kao string. Odatle možete prikazati podatke ili ih na drugi način obraditi. Primjer u Listingu 1 ispisuje cijelu datoteku.

    Ako odlučite ograničiti veličinu dijela podataka s kojim radite, možete dodati argument fgets da ograničite maksimalnu dužinu niza podataka koji se snima. Na primjer, koristite sljedeći kod da ograničite dužinu reda na 80 znakova:

    $string = fgets($file_handle, 81);

    Zamislite "\0", indikator kraja reda u C, i postavite dužinu na jedan znak dužu nego što vam je zapravo potrebno. Kao što vidite, gornji primjer koristi 81, dok vam je potrebno 80 znakova. Neka vam postane navika dodavanje dodatnog znaka kad god trebate postaviti ograničenje dužine reda za datu funkciju.

    fread funkcija

    Funkcija fgets je samo jedna od mnogih funkcija dostupnih za čitanje datoteke. Ovo je jedna od najčešće korištenih funkcija, budući da obrada datoteke red po red u većini slučajeva ima najviše smisla. U stvari, nekoliko drugih funkcija nudi slične mogućnosti. Kako god bilo, analiza linija po red nije uvijek ono što vam treba.

    I ovdje pristupamo fread-u. Funkcija fread ima malo drugačiju svrhu od fgets: ona je namijenjena čitanju iz binarnih datoteka (to jest, datoteka koje se u početku ne sastoje od teksta čitljivog ljudima). Pošto koncept "linija" nije relevantan za binarne datoteke (logičke strukture podataka se obično ne razbijaju u redove), morate navesti broj bajtova za čitanje.

    $fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

    Gornji primjer čita 4096 bajtova (4 KB) podataka. Imajte na umu da će, bez obzira na vrijednost koju navedete, fread čitati maksimalno 8192 bajta (8 KB).

    Pod pretpostavkom da datoteka nije veća od 8 KB, programski isječak u nastavku bi trebao pročitati cijelu datoteku u jednom redu.

    $fh = fopen("myfile", "rb"); $data = fread($fh, veličina datoteke("myfile")); fclose($fh);

    Ako je veličina datoteke veća, morat ćete koristiti petlju da pročitate ostatak.

    fscanf funkcija

    Vraćajući se na obradu stringova, fscanf je također nasljednik tradicionalne funkcije biblioteke C datoteka, fscanf čita polja podataka u varijable iz datoteke.

    lista ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

    Nizovi formata koji se koriste u ovoj funkciji opisani su u mnogim izvorima kao što je PHP.net, tako da neću ponavljati ovu informaciju ovdje. Dovoljno je reći da je formatiranje stringova vrlo fleksibilno. Također treba napomenuti da su sva polja smještena u varijablu koju vraća funkcija. (U C-u bi se oni prosljeđivali kao argumenti.)

    fgetss funkcija

    Funkcija fgetss se razlikuje od tradicionalnih funkcija za manipulaciju datotekama i daje vam bolje razumijevanje PHP-ovih mogućnosti. Radi kao fgets, ali odbacuje sve HTML ili PHP oznake koje otkrije, ostavljajući samo goli tekst. Uzmimo HTML fajl ispod.

    Listing 2. Primjer HTML datoteke
    Moj naslov

    Ako razumete šta znači "Cause there ain't no one for to you no pain" onda slušate previše o bendu America

    Propustimo ga kroz fgetss funkciju.

    Listing 3. Upotreba fgetss-a
    $file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

    Ovo ćete dobiti kao izlaz:

    Moj naslov Ako razumete šta znači "Cause there ain't no one for to you no pain" onda slušate previše o bendu America

    fpassthru funkcija

    Bez obzira na to kako čitate podatke iz datoteke, preostale podatke možete ispisati koristeći standardni izlazni kanal koristeći fpassthru funkciju.

    fpassthru($fh);

    Ova funkcija ispisuje podatke tako da ih ne morate stavljati u varijablu.

    Nelinearna obrada datoteke: kretanje kroz datoteku

    Naravno, gore opisane funkcije vam omogućavaju samo uzastopno čitanje iz datoteke. Složenije datoteke mogu zahtijevati premještanje u različite dijelove datoteke na početku ili na kraju datoteke. Da biste to učinili, potrebna vam je funkcija fseek.

    fseek($fh, 0);

    Gornji primjer se vraća na početak datoteke. Ako ne želite da pređete na sam početak fajla - recimo, dovoljan je jedan kilobajt - jednostavno napišite:

    fseek($fh, 1024);

    Od PHP V4.0, dostupno je i nekoliko drugih opcija. Na primjer, ako trebate pomaknuti naprijed 100 bajtova od svoje trenutne pozicije, možete koristiti sljedeći kod:

    fseek($fh, 100, SEEK_CUR);

    Isto tako, pomeranje unazad 100 bajtova se vrši:

    fseek($fh, -100, SEEK_CUR);

    Ako se želite vratiti na poziciju od 100 bajtova prije kraja datoteke, umjesto toga koristite SEEK_END.

    fseek($fh, -100, SEEK_END);

    Kada se dostigne nova pozicija, možete koristiti fgets, fscanf ili neku drugu funkciju za čitanje podataka.

    Napomena: ne možete koristiti fseek na deskriptorima datoteka koji upućuju na URL.

    Snimite cijeli fajl

    Sada prelazimo na neke od jedinstvenih PHP-ovih mogućnosti obrade datoteka: obradu velikih blokova podataka u jednom ili dva reda. Na primjer, kako možete uzeti datoteku i prikazati cijeli njen sadržaj na svojoj web stranici? Pa, vidjeli ste primjer korištenja petlje sa fgetovima. Ali kako to možete učiniti lakšim? Proces je gotovo smiješno jednostavan koristeći fgetcontents, koji stavlja cijeli fajl na liniju.

    $my_file = file_get_contents("myfilename"); echo $my_file;

    Iako ovo nije najbolja opcija, ovu naredbu možete napisati još kraće:

    echo file_get_contents("myfilename");

    Ovaj članak se prvenstveno fokusira na obradu lokalnih datoteka, međutim, vrijedno je napomenuti da također možete snimiti, prikazati i raščlaniti druge web stranice koristeći opisane funkcije.

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

    Ova komanda je zapravo ista kao:

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

    Možda gledate ove primjere i mislite: "To je puno posla." PHP programeri se slažu s vama. Dakle, gornju naredbu možete skratiti na:

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

    Funkcija readfile ispisuje cijeli sadržaj datoteke ili web stranice u zadani izlazni bafer. Ova komanda podrazumevano prikazuje poruku o grešci kada ne uspe. Da biste izbjegli ovo ponašanje (ako ga želite), pokušajte naredbu:

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

    Naravno, ako trebate obraditi sadržaj datoteka, onda je jedan red koji vraća file_get_contents vjerovatno previše. Možda ćete želeti da ga prvo podelite na delove pomoću funkcije split().

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

    Ali zašto vam je potrebna sva ova složenost ako postoji savršeno prikladna funkcija koja će obaviti posao umjesto vas? PHP file() funkcija izvršava ovaj zadatak u jednom koraku: vraća niz stringova čiji su elementi linije datoteke.

    $array = file("myfile");

    Treba napomenuti da postoji mala razlika između dva gornja primjera. Komanda split uklanja nove redove, dok naredba file završava redove niza novim redovima (kao i fgets).

    PHP-ove mogućnosti, međutim, daleko prevazilaze gore opisane. Možete raščlaniti cijele .ini datoteke u PHP stilu sa samo jednom parse_ini_file komandom. Naredba parse_ini_file primjenjuje se na datoteke slične onima prikazanim u Listingu 4.

    Listing 4. Primjer .ini datoteke
    ; Ime komentara = Potraga za "Kralj Artur" = Potraga za svetim gralom omiljena boja = Plava Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

    Sljedeće naredbe predstavljaju datoteku kao niz, a zatim ispisuju niz:

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

    Rezultat će biti sljedeći izlaz:

    Listing 5. Izlaz
    Niz ( => Kralj Artur => Tražiti Sveti gral => Plavi => Mark Twain => Whoopi Goldberg)

    Naravno, možete primijetiti da je ova komanda spojila sekcije. Ovo je zadana radnja, ali je možete lako prilagoditi korištenjem drugog argumenta parse_ini_file: process_sections, koji je Boolean varijabla. Postavite process_sections na True.

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

    I vaš izlaz će izgledati ovako:

    Listing 6. Izlaz
    Niz ( => Niz ( => Kralj Artur => Za traženje Svetog grala => Plavo) => Niz ( => Mark Twain => Whoopi Goldberg))

    PHP stavlja podatke u višedimenzionalni niz koji se lako može analizirati.

    Ali ovo je samo vrh ledenog brega kada je u pitanju obrada datoteka u PHP-u. Složenije funkcije kao što su tidy_parse_file i xml_parse mogu vam pomoći da analizirate HTML i XML dokumente. Pogledajte odjeljak za detaljnije informacije o tome kako ove funkcije rade. I jedno i drugo je vrijedno razmotriti ako ćete raditi s ovim tipovima datoteka, ali umjesto da prolazite kroz sve moguće tipove datoteka, možda biste željeli detaljnije pogledati sadržaj ovog članka, koji ima neka dobra opća pravila za rad sa funkcijama koje sam do sada opisao.

    Dobar stil programiranja

    Nikada nemojte pretpostavljati da će sve u vašem programu raditi kako je predviđeno. Na primjer: šta ako je datoteka koju tražite premještena? Što ako promjena dozvole uzrokuje da ne možete čitati sadržaj datoteke? Možete unaprijed provjeriti postojanje datoteke i prava za čitanje pomoću metoda file_exists i is_readable.

    Listing 7. Korištenje file_exists i is_readable
    $filename = "myfile"; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # Obrada fclose($fh); )

    Međutim, u praksi će ovaj dio programa vjerovatno biti pretjeran za vaš zadatak. Rukovanje vrijednostima koje vraća fopen je jednostavnije i preciznije.

    if ($fh = fopen($filename, "r")) ( # Obrada fclose($fh); )

    Budući da fopen vraća False ako ne uspije, to će osigurati da će datoteka biti obrađena samo ako se datoteka može otvoriti. Naravno, ako datoteka ne postoji ili je nečitljiva, očekivali biste da će povratna vrijednost biti negativna. Stoga je takva provjera zamka u koju padaju svi potencijalni problemi. Alternativno, možete izaći iz programa ili prikazati poruku o grešci ako se datoteka ne može otvoriti.

    Kao i fopen, funkcije file_get_contents, file i readfile vraćaju False ako se datoteka ne može otvoriti ili obraditi. Funkcije fgets, fgetss, fread, fscanf i fclose također vraćaju False ako dođe do greške. Naravno, sa izuzetkom fclose , vjerovatno ste već obrađivali rezultate koje oni vraćaju. Što se tiče fclose , nema mnogo toga što se može učiniti ako se file handle ne zatvori kako treba, tako da je provjera povratne vrijednosti funkcije fclose općenito pretjerana.

    Izbor je na vama

    PHP nema nedostatak efikasnih načina za čitanje i raščlanjivanje datoteka. Klasične funkcije poput fread-a mogu vam pouzdano služiti većinu vremena, ili će vas možda više privući jednostavnost readfile-a ako je to ono što vam je potrebno da biste obavili posao. Izbor zaista zavisi od toga šta pokušavate da postignete.

    Ako obrađujete velike količine podataka, vjerovatno će vam fscanf biti korisniji i efikasniji od, recimo, korištenja datoteke u kombinaciji sa sljedećim split i sprintf komandama. Međutim, ako jednostavno prikazujete veliku količinu teksta sa manjim promjenama, korištenje funkcija file , file_get_contents ili readfile može imati više smisla. Ovo rješenje će vjerovatno biti ispravno kada koristite PHP za keširanje ili čak kreiranje privremenog proxy servera.

    PHP pruža mnoge alate za rad sa fajlovima. Upoznajte svaki od njih bolje i saznajte koji su alati najbolji za projekat na kojem radite. Nudi vam se širok izbor softverskih alata, koristite ih najefikasnije i zabavite se obrađujući svoje datoteke koristeći PHP.

    string fgets(ručnik resursa [, int dužina])

    Vraća string dužine - 1 bajt pročitan iz deskriptora datoteke na koji ukazuje handle .

    Čitanje se završava kada broj pročitanih bajtova dostigne dužinu - 1, kada dostigne kraj reda (što je uključeno u povratnu vrijednost) ili kada dođe do kraja datoteke (što se prije dogodi). Ako dužina nije navedena, podrazumevano je 1 kilobajt ili 1024 bajta. Ako dođe do greške, funkcija se vraća .

    FALSE

    Najčešće greške: Programeri navikli na semantiku "C" funkcija fgets()

    , mora uzeti u obzir razliku u načinu na koji se vraća oznaka kraja datoteke (EOF). fopen() Pokazivač datoteke mora biti važeći i pokazivati ​​na datoteku koju su funkcije uspješno otvorile ili .

    fsockopen()


    Ispod je jednostavan primjer:

    Primjer 1: Čitanje datoteke red po red
    $handle = fopen("/tmp/inputfile.txt" , "r");
    dok (! feof ($handle)) (
    $buffer = fgets($handle, 4096);
    }
    echo $buffer ;
    ?>

    fclose($handle); komentar:

    fclose($handle); Parametar dužine postao je opcioni počevši od PHP verzije 4.2.0. Ako je ovaj parametar izostavljen, pretpostavlja se da je dužina stringa 1024. Od PHP 4.3, izostavljanje parametra dužine će uzrokovati čitanje toka do kraja stringa. Ako je većina redova u datoteci duža od 8 kilobajta, najefikasnija odluka u vezi sa resursima koje koristi skripta je specificiranje maksimalne dužine reda.