Stvaranje, otvaranje, čitanje, pisanje, brisanje i provjera postojanja datoteka u PHP-u. Rad s Php datotečnim sustavom čita informacije iz datoteke znak po znak

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

Nabrojimo sve mogućnosti

Jedna od prednosti rada s modernim programskim jezicima poput PHP-a je broj dostupnih značajki. PHP bi lako mogao usvojiti Perlov moto, "Postoji više od jednog načina da se nešto učini", posebno kada se radi o obradi datoteka. Ali s obiljem dostupnih alata, postavlja se pitanje koji je najbolji za obavljanje posla. Naravno, odgovor na ovo pitanje zapravo 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

Metode fopen možda su najpoznatije C i C++ programerima iz prošlosti, budući da su manje-više alati koji su vam godinama bili na dohvat ruke ako ste radili s tim programskim jezicima. Za bilo koju od ovih metoda slijedite standardnu ​​proceduru, koristeći fopen za otvaranje datoteke, funkciju za čitanje podataka, a zatim fclose za zatvaranje datoteke, kao što je prikazano u ispisu 1.

Ispis 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 datoteku. $file_handle pohranjuje vezu na samu datoteku.
  2. Provjerite jeste li došli do kraja datoteke.
  3. Nastavite čitati datoteku dok ne dođete do kraja, ispisujući svaki redak koji pročitate.
  4. Zatvorite datoteku.

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

fopen funkcija

Funkcija fopen uspostavlja vezu s 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 na gornju stranicu i omogućuje vam da je počnete čitati kao lokalnu datoteku.

Bilješka: 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 govori 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 s više platformi. Ispod je primjer ove vrste.

funkcija feof

Naredba feof određuje je li čitanje doseglo kraj 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 više nema podataka za čitanje.

Funkcija fclose

Preskočimo sredinu ispisa 1 i prijeđimo na kraj; fclose radi suprotno od fopen: zatvara vezu s datotekom ili URL-om. Nakon izvršavanja ove funkcije, više nećete moći čitati iz datoteke ili utičnice.

funkcija fgets

Vraćajući se nekoliko redaka u ispisu 1, dolazite do srži procesa obrade datoteke: zapravo čitanja datoteke. Funkcija fgets je vaše oružje izbora za prvi primjer. Grabi redak podataka iz datoteke i vraća ga kao niz. Odatle možete prikazati podatke ili ih na drugi način obraditi. Primjer u ispisu 1 ispisuje cijelu datoteku.

Ako odlučite ograničiti veličinu bloka podataka s kojim radite, možete dodati argument fgets da ograničite maksimalnu duljinu niza podataka koji se hvata. Na primjer, upotrijebite sljedeći kôd da ograničite duljinu retka na 80 znakova:

$string = fgets($file_handle, 81);

Zamislite "\0", indikator kraja retka u C-u, i postavite duljinu na jedan znak dulju nego što vam zapravo treba. Kao što vidite, gornji primjer koristi 81, a vama je potrebno 80 znakova. Neka vam postane navika dodavanje dodatnog znaka kad god trebate postaviti ograničenje duljine retka za određenu funkciju.

fread funkcija

Funkcija fgets samo je jedna od mnogih funkcija dostupnih za čitanje datoteke. Ovo je jedna od najčešće korištenih funkcija, jer obrada datoteke red po red u većini slučajeva ima najviše smisla. Zapravo, nekoliko drugih značajki nudi slične mogućnosti. Bilo kako bilo, analiza redak po redak nije uvijek ono što trebate.

I ovdje pristupamo freadu. Funkcija fread ima nešto drugačiju svrhu od funkcije fgets: namijenjena je čitanju iz binarnih datoteka (to jest, datoteka koje se inicijalno ne sastoje od teksta čitljivog za čovjeka). Budući da koncept "linija" nije relevantan za binarne datoteke (logičke strukture podataka obično se ne dijele na retke), morate navesti broj bajtova za čitanje.

$fh = fopen("mojadatoteka", "rb"); $podaci = fread($file_handle, 4096);

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

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

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

Ako je veličina datoteke veća, morat ćete upotrijebiti petlju za čitanje ostatka.

funkcija fscanf

Vraćajući se obradi nizova, fscanf je također nasljednik tradicionalne funkcije knjižnice datoteka C. Ako niste upoznati s njom, fscanf čita podatkovna polja u varijable iz datoteke.

