Računalniki Windows internet

PHP prebere vrstico iz datoteke. Delo z datotekami v php: odpiranje, pisanje, branje. Datoteke: načini delovanja

PHP

file_exists ("test.txt") // Ali datoteka obstaja? filesize ("test.txt"); // Ugotovite velikost datoteke // Vrne časovni žig: fileatime ("test.txt"); // Datum zadnjega dostopa do datoteke // datum ("d MY", $ atime); filemtime ("test.txt"); // Datum spremembe datoteke // datum ("d M Y", $ mtime); filectime ("test.txt"); // Datum, ko je bila datoteka ustvarjena (Windows) // datum ("d M Y", $ ctime);

Datoteke: načini delovanja

PHP

vir fopen (niz ime datoteke, način niza) // vir - vrne kazalec datoteke ob uspehu ali FALSE ob napaki
Delovni čas Opis
r odprta datoteka samo za branje;
r + odprite datoteko za branje in pisanje;
w odprite datoteko samo za pisanje. Če obstaja, se trenutna vsebina datoteke uniči. Trenutni položaj je nastavljen na začetek;
w + odprite datoteko za branje in pisanje. Če obstaja, se trenutna vsebina datoteke uniči. Trenutni položaj je nastavljen na začetek;
a odprite datoteko za pisanje. Trenutni položaj je nastavljen na konec datoteke;
a + odprite datoteko za branje in pisanje. Trenutni položaj je nastavljen na konec datoteke;
b obdelati binarno datoteko. Ta zastavica je potrebna pri delu z binarnimi datotekami v sistemu Windows.

Odpiranje in zapiranje datotek v PHP

PHP

$ fi = fopen ("test.html", "w +") ali die ("Napaka"); // Primeri $ fi = fopen ("http://www.you/test.html", "r"); $ fi = fopen ("http://ftp.you/test.html", "r"); // Zapri fclose ($ fi)

Branje datotek v PHP

PHP

// Preberi datoteko fread (int fi, int dolžina) $ str = fread ($ fi, 5); // Preberi prvih 5 znakov echo $ str; // ker se je kazalec premaknil $ str = fread ($ fi, 12); // Preberi naslednjih 12 znakov echo $ str; fgets (int fi [, int dolžina]) // Preberi vrstico iz datoteke fgetss (int fi, int dolžina [, niz dovoljeno]) // Preberi vrstico iz datoteke in zavrzi oznake HTML // niz dovoljen - oznake, ki je treba pustiti fgetc (int fi) // Prebere znak iz datoteke

Na začetku se bo Pisanje pojavilo na začetku datoteke s prepisovanjem obstoječih podatkov, če obstajajo. Zato, če morate nekaj napisati na konec datoteke, morate nastaviti ustrezno način branja na primer +.

Manipulacija s kazalcem v datotekah PHP

PHP

int fseek (int fi, int offset [, int wherece]) // Nastavitev kazalca // int fi - kazalec na datoteko // offset - število znakov za premikanje. // od koder: // SEEK_SET - premikanje se začne od začetka datoteke; // SEEK_CUR - gibanje se začne s trenutnega položaja; // SEEK_END - premikanje se začne s konca datoteke. fseek ($ fi, -10, SEEK_END); // Preberi zadnjih 10 znakov $ s = fread ($ fi, 10); $ pos = ftell ($ fi); // Ugotovite trenutni položaj previjanja nazaj ($ f) // ponastavite kazalec bool feof ($ f) // konec datoteke

Delo z datotekami (podatki) neposredno v PHP

PHP

array file (string filename) // Pridobite vsebino datoteke kot matriko // Druga možnost za neposredno delo s podatki file_get_contents (niz ime datoteke) // Branje (dobimo celotno datoteko v eni vrstici) // Pisanje v datoteko (sprva prepisan) file_put_contents (niz ime datoteke, mešani podatki [, int zastava]); // FILE_APPEND // Pisanje na konec datoteke: file_put_contents ("test.txt", "data", FILE_APPEND); // Če zapišemo matriko, $ array = array ("I", "live"); file_put_contents ("test.txt", matrika $); // potem dobimo "Ilive"

Upravljanje datotek PHP

PHP

kopija (vir niza, cilj niza); // Kopiraj preimenovanje datoteke (str staro ime, str novo ime); // Preimenuj datoteko prekini povezavo (niz ime datoteke); // Izbriši datoteko

Nalaganje datotek na strežnik PHP

// nastavitve PHP.ini file_uploads (vklop | izklopljen) // omogoči Onemogoči nalaganje datotek upload_tmp_dir // začasna mapa za naložene datoteke. privzeta začasna mapa upload_max_filesize (privzeto = 2 Mb) // max. velikost naložene datoteke post_max_size // skupna velikost poslanega obrazca (mora biti večja od upload_max_filesize) // Enostavno nalaganje

Html

Delamo z datotekami na strežniku

PHP