popis ($polje1, $polje2, $polje3) = 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 ove informacije ovdje. Dovoljno je reći da je formatiranje nizova vrlo fleksibilno. Također treba spomenuti da su sva polja smještena u varijablu koju vraća funkcija. (U C-u bi se to prosljeđivalo kao argumenti.)

funkcija fgetss

Funkcija fgetss razlikuje se od tradicionalnih funkcija za rukovanje 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 datoteku u nastavku.

Ispis 2. Primjer HTML datoteke
Moja titula

Ako razumiješ što znači "Jer nema nikoga da te ne boli" onda previše slušaš bend America

Propustimo ga kroz funkciju fgetss.

Ispis 3. Korištenje fgetss
$file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Ovo je ono što ćete dobiti kao izlaz:

Moj naslov Ako razumiješ što znači "Jer nema nikoga da ti ne boli" onda slušaš previše benda America

funkcija fpassthru

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

fpassthru($fh);

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

Nelinearna obrada datoteke: kretanje kroz datoteku

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

fseek($fh, 0);

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

fseek($fh, 1024);

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

fseek($fh, 100, SEEK_CUR);

Isto tako, pomicanje 100 bajtova unatrag vrši se pomoću:

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 dosegne nova pozicija, možete koristiti fgets, fscanf ili drugu funkciju za čitanje podataka.

Bilješka: ne možete koristiti fseek na deskriptorima datoteka koji referenciraju URL.

Snimite cijelu datoteku

Sada ćemo pogledati neke od PHP-ovih jedinstvenih mogućnosti obrade datoteka: obrada velikih blokova podataka u jednom ili dva retka. Na primjer, kako možete dohvatiti datoteku i prikazati njezin cijeli sadržaj na svojoj web stranici? Pa, vidjeli ste primjer korištenja petlje s fgetovima. Ali kako to možete učiniti lakšim? Proces je gotovo smiješno jednostavan korištenjem fgetcontents, koji cijelu datoteku stavlja na red.

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

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

echo file_get_contents("myfilename");

Ovaj se članak primarno usredotočuje na obradu lokalnih datoteka, međutim, vrijedi napomenuti da također možete uhvatiti, prikazati i analizirati druge web stranice pomoću opisanih funkcija.

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

Ova naredba 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 međuspremnik. Prema zadanim postavkama, ova naredba prikazuje poruku o pogrešci kada ne uspije. Da biste izbjegli ovakvo ponašanje (ako to želite), pokušajte s naredbom:

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

Naravno, ako trebate obraditi sadržaj datoteka, tada je jedan redak koji vraća file_get_contents vjerojatno previše. Možda ćete ga prvo htjeti podijeliti na dijelove 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? Funkcija PHP file() izvršava ovaj zadatak u jednom koraku: vraća niz znakova čiji su elementi linije datoteke.

$array = file("myfile");

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

PHP-ove mogućnosti, međutim, daleko nadilaze gore opisane. Možete analizirati cijele .ini datoteke u PHP stilu sa samo jednom naredbom parse_ini_file. Naredba parse_ini_file primjenjuje se na datoteke slične onima prikazanim u ispisu 4.

Ispis 4. Primjer .ini datoteke
; Naziv komentara = Potraga "Kralj Arthur" = Potražiti sveti gral omiljena boja = Plava Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Sljedeće naredbe predstavljaju datoteku kao niz i zatim ispisuju niz:

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

Rezultat će biti sljedeći izlaz:

Ispis 5. Izlaz
Niz ( => Kralj Artur => Tražiti Sveti Gral => Plavo => Mark Twain => Whoopi Goldberg)

Naravno, možete primijetiti da je ova naredba spojila odjeljke. Ovo je zadana radnja, ali je možete jednostavno prilagoditi korištenjem drugog argumenta parse_ini_file: process_sections, koji je Booleova varijabla. Postavite process_sections na True.

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

A vaš će rezultat izgledati ovako:

Ispis 6. Izlaz
Array ( => Array ( => King Arthur => Tražiti sveti gral => Blue) => Array ( => Mark Twain => Whoopi Goldberg))

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

Ali ovo je samo vrh ledenog brijega 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 odnosno XML dokumente. Pogledajte odjeljak za detaljnije informacije o tome kako ove funkcije rade. Oboje je vrijedno razmotriti ako ćete raditi s ovim vrstama datoteka, ali umjesto da prolazite kroz sve moguće vrste datoteka, možda biste trebali bolje pogledati sadržaj ovog članka, koji ima neka dobra opća pravila za radeći s funkcijama koje sam dosad opisao.

Dobar stil programiranja

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

Ispis 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 vjerojatno 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 upadaju svi potencijalni problemi. Alternativno, možete izaći iz programa ili prikazati poruku o pogreš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 pogreške. Naravno, s izuzetkom fclose, vjerojatno ste već obradili rezultate koje oni vraćaju. Što se tiče fclose, nema mnogo toga što se može učiniti ako se rukovatelj datotekom ne zatvori pravilno, tako da je provjera povratne vrijednosti fclose općenito pretjerana.

Tvoj izbor

PHP nema manjka učinkovitih načina za čitanje i raščlanjivanje datoteka. Klasične funkcije kao što je fread mogu vam pouzdano služiti većinu vremena ili vas može više privući jednostavnost readfilea ako je to ono što vam je potrebno za obavljanje posla. Izbor zapravo ovisi o tome što pokušavate postići.

Ako obrađujete velike količine podataka, fscanf će vam se vjerojatno činiti korisnijim i učinkovitijim nego, recimo, korištenje datoteke u kombinaciji sa sljedećim naredbama split i sprintf. Međutim, ako jednostavno prikazujete veliku količinu teksta s manjim promjenama, uporaba funkcija file, file_get_contents ili readfile može imati više smisla. Ovo će rješenje vjerojatno biti ispravno kada koristite PHP za predmemoriju ili čak stvaranje privremenog proxy poslužitelja.

PHP nudi mnoge alate za rad s datotekama. Upoznajte svaki od njih bolje i saznajte koji su alati najbolji za projekt na kojem radite. Nudi vam se širok izbor softverskih alata, koristite ih najučinkovitije i zabavite se obrađujući svoje datoteke koristeći PHP.

Svaki programer bi trebao znati ispravno raditi s datotekama. Ovaj je članak namijenjen PHP programerima početnicima, no “zbirka recepata” bit će korisna i naprednim korisnicima.

Rad s datotekama podijeljen je u 3 faze:

  1. Otvaranje datoteke.
  2. Manipulacija podacima.
  3. Zatvaranje datoteke.

ja. Otvaranje datoteke

Za otvaranje datoteke u PHP okruženju koristite funkciju fopen(). Potrebni parametri za ovu funkciju su naziv datoteke i način datoteke.

$fp = fopen("counter.txt", "r");

Prema PHP dokumentaciji, razlikuju se sljedeći tipovi načina rada datoteka:

  1. r – otvori datoteku samo za čitanje.
  2. r+ - otvara datoteku za čitanje i pisanje u isto vrijeme.
  3. w – stvara novu praznu datoteku. Ako takva datoteka već postoji u trenutku poziva, ona se uništava.
  4. w+ - slično r+, samo ako takva datoteka postoji u trenutku poziva, njen sadržaj se briše.
  5. a – otvara postojeću datoteku u načinu pisanja, s pokazivačem pomaknutim na zadnji bajt datoteke (na kraj datoteke).
  6. a+ - otvara datoteku u načinu čitanja i pisanja, s pokazivačem pomaknutim na zadnji bajt datoteke (na kraj datoteke). Sadržaj datoteke se ne briše.

Napomena: Može postojati još jedan izborni parametar na kraju bilo kojeg od redaka: b ili t. Ako je navedeno b, datoteka se otvara u binarnom načinu čitanja/pisanja. Ako je t, tada je za datoteku postavljen način prevođenja novog retka, tj. doživljava se kao tekstualna.

Za demonstraciju razmotrite sljedeći scenarij:

//Otvara datoteku u različitim načinima
$fp = fopen("counter.txt", "r"); // Binarni način rada
$fp = fopen("counter.txt", "rt"); // Tekstualni način
$fp = fopen("http://www.yandex.ru", "r");// Otvara HTTP vezu za čitanje
$fp = fopen("ftp://korisnik: [e-mail zaštićen]", "w"); //Otvorite FTP vezu navodeći prijavu i lozinku
?>

II. Manipulacija podacima datoteke