// Prejemanje podatkov $ tmp = $ _FILES ["userfile"] ["tmp_name"]; $ name = $ _FILES ["userfile"] ["name"]; // Premakni datoteko move_uploaded_file ($ tmp, ime); move_uploaded_file ($ tmp, "upload /". ime); // preusmeri datoteko v mapo za nalaganje // glede na trenutno datoteko // Kaj je v nizu $ _FILES $ _FILES ["userfile"] ["name"] // ime datoteke, na primer test.html $ _FILES [ "userfile"] [" tmp_name "] // ime začasne datoteke (pot) $ _FILES [" userfile "] [" velikost "] // velikost datoteke $ _FILES [" userfile "] [" vrsta "] // vrsta datoteke $ _FILES [" uporabniška datoteka "] ["napaka"] // 0 - ni napak, število - da

Ko preučujete to temo, ne pozabite, da nekatere funkcije PHP za dostop do datoteke uporabljajo deskriptor datoteke, druge pa pot datoteke.

Branje iz datoteke

Funkcijo fread () lahko uporabite za pridobivanje določene količine podatkov iz datoteke.

fread (datoteka, dolžina)

Parametri:

datoteka - deskriptor datoteke

dolžina - velikost podatkov v bajtih

Če je konec datoteke dosežen, preden funkcija prebere določeno velikost podatkov, bo vrnila manjši niz. Ta funkcija uporabno za branje binarnih datotek.

Pri določanju dolžine niza in pri premikanju kazalca morate upoštevati, da ruske črke niso velike en bajt, ampak več. Za več informacij glejte Delo z nizi. Prav tako ne pozabite, da je na začetku kodirane datoteke UTF-8 več bajtov. V kodiranju UTF-8 brez BOM ti bajti manjkajo.

Preberimo prvih 10 bajtov iz datoteke myfile.txt. Odprimo ga v načinu "r +". Kazalec bo na začetku.

$ datoteka = fopen ("myfile.txt", "r +"); $ take = fread ($ datoteka, 10); odmev $ take;

Če datoteka vsebuje ruske črke, je lahko zadnja črka prikazana napačno. To je zato, ker je znak več kot en bajt in je en del prebran, drugi pa ne.

Funkcija fgets () vrne en niz, začenši od kazalca do konca niza.

fgets (datoteka, dolžina)

Parametri:

datoteka - deskriptor datoteke

dolžina - omogoča določitev velikosti niza v bajtih. Poleg tega, če je dosežen konec vrstice, naslednja vrstica ni vključena v rezultat funkcije, tudi če je vrstica manjša od določene dolžine. Izbirni parameter.

Če dolžina ni podana, je bila v starejših različicah PHP največja dolžina vrnjenega niza omejena. Novejše različice nimajo te omejitve.

Zagon funkcije v zanki vam omogoča branje datoteke po vrstici.

Preberimo eno vrstico iz datoteke myfile.txt. Ker je kazalec že premaknjen, ne bo prebrana celotna vrstica, ampak iz kazalca.

$ take = fgets ($ datoteka); odmev "
". $ vzemi;

Funkcija fgetss () prav tako vrne en niz, vendar iz njega odstrani oznake HTML. Če je v kodi prisoten skript PHP, bo tudi ta odstranjen.

fgetss (datoteka, dolžina, želene oznake)

Parametri:

datoteka - deskriptor datoteke

dolžina - velikost niza v bajtih. Izbirni parameter.

zahtevane oznake - omogoča vam, da določite oznake, ki ne bodo izbrisane.

Obstaja funkcija fgetc (), ki vrne en znak iz datoteke.

Funkcija file () prebere celotno datoteko in shrani podatke v matriko. Vsaka vrstica je postavljena v element matrike. Za delovanje te funkcije vam ni treba odpreti datoteke. Lokacija kazalca je prezrta.

datoteka (pot datoteke, zastavice, kontekst)

Parametri:

pot datoteke - absolutna ali relativna pot datoteke

zastavice - zastavice, ki določajo, kako funkcija deluje. Izbirni parameter.

kontekst - omogoča določitev kontekstnega vira

Določite lahko naslednje zastave:

FILE_USE_INCLUDE_PATH - omogoča iskanje datoteke v mapah s potmi.

FILE_IGNORE_NEW_LINES - odstrani znak na koncu vrstice. Če ta zastavica ni nastavljena, bo v vsaki vrstici znak na koncu vrstice.

FILE_SKIP_EMPTY_LINES - ne doda praznih vrstic v matriko.

Če je podanih več zastav, so ločene z operatorjem "|".

Na strani prikažimo datoteko myfile.txt.