Možete pisati podatke u datoteku pomoću PHP-a pomoću funkcije fwrite(). Ova funkcija uzima 2 obavezna parametra i 1 izborni. Potrebni parametri su deskriptor datoteke i način datoteke:

$fp = fopen("counter.txt", "a"); // Otvaranje datoteke u načinu pisanja
$mytext = "Moramo napisati ovaj red\r\n"; // Izvorni niz
$test = fwrite($fp, $mytext); // Zapiši u datoteku
if ($test) echo "Podaci su uspješno uneseni u datoteku.";
else echo "Pogreška pri pisanju u datoteku.";
fclose($fp); //Zatvori datoteku
?>

Za čitanje datoteke redak po redak, upotrijebite funkciju fgets(). Funkcija ima 2 potrebna parametra:


ako ($fp)
{
dok (!feof($fp))
{
$mytext = fgets($fp, 999);
echo $mytext."
";
}
}

fclose($fp);
?>

Napomena: U ovom primjeru vrijednost 999 određuje broj znakova koji će se čitati dok pokazivač ne dođe do kraja datoteke (EOF).

Da biste datoteku pročitali kao jednu cjelinu, morate koristiti funkciju readfile(), koji uzima 1 traženi parametar. Funkcija otvara datoteku, prikazuje njezin sadržaj u prozoru preglednika, a zatim zatvara datoteku:

echoreadfile("counter.txt");
?>

Također možete koristiti funkciju fpassthru() koja uzima 1 potreban parametar. Prije korištenja ove značajke, morate otvoriti datoteku u načinu čitanja. Kada datoteka završi s čitanjem, funkcija automatski zatvara datoteku (i deskriptor datoteke postaje nevažeći).

$fp = fopen("counter.txt", "r"); // Otvorite datoteku u načinu čitanja
if ($fp) echo fpassthru($fp);
elseecho "Greška pri otvaranju datoteke";
?>

Vrlo često postoje situacije kada je potrebno pročitati sadržaj stranice u niz. Ova značajka uključuje korištenje funkcije datoteka(). Kada se ova funkcija pozove, svaki redak datoteke bit će pohranjen u zasebnom elementu navedenog polja.

Napomena: Funkcija se ne smije koristiti datoteka() u binarne datoteke (binary-safe), jer Nije siguran u smislu čitanja binarnih datoteka, a ako negdje naiđe na znak kraja datoteke (EOF), ne jamči da ćete pročitati cijelu binarnu datoteku.

$file_array = file("counter.txt"); // Čitanje datoteke u $file_array
// Rad s podacima niza
?>

Napomena: Rad s nizovima je detaljno opisan, autori: Mukhametshin D.F., Simdyanov I.V.

Na kraju članka pronaći ćete dobru “knjigu recepata” o nizovima koja nudi rješenja za mnoge probleme s kojima se web programer svakodnevno susreće.

Zamislimo situaciju u kojoj datoteku treba čitati znak po znak. Da bismo to učinili, možemo koristiti funkciju fgetc(). Funkcija uzima jedan parametar. Funkcija je korisna ako trebamo pronaći bilo koji znak ili broj identičnih znakova.

$fp = fopen("counter.txt", "r"); // Otvorite datoteku u načinu čitanja
ako ($fp)
{
dok(!feof($fp))
{
$char = fgetc($fp);
if ($char == "c") $i = $i + 1;// Pronađite znak "c"
}
echo "Broj 'c' slova u datoteci: ". $i;
}
else echo "Greška pri otvaranju datoteke";
?>

III. Zatvaranje datoteke

Datoteka se zatvara pomoću funkcije fclose(), koji uzima 1 traženi parametar.

$fp = fopen("counter.txt", "r");
ako ($fp)
{
echo "Datoteka je otvorena";
fclose($fp); // Zatvaranje datoteke
}
?>

Zbirka recepata

1) Moramo provjeriti postoji li ova ili ona datoteka. Da bismo to učinili, koristit ćemo funkciju dokument postoji().

myfile("counter.txt"); // Koristite funkciju myfile, prosljeđujući naziv datoteke kao argument

function myfile($name) //Kreirajte funkciju za provjeru postojanja datoteke
{
if (file_exists($name)) echo "Datoteka postoji";

}
?>

Napomena: Funkcija dokument postoji ne provjerava datoteke na udaljenom web poslužitelju. Da bi funkcija radila ispravno, datoteka sa skriptom mora se nalaziti na istom poslužitelju kao i datoteka koja se provjerava.

2) Odredite veličinu datoteke pomoću funkcije veličina datoteke()

myfile("counter.txt");

function myfile($name) //Kreirajte funkciju za provjeru postojanja datoteke i određivanje veličine datoteke
{
if (file_exists($name)) echo "Veličina datoteke: ".filesize($name)." bajtova";
else echo "Datoteka ne postoji";
}
?>

3) Stvorite privremenu datoteku pomoću funkcije tmp datoteka()

$myfile = tmpfile();
fwrite($myfile, "Ovaj redak je zapisan u privremenu datoteku."); // Pisanje u privremenu datoteku
fseek($myfile, 0); // Postavi pokazivač datoteke
echo fread($myfile, 1024); // izlaz sadržaja datoteke
?>

4) Trebate odrediti broj redaka u datoteci. Da bismo to učinili koristimo funkciju računati()

$fp = datoteka("counter.txt");
echo "Broj redaka u datoteci: ".count($fp);
?>

5) Moramo koristiti mehanizam za zaključavanje datoteke

$fp = fopen("counter.txt", "a");
stado($fp, LOCK_EX); // Zaključaj datoteku za pisanje
fwrite($fp, "Linija za pisanje");
stado($fp, LOCK_UN); // Otključaj
fclose($fp);
?>

6) Moramo ukloniti određeni redak iz datoteke

$num_stroka = 5; //Brisanje reda 5 iz datoteke
$file = file("counter.txt"); // Čitanje cijele datoteke u polje

za ($i = 0; $i< sizeof($file); $i++)
if($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");
fputs($fp, implode("", $file));
fclose($fp);
?>

7) Određivanje vrste datoteke. Korištenje funkcije

A sada će biti prilično velika, ali ne i komplicirana lekcija o radu s datotekama u PHP-u. Prije svega, čemu služe datoteke? Uostalom, sve možete pohraniti u MySQL ili PostgreSQL ili bilo koju drugu bazu podataka. Ali ponekad postoje zadaci kada korištenje baze podataka, uz svu obradu i brigu o sigurnosti veze, nije preporučljivo. Na primjer, moramo napraviti obični brojač, ali prije toga nismo koristili bazu podataka u projektu. Dakle, radi jednog malenog brojača, trebamo li stvoriti bazu podataka i u nju pohraniti samo nekoliko redaka? Ovdje je puno lakše koristiti datoteke. Osim toga, ponekad hosting uopće ne podržava baze podataka, tada su datoteke uglavnom jedina opcija.

Pa, recimo da sam vas uvjerio da su datoteke potrebne :) Sada shvatimo kako raditi s njima. Kako stvoriti, otvoriti, pisati, prebrisati, čitati i tako dalje. Prvo najprije.

Stvorite datoteku

PHP koristi funkciju fopen za otvaranje datoteka. Međutim, također može stvarati datoteke. Ako prođete fopen za naziv datoteke koji ne postoji, on će je stvoriti.

Sama funkcija fopen uzima dva parametra, a oba su potrebna. Prvo moramo odrediti naziv datoteke koju želimo otvoriti. Drugo, proslijedite parametar koji govori funkciji što planiramo učiniti s ovom datotekom (na primjer, čitanje iz datoteke, pisanje itd.).

Ako trebamo kreirati datoteku, tada navedemo njen naziv i proslijedimo parametar da u nju želimo upisati podatke. Napomena: Moramo biti sigurni da kažemo PHP-u što pišemo u datoteku, inače neće stvoriti novu datoteku.

Primjer:

$ourFileName = "testFile.txt";

$ourFileHandle = fopen($ourFileName, "w") or die("ne mogu otvoriti datoteku");

fclose($ourFileHandle);

Prvi redak $ourFileName = testFile.txt stvara string varijablu u koju ćemo pohraniti naziv datoteke.

Drugi redak $ourFileHandle = fopen($ourFileName, 'w') ili die("ne mogu otvoriti datoteku") stvara ili otvara postojeću datoteku za pisanje. Ili vraća poruku da ne može otvoriti datoteku.

Treći red fclose($ourFileHandle) zatvara datoteku. Zapravo je jednostavno.

Opcije otvaranja datoteke u php