$ ar = datoteka ("myfile.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); odmev "
"; print_r ($ ar);

Pišite v datoteko

Funkcija fwrite () zapiše podatke v datoteko.

fwrite (datoteka, podatki, dolžina)

Parametri:

datoteka - deskriptor datoteke

podatki - podatki, ki se pišejo

dolžina - največja velikost podatkov, ki jih je treba zapisati v bajtih. Ni mogoče zapisati celotne vrstice, temveč le določeno število bajtov. Izbirni parameter.

Če je kazalec na začetku ali na sredini datoteke, funkcija zamenja znake v datoteki z novimi. To pomeni, da če je napisanih 5 znakov, se 5 znakov odstrani iz datoteke in na njihovo mesto se dodajo novi.

Ko pišete ruske črke, se mora kodiranje skripte ujemati s kodiranjem datoteke.

V datoteko zapišemo vrstico "besedilo iz skripta". V našem primeru je deskriptor na sredini datoteke in vrstica bo tam zapisana. Ko morate na konec datoteke dodati podatke, jo lahko odprete v načinu "a". In ko je treba datoteko prepisati, se odpre v načinu "w". Kazalca ne bomo premikali, podatke bomo zapisali tja, kjer so.

$ text = "besedilo iz skripta"; fwrite ($ datoteka, $ besedilo);

Uporaba funkcij fopen, fclose, feof, fgets, fgetss in fscanf

Naštejmo vse možnosti

Ena od prednosti dela s sodobnimi programskimi jeziki, kot je PHP, je velika količina razpoložljivih zmogljivosti. PHP bi zlahka sprejel moto Perla: "Nekaj ​​lahko naredimo na več načinov", zlasti ko gre za ravnanje z datotekami. Toda ob množici razpoložljivih sredstev se postavlja vprašanje, kateri je najboljši za opravljanje dela. Seveda je v resnici odgovor na to vprašanje odvisen od tega, kakšne cilje si zastavite pri obdelavi datoteke, zato je učenje vseh funkcij jezika vredno časa.

Tradicionalne fopen metode

Metode fopen so morda bolj znane programerjem C in C ++ iz starih časov, saj so v večji ali manjši meri ravno tista orodja, ki so vam že vrsto let na dosegu roke, če ste delali s tem programiranjem. jezikov. Za katero koli od teh metod sledite standardnemu postopku, pri čemer uporabite fopen za odpiranje datoteke, funkcijo za branje podatkov in nato fclose, da zaprete datoteko, kot je prikazano na seznamu 1.

Seznam 1. Odpiranje in branje datoteke s fgets
$ file_handle = fopen ("myfile", "r"); while (! feof ($ file_handle)) ($ line = fgets ($ file_handle); echo $ line;) fclose ($ file_handle);

Čeprav so te funkcije poznane večini izkušenih programerjev, naj analiziram, kako delujejo. V resnici sledite tem korakom:

  1. Odprite datoteko. $ file_handle shrani povezavo do same datoteke.
  2. Preverite, ali ste dosegli konec datoteke.
  3. Nadaljujte z branjem datoteke, dokler ne pridete do konca in natisnite vsako prebrano vrstico.
  4. Zaprite datoteko.

S tem v mislih bom pregledal vsako tu uporabljeno datotečno funkcijo.

Funkcija Fopen

Funkcija fopen vzpostavi povezavo do datoteke. Pravim "povezuje", ker lahko fopen poleg odpiranja datoteke odpre tudi URL:

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

Ta vrstica kode ustvari povezavo do zgornje strani in vam omogoča, da jo začnete brati kot lokalno datoteko.

Opomba: Parameter "r", uporabljen v fopen, označuje, da je datoteka odprta samo za branje. Ker pisanje v datoteko presega obseg tega članka, ne bom našteval vseh možnih vrednosti parametra. Vendar pa morate spremeniti "r" v "rb", če berete iz binarnih datotek zaradi združljivosti med platformami. Primer te vrste bo podan spodaj.

Feof funkcija

Ukaz feof določi, ali je bilo branje opravljeno do konca datoteke, in vrne True ali False. Podana zanka se nadaljuje do konca datoteke "myfile". Upoštevajte, da feof vrne tudi False, če berete URL in je povezava potekla, ker ni več podatkov za branje.

Funkcija Fclose

Preskočite sredino seznama 1 in pojdite do konca; fclose naredi nasprotno od fopen: zapre povezavo z datoteko ali URL-jem. Po izvedbi te funkcije ne boste mogli več brati iz datoteke ali vtičnice.

Funkcija Fgets

Če se vrnemo nekaj vrstic nazaj v seznamu 1, ste v središču procesa obdelave datotek: neposredno branje datoteke. Funkcija fgets je vaše "orožje" za prvi primer. Zgrabi vrstico podatkov iz datoteke in jo vrne kot niz. Od tam lahko pošiljate podatke ali jih kako drugače obdelate. Primer v seznamu 1 natisne celotno datoteko.

Če se odločite omejiti velikost kosa podatkov, na katerem delate, lahko dodate argument fgets, da omejite največjo dolžino zajete podatkovne vrstice. Na primer, uporabite naslednjo kodo, da omejite dolžino niza na 80 znakov:

$ niz = fgets ($ file_handle, 81);

Pomislite na "\ 0", konec vrstice v C, in nastavite dolžino na en znak več, kot ga dejansko potrebujete. Kot lahko vidite, zgornji primer uporablja 81, medtem ko potrebujete 80 znakov. Naj se navadite, da dodate dodaten znak vsakič, ko morate nastaviti omejitev dolžine niza za dano funkcijo.

Fread funkcija

Funkcija fgets je le ena od mnogih funkcij, ki so na voljo za branje datoteke. To je ena najpogosteje uporabljenih funkcij, saj je obdelava datoteke po vrsticah v večini primerov najbolj smiselna. Pravzaprav številne druge funkcije ponujajo podobne zmogljivosti. Vendar analiza po vrsticah ni vedno tisto, kar želite.

In tu se obrnemo na hrepenenje. Funkcija fread se uporablja za nekoliko drugačen namen kot fgets: namenjena je branju iz binarnih datotek (to je datotek, ki prvotno niso človeku berljivo besedilo). Ker koncept "nizov" ni pomemben za binarne datoteke (logične podatkovne strukture običajno niso razčlenjene v vrstice), morate določiti število bajtov za branje.

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

Zgornji primer prebere 4096 bajtov (4 KB) podatkov. Upoštevajte, da ne glede na vrednost, ki jo podate, bo fread prebral največ 8192 bajtov (8 KB).

Ob predpostavki, da datoteka ni večja od 8 KB, bi moral spodnji delček kode prebrati celotno datoteko v eni vrstici.

$ fh = fopen ("myfile", "rb"); $ data = fread ($ fh, velikost datoteke ("myfile")); fclose ($ fh);

Če je datoteka večja, boste morali uporabiti zanko za branje preostalega dela datoteke.

Funkcija Fscanf

Če se vrnemo k obdelavi vrstic, upoštevajte, da je fscanf tudi naslednik tradicionalne funkcije knjižnice C, ki temelji na datotekah. Če je niste seznanjeni, fscanf bere podatkovna polja v spremenljivke iz datoteke.

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

Nizi za oblikovanje, uporabljeni v tej funkciji, so dokumentirani v številnih virih, kot je PHP.net, zato teh informacij tukaj ne bom ponavljal. Dovolj je reči, da je oblikovanje nizov zelo prilagodljivo. Omeniti je treba tudi, da so vsa polja postavljena v spremenljivko, ki jo vrne funkcija. (V C bi bili posredovani kot argumenti.)

Funkcija Fgetss

Funkcija fgetss se razlikuje od tradicionalnih datotečnih funkcij in vam daje boljšo predstavo o tem, kaj lahko naredi PHP. Deluje kot fgets, vendar odstrani vse oznake HTML ali PHP, na katere naleti, in pusti samo "golo" besedilo. Vzemimo spodnjo datoteko HTML.

Seznam 2. Vzorčna datoteka HTML
Moj naslov

Če razumete, kaj pomeni "Cause there ain" t nobody for to da you no pain ", potem preveč poslušate skupino America

Zaženimo ga skozi funkcijo fgets.

Seznam 3. Uporaba fgetss
$ file_handle = fopen ("myfile", "r"); while (! feof ($ file_handle)) (echo = fgetss ($ file_handle);) fclose ($ file_handle);

Tukaj je tisto, kar dobite kot izhod:

Moj naslov Če razumeš, kaj pomeni "Cause there ain" t nobody for to da you no pain ", potem preveč poslušaš skupino America

Funkcija Fpassthru

Ne glede na to, kako berete podatke iz datoteke, lahko preostale podatke natisnete s standardno izhodno cevjo s funkcijo fpassthru.

fpassthru ($ fh);

Ta funkcija natisne podatke, zato vam jih ni treba vnesti v spremenljivko.

Nelinearna obdelava datoteke: premikanje po datoteki

Seveda vam zgornje funkcije omogočajo samo zaporedno branje iz datoteke. Za bolj zapletene datoteke se boste morda morali premakniti na različne dele datoteke na začetku ali koncu. Če želite to narediti, potrebujete funkcijo fseek.

fseek ($ fh, 0);

Zgornji primer skoči nazaj na začetek datoteke. Če se ne želite premakniti na sam začetek datoteke - recimo, en kilobajt zadostuje - preprosto napišete:

fseek ($ fh, 1024);

Od PHP V4.0 je na voljo tudi več drugih možnosti. Na primer, če morate preskočiti 100 bajtov naprej s svojega trenutnega položaja, lahko uporabite naslednjo kodo:

fseek ($ fh, 100, SEEK_CUR);

Podobno se skakanje za 100 bajtov nazaj izvede z:

fseek ($ fh, -100, SEEK_CUR);

Če želite skočiti nazaj na 100 bajtov pred koncem datoteke, namesto tega uporabite SEEK_END.

fseek ($ fh, -100, SEEK_END);

Ko dosežete svoj novi položaj, lahko za branje podatkov uporabite fgets, fscanf ali drugo funkcijo.

Opomba: fseek ne morete uporabiti za deskriptorje datotek, ki se sklicujejo na URL-je.

Zajem celotne datoteke

Zdaj si oglejmo nekaj edinstvenih PHP-jevih zmožnosti ravnanja z datotekami: obdelava velikih blokov podatkov v eni ali dveh vrsticah. Na primer, kako lahko zgrabite datoteko in prikažete vso njeno vsebino na svoji spletni strani? No, videli ste primer uporabe zanke s fgets. Toda kako lahko olajšate? Postopek je skoraj smešno preprost s fgetcontents, ki postavi celotno datoteko na niz.

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

Čeprav ni najboljša možnost, lahko ta ukaz napišete še krajše:

echo file_get_contents ("myfilename");

Ta članek govori predvsem o ravnanju z lokalnimi datotekami, vendar velja omeniti, da lahko z opisanimi funkcijami zajamete, prikažete in razčlenite tudi druge spletne strani.

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

Ta ukaz je pravzaprav enak:

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

Verjetno gledate te primere in mislite: "To je še vedno preveč zamudno." Razvijalci PHP se strinjajo z vami. Zato lahko zgornji ukaz skrajšate na:

brana datoteka ("http://127.0.0.1/");

Funkcija readfile privzeto zapiše celotno vsebino datoteke ali spletne strani v izhodni medpomnilnik. Ta ukaz privzeto prikaže sporočilo o napaki ob napaki. Če se želite izogniti temu vedenju (če ga želite), poskusite z ukazom:

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

Seveda, če morate obdelati vsebino datotek, je ena vrstica, ki jo vrne file_get_contents, verjetno preveč. Morda ga boste želeli najprej razdeliti na dele s funkcijo split ().

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

Toda zakaj potrebujete vse te zaplete, če obstaja popolnoma primerna funkcija, ki bo opravila delo namesto vas? Funkcija datoteke PHP () to naredi v enem koraku: vrne niz nizov, katerih elementi so nizi datoteke.

$ array = datoteka ("myfile");

Treba je opozoriti, da obstaja majhna razlika med zgornjima primeroma. Ukaz split odstrani nove vrstice, medtem ko se ukaz datoteke konča z novimi vrsticami (tako kot pri fgets).

Vendar pa zmožnosti PHP-ja daleč presegajo zgoraj opisane. Celotne datoteke .ini v slogu PHP lahko razčlenite s samo enim ukazom parse_ini_file. Ukaz parse_ini_file velja za datoteke, podobne tistim na seznamu 4.

Seznam 4. Primer datoteke .ini
; Ime komentarja = naloga "Kralj Arthur" = Iskati najljubšo barvo svetega grala = Modra Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Naslednji ukazi predstavljajo datoteko kot matriko in nato natisnejo to matriko:

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

To bo ustvarilo naslednji izhod:

Listing 5. Izhod
Array (=> Kralj Arthur => Iskati sveti gral => Modra => Mark Twain => Whoopi Goldberg)

Seveda lahko vidite, da ima ta ukaz združene razdelke. To je privzeto, vendar lahko preprosto naredite potrebne prilagoditve z uporabo drugega argumenta za parse_ini_file: process_sections, ki je logična spremenljivka. Nastavite process_sections na True.

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

In vaš izhod bo videti tako:

Listing 6. Izhod
Array (=> Array (=> Kralj Arthur => Iskati Sveti gral => Modra) => Array (=> Mark Twain => Whoopi Goldberg))

PHP postavi podatke v večdimenzionalno matriko, ki jo je mogoče enostavno razčleniti za analizo.

Toda to je le vrh ledene gore, ko gre za ravnanje z datotekami v PHP. Bolj zapletene funkcije, kot sta tidy_parse_file in xml_parse, vam lahko pomagajo pri razčlenjevanju dokumentov HTML oziroma XML. Za več informacij o delovanju teh funkcij glejte razdelek. Oboje je vredno razmisliti, če delate s temi vrstami datotek, a namesto da bi si ogledali vse možne vrste datotek, lahko natančno preberete vsebino tega članka, kjer je nekaj dobrih splošnih pravil za delo s funkcijami, ki sem jih opisal. do sedaj.

Dober stil programiranja

Nikoli ne domnevajte, da bo vse v vašem programu delovalo, kot je bilo predvideno. Na primer: kaj, če je bila datoteka, ki jo iščete, premaknjena? Kaj pa, če zaradi spremembe dovoljenj ne morete prebrati vsebine datoteke? Vnaprej lahko preverite obstoj datoteke in dovoljenja za branje z uporabo metod file_exists in is_readable.

Seznam 7. Uporaba file_exists in is_readable
$ ime datoteke = "moja datoteka"; if (file_exists ($ filename) && is_readable ($ filename)) ($ fh = fopen ($ filename, "r"); # Processing fclose ($ fh);)

Vendar pa bo v praksi ta kos kode morda pretiran za vašo nalogo. Obravnavanje vrednosti, ki jih vrne fopen, je enostavnejše in natančnejše.

if ($ fh = fopen ($ ime datoteke, "r")) (# Obdelava fclose ($ fh);)

Ker fopen ob napaki vrne False, to zagotavlja, da se datoteka obdela le, če jo je mogoče odpreti. Seveda, če datoteka ne obstaja ali je neberljiva, bi pričakovali, da bo vrnjena vrednost negativna. Zato je takšno preverjanje past, v katero padejo vse morebitne težave. Lahko pa uporabite zaključek programa ali prikažete sporočilo o napaki, če datoteke ni mogoče odpreti.

Tako kot fopen tudi funkcije file_get_contents, file in readfile vrnejo False, če datoteke ni mogoče odpreti ali obdelati. Funkcije fgets, fgetss, fread, fscanf in fclose ob napaki vrnejo tudi False. Seveda ste z izjemo fclose verjetno že obdelali rezultate, ki jih vrnejo. Kar zadeva fclose, je le malo mogoče narediti, če se deskriptor datoteke ne zapre pravilno, zato je preverjanje vrnjene vrednosti fclose običajno preveč.

Izbira je vaša

PHP ne manjka učinkovitih načinov za branje in razčlenitev datotek. Klasične funkcije, kot je fread, vam lahko večino časa zanesljivo služijo ali pa vas bo morda bolj pritegnila preprostost readfile, če je to potrebno za dokončanje naloge. Izbira je res odvisna od tega, kaj poskušate doseči.

Če obdelujete velike količine podatkov, bo fscanf verjetno bolj uporaben in učinkovit kot recimo uporaba datoteke v povezavi z naslednjimi ukazi split in sprintf. Če pa preprosto prikazujete veliko besedilo z manjšimi spremembami, so morda ustreznejše funkcije datoteke, file_get_contents ali readfile. Ta rešitev bo verjetno pravilna, če uporabljate PHP za predpomnjenje ali celo ustvarjanje začasnega strežnika proxy.

PHP ponuja številna orodja za delo z datotekami. Spoznajte vsakega od njih bolje in ugotovite, katera orodja so najboljša za projekt, na katerem delate. Na voljo vam je široka paleta programskih orodij, najučinkoviteje jih uporabite in se zabavajte pri obdelavi datotek s PHP.

V PHP se morate pogosto ukvarjati z ustvarjanjem datoteke ... vse je zelo preprosto, na disku ni datoteke, koda se je zagnala in datoteka se je pojavila, potem lahko to datoteko preberete v drugo spremenljivko ali celo na katero koli stran na internetu in nato tam nekaj napišite ... toda za to morate poznati posebne funkcije ... več o tem v tem članku ...

Če želite ustvariti datoteko php v izvedljivem skriptu, morate samo določiti nekaj funkcij:

Poglejmo si primer takoj:

$ text = "Tukaj nekaj besedila za zapisovanje v datoteko";
$ fp = fopen ("datoteka.txt", "w");
fwrite ($ fp, $ text);
fclose ($ fp);
?>

Tukaj bi morali vedeti:

fopen ()- funkcija odpre datoteko za branje ali za pisanje in izboljšave;

Te izboljšave (parameter načina funkcije fopen) so zelo pomembne:

  • "r"- odprite datoteko v php Samo za branje... Kazalec je postavljen na začetek.
  • "r +"- odprite datoteko v php za branje in za pisanje... Kazalec je postavljen na začetek. !!! - s tema dvema načinoma r in r + morajo biti datoteke že ustvarjene (v nasprotnem primeru bo prišlo do napake Opozorilo: fopen (file.txt): ni uspelo odpreti toka: ni takšne datoteke ali imenika v ...), mi pa samo beremo ali pa imamo možnost dodati.
  • "w"- datoteka se odpre SAMO za pisanje. Datoteka je skrajšana na ničelno dolžino - se pravi prepisana. Zapiše se, kar je potrebno, in kazalec se postavi na začetek.
  • "w +"- datoteka je odprta za pisanje IN BRANJE! Ostalo je enako kot v "w" načinu. !!! - s tema dvema načinoma - če datoteka ni bila ustvarjena - POSKUSI JO USTVARJITE!
  • "a"- odpri datoteko SAMO za pisanje. Za razliko od" w ", ta parameter ne prepiše vsebine datoteke, ampak postavi kazalko na konec vrstice in doda vsebino, ki smo jo želeli dodati na konec.
  • "a +"- odprite datoteko za pisanje in branje.

fwrite($ fp, $ text) - funkcija zapisovanja v datoteko v php - to pomeni, da je tisto, kar je v spremenljivki $ text, zapisano v datoteko, ki je v spremenljivki $ fp;

fclose($ fp) - funkcija zapiranja datoteke, ki smo jo zapisali v spremenljivko $ fp;

Zdaj lahko varno ustvarite pravilno datoteke v php, jih odprete za branje in urejanje.

Uporabni dodatki in funkcije PHP za delo z odprto datoteko:

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

tukaj je pogoj izpolnjen - "dokler ni dosežen konec datoteke, potem to storite" medtem ko (! feof ($ fp))

1. Funkcija fgets($ fp, 99) - omogoča, da vso vsebino razdelite na odseke po 99 bajtov in naprej, da bi to bolj jasno videli, smo postavili oznako

Ta funkcija niza fgets(ročica vira [, int dolžina]) privzeto sprejme dolžino 1024 bajtov (1 kilobajt), če ni določeno, bo. Ta parameter ni obvezen od PHP 4.2.0 (ob napaki vrne FALSE)

Dodatne funkcije za odpiranje, pisanje in ustvarjanje datoteke

Funkcija - med preberi datoteko(niz ime datoteke [, bool use_include_path [, kontekst vira]]) - preberite datoteko kot celoto.

Prebere datoteko in zapiše vsebino v izhodni medpomnilnik. In vrne število natisnjenih bajtov. V primeru napake se vrne, če pes ni uporabljen - @readfile.

Izkazalo se bo nekaj takega:

Na koncu besede je oznaka
.

b. Funkcija - niz mapa(niz ime datoteke [, int use_include_path [, kontekst vira]]) deluje enako kot funkcija readfile, z eno izjemo, doda vsebino datoteke v matriko:

Tako lahko berete katere koli strani na internetu: $ lines = datoteka ("http: // stran /"); in ponovite matriko s funkcijo foreach;

3a. Funkcija niza file_get_contents(niz ime datoteke [, bool use_include_path [, kontekst vira [, int odmik [, int maxlen]]]]) - omogoča pridobivanje vsebine v eni vrstici.

Je bolj vsestranski PHP funkcijače želite prebrati datoteko, podobno kot funkcija datoteke, se samo vsebina vrne v niz, ne pa v matriko, in lahko določite pogoje - s katerim bajtom začeti - pomik in s katerim zaključiti - maxlen... Ob napaki vrne FALSE.

Pomembno!!!- v tem primeru funkcija zamenja 3 naenkrat: fopen (), fread () in fclose () in se tako znebi žigov.

3b. Funkcija Int file_put_contents(niz ime datoteke, mešani podatki [, zastave int [, kontekst vira]]) - je identičen zaporednemu klicu funkcij fopen (), fwrite () in fclose () - vrne število zapisanih bajtov.

Vsak programer bi moral biti sposoben pravilno delati z datotekami. Ta članek je namenjen začetnikom PHP programerjem, vendar bo "zbirka receptov" uporabna za napredne uporabnike.

Delo z datotekami je razdeljeno na 3 stopnje:

  1. Odpiranje datoteke.
  2. Manipulacija s podatki.
  3. Zapiranje datoteke.

jaz. Odpiranje datoteke

Če želite odpreti datoteko v okolju PHP, uporabite funkcijo fopen ()... Zahtevana parametra za to funkcijo sta ime datoteke in način datoteke.

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

V skladu z dokumentacijo PHP se razlikujejo naslednje vrste datotečnih načinov:

  1. r - odprta datoteka samo za branje.
  2. r + - odprite datoteko hkrati za branje in pisanje.
  3. w - ustvarite novo prazno datoteko. Če v času klica taka datoteka že obstaja, se uniči.
  4. w + - je podoben r +, le če taka datoteka obstaja v času klica, se njena vsebina izbriše.
  5. a - odpre obstoječo datoteko v načinu pisanja, medtem ko se kazalec premakne na zadnji bajt datoteke (na konec datoteke).
  6. a + - odpre datoteko v načinu branja in pisanja, medtem ko se kazalec premakne na zadnji bajt datoteke (na konec datoteke). Vsebina datoteke se ne izbriše.

Opomba: na koncu katere koli vrstice je lahko še en neobvezen parameter: b ali t. Če je podan b, se datoteka odpre v binarnem načinu branja/pisanja. Če je t, je za datoteko nastavljen način prevajanja vrstice, t.j. dojema se kot besedilno.

Za predstavitev razmislite o naslednjem scenariju:

// Odpre datoteko na različne načine
$ fp = fopen ("counter.txt", "r"); // Binarni način
$ fp = fopen ("counter.txt", "rt"); // Besedilni način
$ fp = fopen ("http://www.yandex.ru", "r"); // Odpre povezavo HTTP za branje
$ fp = fopen ("ftp: // uporabnik: [email protected]"," w "); // Odpri FTP povezavo s prijavo in geslom
?>

II... Manipulacija s podatki v datoteki

Zapišite podatke v datoteko, ko PHP pomoč lahko uporabite funkcijo fwrite ()... Ta funkcija potrebuje 2 zahtevana parametra in 1 neobvezen. Zahtevana parametra sta deskriptor datoteke in datotečni način:

$ fp = fopen ("counter.txt", "a"); // Odprite datoteko v načinu pisanja
$ mytext = "To vrstico moramo napisati \ r \ n"; // Izvorni niz
$ test = fwrite ($ fp, $ mytext); // Zapiši v datoteko
if ($ test) echo "Podatki so bili uspešno vneseni v datoteko.";
else echo "Napaka pri pisanju v datoteko.";
fclose ($ fp); // Zaprite datoteko
?>

Če želite prebrati datoteko vrstico za vrstico, uporabite funkcijo fgets ()... Funkcija ima 2 zahtevana parametra:


če ($ fp)
{
medtem ko (! feof ($ fp))
{
$ mytext = fgets ($ fp, 999);
echo $ mytext."
";
}
}

fclose ($ fp);
?>

Opomba: B ta primer vrednost 999 določa število znakov, ki se bodo brali, dokler kazalec ne doseže konca datoteke (EOF).

Če želite prebrati datoteko kot celoto, morate uporabiti funkcijo preberi datoteko () ki zahteva 1 zahtevan parameter. Funkcija odpre datoteko, prikaže njeno vsebino v oknu brskalnika in nato zapre datoteko:

echoreadfile ("counter.txt");
?>

Uporabite lahko tudi funkcijo fpassthru (), ki sprejme 1 zahtevan parameter. Pred uporabo te funkcije morate datoteko odpreti v načinu za branje. Ko je datoteka končana z branjem, funkcija samodejno zapre datoteko (in deskriptor datoteke postane neveljaven).

$ fp = fopen ("counter.txt", "r"); // Odprite datoteko v načinu branja
if ($ fp) echo fpassthru ($ fp);
elseecho "Napaka pri odpiranju datoteke";
?>

Zelo pogosto obstajajo situacije, ko je treba vsebino spletnega mesta prebrati v niz. Ta funkcija je zagotovljena z uporabo funkcije mapa ()... Ko pokličete to funkcijo, bo vsaka vrstica datoteke shranjena v ločenem elementu podane matrike.

Opomba: Ne uporabljajte funkcije mapa () v binarne datoteke (binarno varne), ker ni varno v smislu branja binarnih datotek, če je hkrati nekje znak za konec datoteke (EOF), potem to ne zagotavlja, da boste prebrali celotno binarno datoteko.

$ file_array = datoteka ("counter.txt"); // Preberi datoteko v $ file_array
// Delo s podatki matrike
?>

Opomba: Delo z nizi je podrobno opisano, avtorji: Mukhametshin D.F., Simdyanov I.V.

Na koncu članka boste našli dobro "knjigo receptov" za nize, ki ponuja rešitev za številne težave, s katerimi se spletni programer srečuje vsakodnevno.

Predstavljajmo si situacijo, ko je treba datoteko brati znak za znakom. Za to lahko uporabimo funkcijo fgetc ()... Funkcija ima en sam parameter. Funkcija je uporabna, če moramo najti kateri koli znak ali število enakih znakov.

$ fp = fopen ("counter.txt", "r"); // Odprite datoteko v načinu branja
če ($ fp)
{
medtem ko (! feof ($ fp))
{
$ char = fgetc ($ fp);
if ($ char == "c") $ i = $ i + 1; // Poiščite znak "c"
}
echo "Število črk" c "v datoteki:". $ i;
}
else echo "Napaka pri odpiranju datoteke";
?>

III... Zapiranje datoteke

Zapiranje datoteke s funkcijo fclose () ki zahteva 1 zahtevani parameter.

$ fp = fopen ("counter.txt", "r");
če ($ fp)
{
echo "Datoteka odprta";
fclose ($ fp); // Zaprite datoteko
}
?>

Zbirka receptov

1) Preveriti moramo, ali ta ali ona datoteka obstaja. Za to bomo uporabili funkcijo file_exists ().

moja datoteka ("counter.txt"); // Uporabite funkcijo myfile, ki posreduje ime datoteke kot argument

function myfile ($ name) // Ustvarite funkcijo, da preverite, ali datoteka obstaja
{
if (file_exists ($name)) echo "Datoteka obstaja";

}
?>

Opomba: Funkcija datoteka_obstaja ne preverja datotek na oddaljenem spletnem strežniku. Za pravilno delo funkcije, mora biti skriptna datoteka na strežniku, kjer je datoteka, ki se preverja.

2) S funkcijo določite velikost datoteke velikost datoteke()

moja datoteka ("counter.txt");

function myfile ($ name) // Ustvarite funkcijo za preverjanje obstoja datoteke in določitev velikosti datoteke
{
if (file_exists ($name)) echo "Velikost datoteke:" .filesize (ime $). "byte";
else echo "Datoteka ne obstaja";
}
?>

3) Ustvarite začasno datoteko s funkcijo tmpfile()

$ myfile = tmpfile ();
fwrite ($ myfile, "Ta vrstica je zapisana v začasno datoteko."); // Pisanje v začasno datoteko
fseek ($ myfile, 0); // Nastavi kazalec datoteke
echo fread ($ myfile, 1024); // prikaže vsebino datoteke
?>

4) Določiti morate število vrstic v datoteki. Za to uporabljamo funkcijo šteti()

$ fp = datoteka ("counter.txt");
echo "Število vrstic v datoteki:" .count ($ fp);
?>

5) Uporabiti moramo mehanizem za zaklepanje datotek

$ fp = fopen ("counter.txt", "a");
jata ($ fp, LOCK_EX); // Zakleni datoteko za pisanje
fwrite ($ fp, "String za pisanje");
jata ($ fp, LOCK_UN); // Odkleni
fclose ($ fp);
?>

6) Iz datoteke moramo odstraniti določeno vrstico

$ num_stroka = 5; // Odstrani vrstico 5 iz datoteke
$ datoteka = datoteka ("counter.txt"); // Preberi celotno datoteko v niz

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

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

7) Določanje vrste datoteke. Uporabljamo funkcijo