Prvi parametar 'r' (čitanje) - otvara datoteku samo za čitanje; ne možete pisati u nju.

Drugi parametar ‘w’ (write) – otvara se za pisanje. U tom slučaju, snimanje će uvijek ići od početka datoteke. Ako tamo već postoje neke informacije, bit će prebrisane.

Treći parametar 'a' (dodaj) - otvara datoteku za pisanje, ali će dodati na kraj datoteke, za razliku od w.

Napredne opcije:

Parametar 'r+' - otvara se i za čitanje i za pisanje. Pokazivač će biti na početku datoteke.

Parametar 'w+' - otvara i za čitanje i za pisanje, ALI briše sve informacije koje su bile u datoteci!!!

parametar 'a+' - otvara se za čitanje i pisanje, ali pokazivač će biti na kraju datoteke.

Naravno, samo jedan od ovih parametara može se proslijediti funkciji, a ne nekoliko. Treba ih zamijeniti za 'X":

fopen($ourFileName, "X")

Zapiši u datoteku

Pa, sada smo otvorili datoteku, odabrali parametar koji nam je potreban, što dalje? Morate nešto napisati u njemu. Kako to učiniti? Korištenje funkcije fwrite koja kao parametre uzima pokazivač na datoteku i redak teksta koji želimo napisati. Primjer:

$myFile = "testFile.txt";

$fh = fopen($myFile, "w") ili die("ne mogu otvoriti datoteku");

$stringData = "Prvi red";

fwrite($fh, $stringData);

$stringData = "Drugi red";

fwrite($fh, $stringData);

Napravili smo datoteku testFile.txt, pokazivač na nju je pohranjen u varijabli $fn. U njega smo upisali redak “Prvi redak” (na kraju smo upotrijebili simbol za kraj retka n), a zatim “Drugi redak”. Zatim su zatvorili spis.

PAŽNJA! Nikad ne zaboravite zatvoriti svoje datoteke! U suprotnom, ako se izvršavanje skripte nenormalno prekine, podaci u datotekama neće biti spremljeni! Uvijek koristite fclose nakon posla!!!

Čitanje iz datoteke

Zapisali smo, sad čitajmo! Nije ni to tako teško. Koristimo funkciju fread. Kao ulaz dajemo mu pokazivač na datoteku i broj bajtova koje želimo pročitati. Na primjer, jedan znak je jednak jednom bajtu (ovisno o kodiranju), želimo pročitati 5 znakova: $theData = fread($fh, 5).

Ali ako trebamo dobiti sve informacije koje se nalaze u datoteci, tada ćemo trebati funkciju filesize, koja vraća broj bajtova u datoteci, dakle, ako se rezultat funkcije filesize proslijedi freadu, tada ćemo dobiti sve informacije iz datoteke:

$myFile = "testFile.txt";

$fh = fopen($myFile, "r");

$theData = fread($fh, veličina datoteke($myFile));

Nadam se da sam jasno objasnio.

$myFile = "testFile.txt";

$fh = fopen($myFile, "r");

$theData = fgets($fh);

Kao rezultat, dobivamo prvi redak iz datoteke testFile.txt. Sukladno tome, za prolazak kroz sve retke trebate koristiti foreach petlju:

$lines = file("testFile.txt");

foreach($lines kao $single_line)

echo $single_line . "
n";

Sada ste naučili kako otvoriti datoteke za čitanje, pisanje ili oboje. Zapišite im podatke ili ih dodajte na vrh koristeći Append, a također pročitajte informacije iz njih.

Pod, ispod rad s datotekama u PHP-u podrazumijeva se čitanje iz datoteke I pisati u datoteku razne informacije. Očito je da morate puno raditi s datotekama, pa bilo koje PHP programer mora moći čitati iz datoteke I pisati u datoteku.

Naknadna slijed rad s datotekama u PHP-u kao ovo:

  1. Otvorena datoteka.
  2. Izvršite potrebne radnje.
  3. Zatvorite datoteku.

Kao što vidite, redoslijed rada s datotekama nalikuje radu s datotekama kroz obični istraživač. Samo ovdje sav posao automatski obavljamo sami PHP skripta.

Počnimo s prvom točkom - otvaranjem datoteke. Datoteka se otvara pomoću funkcije fopen().. Prvi parametar je put datoteke, a drugi parametar je modifikator. Pogledajmo odmah moguće modifikatore:

  1. a- otvara datoteku samo za pisanje, s pokazivačem postavljenim na kraj datoteke.
  2. a+ a, ali se datoteka otvara i za čitanje.
  3. r- otvara datoteku samo za čitanje, a pokazivač se postavlja na početak datoteke.
  4. r+- isto što i modifikator r, ali se datoteka otvara i za pisanje.
  5. w- otvara datoteku samo za pisanje, postavlja pokazivač na početak datoteke i briše cijeli sadržaj datoteke.
  6. w+- isto što i modifikator w, samo je datoteka također otvorena za čitanje.

Također postoje dva načina rada s datotekama: binarni(označeno b) I tekst(označeno t). Ako radite s običnom tekstualnom datotekom, odaberite tekstualni način, a ako, na primjer, sa slikom, odaberite binarni način.

Ovo su sve osnovni modifikatori, koji će vam biti dovoljni. Naučimo sada kako zatvoriti datoteku. Zatvara datoteku s funkcije fclose()..

Sada prijeđimo na čitanje datoteke pomoću fread() funkcije. I na kraju ću vam dati primjer:

$sadržaj = "";
dok (!feof($handle))
$sadržaj .= fread($handle, 4096);
fclose($ručka);
?>

U ovom primjeru prvo otvaramo datoteku za čitanje u tekstualnom načinu (modifikator rt). funkcija fopen(). vraća tzv deskriptor, s kojim možete komunicirati s datotekom i pisati je u varijablu drška. Onda smo u petlji dok() dok se ne dođe do kraja datoteke, svaki put čitamo sadržaj 4096 znakova koje upisujemo u varijablu sadržaj. Nakon što je proces čitanja završen, zatvorite datoteku, opet koristeći deskriptor datoteke.

Sada prijeđimo na snimanje pomoću funkcije fwrite().:

$handle = fopen("datoteke/a.txt", "at");
$string = "Ovo je tekst";
fwrite($handle, $string);
fclose($ručka);
?>

Nakon pokretanja ove skripte, u datoteci a.txt bit će dodan redak " Ovo je tekst".

Posebno pažljivi čitatelji obratili su pažnju na pokazivače o kojima sam pisao gore. Pokazivač- ovo je trenutni položaj imaginarnog "kursora" u datoteci. Ovdje počinje rad s datotekom. Možete promijeniti položaj pokazivača koristeći funkcije fseek().:

$handle = fopen("datoteke/a.txt", "rt");
echo $contents."
";
fseek($handle, 0, SEEK_SET);
$sadržaj = fread($handle, 3);
echo $contents."
";
?>

Dakle, prvo čitamo 3 znak (kao rezultat, trenutni položaj pokazivača je pomaknut za 3 pozicije). Zatim postavljamo pokazivač na početak datoteke. I opet čitamo 3 simbol. Kao što ste mogli pretpostaviti, dvaput smo brojali istu stvar. To je prvi put 3 simbol, zatim se vratio i ponovno brojao 3 simbol. Također ako ti funkcije fseek(). zamijeniti SEEK_SET na SEEK_CUR, tada drugi parametar neće postaviti položaj pokazivača, već će ga pomaknuti u odnosu na trenutnu lokaciju. Čak vam savjetujem da vježbate s pokazivačima, jer to nije tako lako razumjeti. Također preporučujem da pokušate napisati nešto u datoteku na mjestu pokazivača, na primjer, na samom početku datoteke. I svakako objasnite svoje rezultate.

I na kraju, želio bih dati još nekoliko funkcija koje vam omogućuju rad s datotekama na najjednostavnijoj razini: file_put_contens() I file_get_contents(). Funkcija file_put_contents() piše u datoteku, a funkcija file_get_contents()čita sadržaj iz datoteke. Ove su funkcije vrlo jednostavne za korištenje, ali ima manje opcija (iako u pravilu nisu potrebne):

file_put_contents("datoteke/a.txt", "Ovo je tekst 2");
echo file_get_contents("datoteke/a.txt");
?>

U ovoj skripti prvo smo napisali redak " Ovo je tekst 2" u datoteku, a zatim čitamo rezultirajući sadržaj i ispisujemo ga. Kao što vidite, teško je smisliti jednostavniji način čitanje iz datoteke I pisati u datoteku.

To su sve glavne točke rad s datotekama u PHP-u.