Php, kako se izgovori. Delo z datotekami v php: odpiranje, pisanje, branje. Tradicionalne metode fopen

Zadnja posodobitev: 1.11.2015

Kot večina programskih jezikov tudi PHP podpira delo z datotekami, ki so eden od načinov shranjevanja informacij.

Branje in pisanje datotek

Odpiranje in zapiranje datotek

Za odpiranje datotek v PHP je definirana funkcija fopen(). Ima naslednjo definicijo: resource fopen(string $filename, string $mode) . Prvi parameter $filename predstavlja pot do datoteke, drugi pa način odpiranja. Odvisno od namena odpiranja in vrste datoteke lahko ta parameter sprejme naslednje vrednosti:

    "r" : datoteka se odpre samo za branje. Če datoteka ne obstaja, vrne false

    "r+" : Datoteka je odprta samo za branje in zapisljiva. Če datoteka ne obstaja, vrne false

    "w" : datoteka je odprta za pisanje. Če takšna datoteka že obstaja, se prepiše, če ne, se ustvari.

    "w+" : datoteka je odprta za pisanje in berljiva. Če takšna datoteka že obstaja, se prepiše, če ne, se ustvari.

    "a" : datoteka je odprta za pisanje. Če takšna datoteka že obstaja, se podatki zapišejo na konec datoteke, stari podatki pa ostanejo. Če datoteka ne obstaja, se ustvari

    "a+" : Datoteka je odprta za branje in pisanje. Če datoteka že obstaja, se podatki dodajo na konec datoteke. Če datoteka ne obstaja, se ustvari

Izhod funkcije fopen bo deskriptor datoteke. Ta ročaj se uporablja za operacije z datotekami in za zapiranje datoteke.

Po končanem delu je potrebno datoteko zapreti s funkcijo fclose(), ki kot parameter vzame deskriptor datoteke. Na primer, odpremo in zapremo datoteko:

$fd = fopen("form.php", "r") ali die("datoteke ni bilo mogoče odpreti"); fclose($fd);

Konstrukcija or die("besedilo napake") omogoča, da skript preneha delovati in prikaže sporočilo o napaki, če funkcija fopen ni mogla odpreti datoteke.

Branje datoteke

Za branje datoteke lahko uporabite več funkcij. Za branje po vrsticah se uporablja funkcija fgets(), ki prejme deskriptor datoteke in vrne eno prebrano vrstico. Pojdimo skozi celotno datoteko vrstico za vrstico:

Ob vsakem klicu funkcije fgets() PHP postavi kazalec na konec prebrane vrstice. Za sledenje koncu datoteke se uporablja funkcija feof(), ki vrne vrednost true, ko je datoteka dokončana. In dokler ne dosežemo konca datoteke, lahko uporabljamo funkcijo fgets().

Branje celotne datoteke

V tem primeru nam ni treba eksplicitno odpreti datoteke, pridobiti ročaja in nato zapreti datoteke.

Blokiraj branje

Izvedete lahko tudi branje blokov za bloki, kar pomeni, da preberete določeno število bajtov iz datoteke s funkcijo fread():

Funkcija fread() ima dva parametra: ročko datoteke za branje in število bajtov za branje. Ko je blok prebran, se kazalec v datoteki premakne na konec tega bloka. Poleg tega lahko s funkcijo feof() spremljate dokončanje datoteke.

Napišite datoteko

Za pisanje datoteke uporabite funkcijo fwrite(), ki v datoteko zapiše naslednjo vrstico:

Druga funkcija fputs() deluje podobno:

Delo s kazalcem datoteke

Pri odpiranju datoteke za branje ali pisanje v načinu "w" se kazalec v datoteki postavi na začetek. Pri branju PHP podatki premakne kazalec v datoteki na konec bloka prebranih podatkov. Lahko pa tudi ročno manipuliramo s kazalcem v datoteki in ga nastavimo na poljubno mesto. Če želite to narediti, morate uporabiti funkcijo fseek, ki ima naslednjo formalno definicijo:

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

Parameter $handle predstavlja ročko datoteke. Parameter $offset je odmik v bajtih glede na začetek datoteke, iz katere se bo začelo branje/pisanje. Tretji izbirni parameter določa, kako je odmik nastavljen. Ima lahko tri vrednosti:

    SEEK_SET : privzeta vrednost, nastavi odmik v bajtih odmika glede na začetek datoteke

    SEEK_CUR: nastavi odmik v bajtih odmika glede na začetek trenutnega položaja v datoteki

    SEEK_END: ​​nastavi odmik za odmik bajtov od konca datoteke

Če je kazalec uspešno nameščen, funkcija fseek() vrne 0, če je kazalec neuspešen, vrne -1.

Primer uporabe funkcije:

$fd = fopen("hello.txt", "w+") ali die("datoteke ni bilo mogoče odpreti"); $str = "Pozdravljen svet!"; // vrstica za pisanje fwrite($fd, $str); // zapiši vrstico na začetek fseek($fd, 0); // postavi kazalec datoteke na začetek fwrite($fd, "Oink"); // zapiši vrstico na začetku fseek($fd, 0, SEEK_END); // postavi kazalec na konec fwrite($fd, $str); // napiši še eno vrstico na koncu fclose($fd);

O uporabi 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 število razpoložljivih funkcij. PHP bi zlahka sprejel Perlov jezikovni moto, "Obstaja več kot en način, da nekaj naredimo", še posebej, če govorimo o o obdelavi datotek. Toda zaradi množice orodij, ki so na voljo, se postavlja vprašanje, katero je najboljše za opravljanje dela. Seveda je odgovor na to vprašanje resnično odvisen od vaših ciljev pri obdelavi datoteke, zato je učenje vseh zmožnosti jezika vredno vašega časa.

Tradicionalne metode fopen

Metode fopen so verjetno najbolj poznane programerjem C in C++ nekoč, saj so bolj ali manj orodja, ki so vam že leta na dosegu roke, če ste delali s temi programskimi jeziki. Za katero koli od teh metod, ki jih naredite standardni postopek, z uporabo fopen za odpiranje datoteke, funkcijo za branje podatkov in nato fclose za zapiranje datoteke, kot je prikazano v seznamu 1.

Izpis 1. Odpiranje in branje datoteke z uporabo fgets
$file_handle = fopen("myfile", "r"); medtem ko (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

Čeprav te funkcije pozna večina 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 si bom ogledal vsako tukaj uporabljeno datotečno funkcijo.

funkcija fopen

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

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

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

Opomba: Možnost "r", uporabljena v fopen, označuje, da je datoteka odprta samo za branje. Ker pisanje v datoteko ni vključeno v obseg vprašanj, obravnavanih v tem članku, ne bom navedel vseh možnih vrednosti parametra. Vendar pa morate spremeniti "r" v "rb", če berete iz binarnih datotek za združljivost med platformami. Spodaj je primer te vrste.

funkcija feof

Ukaz feof določi, ali je branje doseglo konec datoteke, in vrne True ali False. Zanka, prikazana v, 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čimo sredino seznama 1 in pojdimo do konca; fclose deluje nasprotno od fopen: zapre povezavo do datoteke ali URL-ja. Po izvedbi te funkcije ne boste več mogli brati iz datoteke ali vtičnice.

funkcija fgets

Če se vrnemo nekaj vrstic nazaj v seznamu 1, pridemo do bistva procesa obdelave datoteke: dejanskega branja datoteke. Funkcija fgets je vaše orožje izbire za prvi primer. Zgrabi vrstico podatkov iz datoteke in jo vrne kot niz. Od tam lahko prikažete podatke ali jih kako drugače obdelate. Primer v seznamu 1 natisne celotno datoteko.

Če se odločite omejiti velikost podatkovnega dela, s katerim delate, lahko v fgets dodate argument za omejitev največja dolžina vrstice zajetih podatkov. Na primer, uporabite naslednjo kodo, da omejite dolžino vrstice na 80 znakov:

$string = fgets($file_handle, 81);

Pomislite na "\0", indikator konca vrstice v C, in nastavite dolžino na en znak, ki je daljši, kot ga dejansko potrebujete. Kot lahko vidite, zgornji primer uporablja 81 znakov, medtem ko potrebujete 80 znakov. Naj vam postane navada, da dodate dodaten znak, kadar koli morate nastaviti omejitev dolžine vrstice za določeno funkcijo.

fread funkcijo

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. Kakor koli že, analiza po vrsticah ni vedno tisto, kar potrebujete.

In tukaj dostopamo do fread. Funkcija fread ima nekoliko drugačen namen kot fgets: namenjena je branju iz binarnih datotek (to je datotek, ki na začetku niso sestavljene iz človeku berljivega besedila). Ker koncept "vrstic" ni pomemben za binarne datoteke (logične podatkovne strukture običajno niso razdeljene v vrstice), morate določiti število bajtov, ki jih želite prebrati.

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

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

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

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

Če je velikost datoteke večja, boste morali uporabiti zanko, da preberete preostanek.

funkcija fscanf

Če se vrnemo k obdelavi nizov, je fscanf tudi naslednik tradicionalne funkcije knjižnice datotek C. Če je ne poznate, fscanf prebere podatkovna polja v spremenljivke iz datoteke.

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

Oblikovalni nizi, uporabljeni v tej funkciji, so opisani v številnih virih, kot je PHP.net, zato teh informacij ne bom ponavljal tukaj. Dovolj je reči, da je oblikovanje nizov zelo prilagodljivo. Prav tako je treba omeniti, da so vsa polja postavljena v spremenljivko, ki jo vrne funkcija. (V C bi bili ti posredovani kot argumenti.)

funkcija fgetss

Funkcija fgetss se razlikuje od tradicionalnih funkcij za upravljanje datotek in vam omogoča boljše razumevanje zmogljivosti PHP. Deluje kot fgets, vendar zavrže vse, kar najde. oznake HTML ali PHP, pri čemer ostane le golo besedilo. Vzemimo spodnjo datoteko HTML.

Izpis 2. Primer datoteke HTML
Moj naslov

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



Prepustimo ga skozi funkcijo fgetss.

Izpis 3. Uporaba fgetss
$file_handle = fopen("myfile", "r"); medtem ko (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

To je tisto, kar boste dobili kot rezultat:

Moj naslov Če razumete, kaj pomeni "Cause there ain't one for to give you no pain", potem preveč poslušate skupino America

funkcija fpassthru

Ne glede na to, kako berete podatke iz datoteke, lahko preostale podatke natisnete s standardnim izhodnim kanalom s funkcijo fpassthru.

fpassthru($fh);

Ta funkcija natisne podatke, tako da vam jih ni treba dati v spremenljivko.

Nelinearna obdelava datotek: premikanje po datoteki

Seveda vam zgoraj opisane funkcije omogočajo le zaporedno branje iz datoteke. Bolj zapletene datoteke bodo morda zahtevale premikanje v različne dele datoteke na začetku ali koncu datoteke. Za to potrebujete funkcijo fseek.

fseek($fh, 0);

Zgornji primer se vrača na začetek datoteke. Če se ne želite premakniti na sam začetek datoteke – recimo en kilobajt je dovolj – preprosto napišete:

fseek($fh, 1024);

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

fseek($fh, 100, SEEK_CUR);

Podobno premik za 100 bajtov nazaj izvede:

fseek($fh, -100, SEEK_CUR);

Če se želite vrniti na položaj 100 bajtov pred koncem datoteke, namesto tega uporabite SEEK_END.

fseek($fh, -100, SEEK_END);

Ko je dosežen nov položaj, lahko uporabite fgets, fscanf ali drugo funkcijo za branje podatkov.

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

Zajemite celotno datoteko

Zdaj si bomo ogledali nekatere edinstvene zmožnosti obdelave datotek PHP: obdelava velikih blokov podatkov v eni ali dveh vrsticah. Na primer, kako lahko zgrabite datoteko in prikažete njeno celotno vsebino na svoji spletni strani? No, videli ste primer uporabe zanke s fgets. Kako pa lahko to olajšate? Postopek je skoraj smešno enostaven z uporabo fgetcontents, ki postavi celotno datoteko na vrstico.

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

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

echo file_get_contents("myfilename");

Ta članek se osredotoča predvsem na obdelavo lokalnih datotek, vendar je vredno 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);

Morda gledate te primere in mislite: "To je veliko dela." Razvijalci PHP se strinjajo z vami. Tako lahko zgornji ukaz skrajšate na:

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

Funkcija readfile izpiše celotno vsebino datoteke ali spletne strani v privzeti izhodni medpomnilnik. Privzeto ta ukaz prikaže sporočilo o napaki, ko ne uspe. Č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 vso to zapletenost, če obstaja popolnoma ustrezna funkcija, ki bo opravila delo namesto vas? Funkcija PHP file() opravi to nalogo v enem koraku: vrne matriko nizov, katere elementi so vrstice datoteke.

$matrika = datoteka ("moja datoteka");

Upoštevati je treba, da obstaja majhna razlika med zgornjima primeroma. Ukaz split odstrani nove vrstice, medtem ko ukaz file konča matrične vrstice z novimi vrsticami (tako kot fgets).

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

Izpis 4. Primer datoteke .ini
; Ime komentarja = Naloga "King Arthur" = Iskanje svetega grala Najljubša barva = Modra Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Naslednji ukazi predstavljajo datoteko kot matriko in nato natisnejo matriko:

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

Rezultat bo naslednji rezultat:

Izpis 5. Izhod
Niz ( => Kralj Artur => Iskanje svetega grala => Modra => Mark Twain => Whoopi Goldberg)

Seveda lahko to opazite ta ukaz združeni odseki. To je privzeto dejanje, vendar ga lahko preprosto prilagodite z uporabo drugega argumenta parse_ini_file: process_sections, ki je logična spremenljivka. Nastavite process_sections na True.

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

In vaš rezultat bo videti takole:

Izpis 6. Izhod
Array ( => Array ( => King Arthur => Iskanje svetega grala => Blue) => Array ( => Mark Twain => Whoopi Goldberg))

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

Toda to je le vrh ledene gore, ko gre za obdelavo datotek v PHP. Bolj zapletene funkcije, kot sta tidy_parse_file in xml_parse, vam lahko pomagajo razčleniti dokumente HTML oziroma XML. Če želite izvedeti več, glejte razdelek podrobne informacije o delovanju teh funkcij. Če delate s temi vrstami datotek, je vredno razmisliti o obeh, vendar namesto da bi si ogledali vse možne vrste datotek, si boste morda želeli podrobneje ogledati vsebino tega članka, kjer je več dobrih splošna pravila za delo s funkcijami, ki sem jih do sedaj opisal.

Dober slog programiranja

Nikoli ne predvidevajte, da bo vse v vašem programu delovalo, kot je predvideno. Na primer: kaj če je bila datoteka, ki jo iščete, premaknjena? Kaj pa, če sprememba dovoljenja povzroči, da ne morete brati vsebine datoteke? Z metodama file_exists in is_readable lahko vnaprej preverite obstoj datoteke in pravice za branje.

Izpis 7. Uporaba file_exists in is_readable
$filename = "myfile"; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # Obdelava fclose($fh); )

Vendar bo v praksi ta del programa za vašo nalogo verjetno prevelik. Ravnanje z vrednostmi, ki jih vrne fopen, je preprostejše in natančnejše.

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

Ker fopen vrne False, če ne uspe, bo to zagotovilo, da bo datoteka obdelana 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 se ujamejo vse morebitne težave. Druga možnost je, da zapustite program 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 prav tako vrnejo False, če pride do napake. Seveda, z izjemo fclose, ste verjetno že obdelali rezultate, ki jih vrnejo. Kar zadeva fclose, ni mogoče veliko narediti, če se ročaj datoteke ne zapre pravilno, zato je preverjanje vrnjene vrednosti fclose na splošno pretirano.

Izbira je vaša

PHP-ju ne manjka učinkovite načine branje in analiziranje datotek. Klasične funkcije, kot je fread, vam lahko zanesljivo služijo večino časa ali pa vas bo bolj pritegnila preprostost readfile, če je to tisto, kar potrebujete za opravljanje dela. Izbira je res odvisna od tega, kaj poskušate doseči.

Če obdelujete velike količine podatkov, se vam bo fscanf verjetno zdel bolj uporaben in učinkovit kot na primer uporaba datoteke v kombinaciji s poznejšima ukazoma split in sprintf. Če preprosto prikazujete veliko količino besedila z manjšimi spremembami, je uporaba funkcij file, file_get_contents ali readfile morda bolj smiselna. Ta rešitev bo verjetno pravilna, če z uporabo PHP za predpomnjenje ali celo ustvarjanje začasnega strežnika proxy.

PHP ponuja veliko orodij za delo z datotekami. Vsakega bolje spoznajte in ugotovite, katera orodja so najboljša za projekt, na katerem delate. Ponuja se vam široka izbira programsko opremo, jih uporabite najučinkoviteje in se zabavajte ob obdelavi datotek s PHP.

PHP se je pojavil veliko pozneje, kot so programski jeziki okrepili svoje položaje in oblikovali splošne ideje o sintaksi, logiki, spremenljivkah in drugih programskih predmetih. Datoteke in funkcije za delo z njimi niso napredovale in tudi problem kodiranja datotek, ki se je pojavil iz naravnih razlogov, ni privedel do radikalno novih rešitev.

Splošne pripombe

Glavno delo z datotekami, katerekoli že so, je sestavljeno iz odpiranja, branja/pisanja in zapiranja. Uporabite lahko funkcije blokiranja/deblokiranja dostopa do datoteke med obdelavo, nastavite lahko položaj branja/pisanja v datoteki - vse je enako kot prej, v daljni preteklosti.

Pomembna točka v PHP je obilica funkcij za delo z datotekami in možnosti za njihovo uporabo. V praksi je dovolj, da uporabite preproste, a delujoče možnosti. Datoteka je najprej programski pomnilnik. Vanj lahko shranjujete informacije. Namen vsakega programa, namen katere koli spletne strani je predstavljanje, obdelava in zagotavljanje varnosti informacij.

Bistvena okoliščina

Prej je bila zahteva po združljivosti, vsaj od spodaj navzgor, neomajna. To pomeni, da je program, ki je bil enkrat napisan v eni različici programskega jezika, idealno preveden/interpretiran v naslednji različici. V sodobnem programiranju temu ni tako. Zahteva po združljivosti sintaktičnih struktur jezika je postala stvar zgodovine, boj med slogi in programskimi orodji ter različicami določenih orodij pa je postal norma njihovega življenja.

Delo z datotekami in bazami podatkov je enako pomembno kot vmesnik spletnega mesta. Prvi naj bo zgrajen tako, da pri menjavi platforme, gostovanja ali jezikovne različice ni treba spreminjati kode spletnega mesta. Vmesnik za delo z datotekami mora biti vključen v ločeni skripti in zagotavljati popolno združljivost, prav tako se mora dizajn spletnega mesta ustrezno prilagajati vsaki napravi, brskalniku in zagotavljati ostale funkcionalnosti spletnega mesta z enakimi zmogljivostmi.

Preberite in spremenite sebe

Ali se lahko program spremeni sam, se pravi, ali se skripta izboljša? Do danes to vprašanje zanima mnoge. Toda naloga zveni veliko bolj praktično: PHP bere datoteko PHP. Razvijalec ne more vedno rešiti določenega problema s pisanjem specifične kode. Včasih ga je treba spremeniti, ko obiskovalec pride na spletno mesto in oblikuje vprašanje, ki ni bilo predvideno v fazi razvoja.

Kot v vseh drugih primerih morate najprej odpreti datoteko. Ni pomembno, ali ta datoteka obstaja ali ne. Če je znano, da datoteka obstaja (funkcija file_exists() daje pozitiven odgovor), se uporabi funkcija fopen() z dostopom 'r', 'r+', 'a', 'a+'. Če datoteka še ne obstaja, potem z dostopom 'a', 'a+', 'w', 'w+'. Rezultat odpiranja datoteke bo njen deskriptor. Datoteka se zapre s funkcijo fclose().

Primerno je uporabljati PHP za branje datoteke v matriko, ko je v času branja ni treba obdelati.

če (file_exists($fName)) (

$aLines = datoteka($fName)

Pri tej možnosti gre vsaka vrstica datoteke zaporedno v element polja. Upoštevati je treba, da funkcijama file() ali file_get_contents() ni treba odpreti in zapreti datoteke.

Ko je vhodna datoteka prevelika in morate najti le malo informacij ali iz drugih razlogov, lahko uporabite PHP za branje datoteke vrstico za vrstico. PHP omogoča to s funkcijama fgets() in fgetc().

$fvs = fopen($fName, "r")

medtem ko ((false !== ($cLine = fgets($fvs, 2000)))) (

$cLines .= "
" . $i . "). " . $cLine

Obe možnosti delujeta brezhibno. Ko izvajate PHP branje datoteke PHP za poznejše spreminjanje, morate biti previdni. V fazi razvoja spletnega mesta ni vedno mogoče predvideti, kako ga bo obiskovalec uporabil. Bolje je, če se skripti spremenijo znotraj funkcij spletnega mesta in nadzor te spremembe ni na voljo obiskovalcu, vključno s skrbnikom virov.

Shranjevanje rezultatov

Prejete in posodobljene informacije se v datoteko zapišejo s funkcijo fputs() vrstico za vrstico ali s funkcijo file_put_contents() kot celoto.

$fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fName, "a")

jata ($fvs, LOCK_EX)

$cLine = "1 vrstica". chr(10)

fputs($fvs, $cLine)

$cLine = "2 vrstica" . chr(10)

fputs($fvs, $cLine)

jata ($fvs, LOCK_UN)

Pri možnosti zapisa po vrsticah lahko med postopkom snemanja manipulirate s podatki, v drugem primeru pa se zapisani niz ali matrika umesti v celotno datoteko.

$file = " scData.php "

$cContents = file_get_contents($file)

// dodajanje vnosa

$cContents .= "nov vnos\n"

// zapiši datoteko nazaj

file_put_contents($file, $cContents)

Branje in pisanje datotek PHP je preprosto in naravno. Vendar je pomembno upoštevati: vsaka datoteka ima ime, končnico in pot (mapo). Da lahko skript PHP bere in piše datoteke, mora imeti skript ustrezne pravice. Na gostovanju so samodejno izpostavljeni, v nekaterih primerih pa jih je treba razširiti.

V nekaterih primerih je morda zaželeno preveriti rezultate s testnim branjem. Pisanje datotek PHP to zahteva med razvojem, vendar je v nekaterih primerih zaradi varnosti ali zanesljivosti spletnega mesta nujno preverjanje zapisa podatkov.

Značilna lastnost PHP, MySQl, JavaScript in še posebej brskalnikov: tiho dopuščanje nekaterih napak. "Ni priznano, ni opravljeno ..." - ni zelo dobra prva prva praksa informacijske tehnologije, vendar to uči razvijalce, da ne delajo napak in pišejo čisto, kakovostno kodo, kar tudi ni slabo.

PHP in delo s pravimi dokumenti

PHP branje datoteke PHP je vsekakor praktičnega pomena, vendar je to področje programiranja. Uporabnika in obiskovalca spletnega mesta zanimajo informacije uporabne narave, ki jih je navajen videti v obliki tabel in dokumentov, zlasti v formatih datotek *.xlsx in *.docx. To so datoteke v formatu MS Excel in MS Word.

Seznami blaga, cen, lastnosti so običajno oblikovani v obliki tabel, zato je PHP branje Excel datoteke nujno.

Knjižnici PHPExcel in PHPWord sta bili razviti za delo s takimi datotekami. Vendar pa je vsebina datotek *.xlsx in *.docx predstavljena v standardu OOXML, torej pravi, razumljiv dokument je predstavljen v zip arhivu. Arhiv Zip je nabor datotek, vključno s slikami, predmeti, formulami in vložki iz drugih programov. Besedilne datoteke so tukaj predstavljene z opisi v obliki oznak. Branje take datoteke ni dovolj; morate jo razčleniti, da dobite vsebino in strukturo za uporabo in spreminjanje.

To pomeni, da se operacija branja spremeni v proceduro odpiranja arhiva. Te knjižnice neodvisno odprejo arhiv dokumentov in razvijalcu nudijo obsežne funkcije za branje, obdelavo in pisanje takih dokumentov.

Excel tabele

include_once 'PhpOffice/PhpExcel/IOFactory.php'

funkcija scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//ta matrika vsebuje nize nizov

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//zdravljenje

foreach($aSheet->getRowIterator() kot $row)(

$cellIterator = $row->getCellIterator()

foreach($cellIterator kot $cell)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($array, $item)

Branje in obdelava Excelovih datotek je veliko težje obdelati Wordovi dokumenti. Najboljša možnost, če morate izvesti resen projekt za branje in obdelavo uporabnih informacij, je, da najprej obvladate knjižnico PHPWord. To vam bo dalo dobro izkušnjo in hitro razumevanje posebnosti težave.

Wordovi dokumenti

Samo dve vrstici:

$oWord = novo \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

Dokument $cFileName je zdaj na voljo za obdelavo. Nato se arhiv odpre, izbere in analizira njegova vsebina, ki jo lahko prikažemo na spletni strani, spremenimo in zapišemo nazaj.

$zipClass = nov ZipArchive()

$zipClass->open($this->tempFileName)

// prebere celotno vsebino dokumenta

za ($i=0; $i<$zipClass->numFiles; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// datoteke s končnicami ".xml" in ".xml.rels" so shranjene v tabeli dokumentov

// vsaka vrstica xml je zapisana z edinstveno številko po vrstnem redu

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// vse druge datoteke so zapisane v mapo dokumenta, kot so

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // vsebina kot datoteka

Priložnosti, ki se odprejo, ko PHP pomoč Excel in PHP Word vam omogočata, da manipulirate z resničnimi dokumenti in naredite njihovo vsebino relevantno v danem trenutku. V današnjem dinamičnem svetu je to zelo pomembno. Težišče je že zdavnaj minilo iz lokalne uporabe računalniška oprema v virtualni internetni prostor. Zato je ustvarjanje tabel in dokumentov v lokalnih Microsoftovih izdelkih manj učinkovito kot delo s takšnimi dokumenti v samodejnem in polavtomatskem načinu na spletnem mestu, ki je dostopno ne le ustvarjalcu tabele ali dokumenta, temveč tudi njegovim potrošnikom.

Besedilne datoteke, drugo življenje

Na prvi približek so besedilne datoteke enostavnejše od datotek PHP ali aplikacijskih dokumentov. Vendar pa je tukaj treba nekaj razmisliti. Operacije branja/pisanja takih datotek so že navedene zgoraj, vendar je pomen takšnih datotek veliko bolj pomemben.

Ker obstaja taka danost, kot sta odjemalec in strežnik (prvemu prevladuje JavaScript, drugemu PHP), potem tudi mehanizmi piškotkov in sej ne morejo kos potrebi po prenosu informacij med skripti, stranmi ali določenimi procesi.

Možno je odražati želene spremembe v bazi podatkov, vendar so majhne začasne ali trajne besedilne datoteke kljub vsem svojim prednostim in hitrosti lahko veliko bolj zanimiva možnost za prenos informacij. Če ne ustvarite veliko majhnih datotek in nadzorujete njihove velikosti, so lahko posebna in bolj prilagodljiva različica baze podatkov.

PHP bere besedilno datoteko hitro, takoj jo je mogoče razčleniti v strukturo, matriko ali objekt. Slednje je zelo pomembno, saj omogoča ustvarjanje predmetov, ki živijo izven predvidenega časa PHP skript, ki, kot veste, lahko obstaja le na strežniku in le v času, ko se stran naloži, se ustvari odgovor AJAX ali iz drugega razloga, ki povzroči zagon tolmača PHP.

Če pomislite na dejstvo, da je besedilna datoteka vsebina in struktura razvijalca, je datoteka PHP sintaksa tolmača in razvijalčeva logika, »označeni« opisi html, css, xml pa so bolj semantični elementi, vendar regulirani po statičnih standardih. Lahko bi ugotovili, da je verjetno čas, da datoteke pridobijo novo vsebino, kar naj bi samo po sebi določalo njihovo kakovost in logiko uporabe. Prav zato, ker programiranje še ni pripravljeno na naslednjo stopnjo svojega razvoja, ostajajo datoteke danes preprosto datoteke, ki jih razvijalec ustvari in jim določi uporabo.

Najbolj zanimivo in obetavno je, da PHP samostojno prebere datoteko PHP, ko se pojavi potreba. In preprost PHP, ki bere vrstico iz datoteke, povzroči ustvarjanje predmeta, vsaj v stanju, v katerem je bil shranjen. To niso povsem znane ideje, a v sodobnem svetu se vse tako hitro spreminja.

16,5K

Pravzaprav, kako odpreti datoteko php, ni velik problem. Težje je odpreti steklenico piva, ko si sredi gozda. A tako razmišljajo samo navdušeni programerji. In za začetnike vam bomo povedali o vseh zmožnostih PHP za delo z datotekami:

php datoteke

Datoteke s končnico php vsebujejo kodo, napisano v istoimenskem programskem jeziku. Za razliko od drugih jezikov je php programski jezik na strani strežnika. To pomeni, da deluje na strani strežnika. Zato mora biti za odpravljanje napak v njegovi kodi na odjemalskem računalniku nameščen lokalni strežnik.

Za delo z datotekami php se uporabljajo posebne aplikacije - urejevalniki programske opreme. Najpogostejši so:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP razvoj.
Ko ustvarjate spletna mesta, ki temeljijo na PHP, boste morda morali znova uporabiti programsko kodo. V takšnih situacijah je priročno povezati že pripravljene rešitve, ki se nahajajo v drugi datoteki. Za to se uporablja konstrukt include. Njegova sintaksa je:

vključi ime datoteke

Primer povezave:

Priložena datoteka:


Vključitev datoteke je možna tudi z uporabo zahtevane konstrukcije. Za razliko od include vključuje datoteko, preden se izvede programska koda. Če v kodi uporabite zahtevo, je možen samo en klic te datoteke. Ob ponovnem dostopu bo sistem prikazal globalno sporočilo o napaki in ustavil izvajanje programa.

Konstrukcija include vključuje izvor samo med izvajanjem programa. Podpira večkratno branje datoteke php. Če pride do napake, bo prikazano le opozorilo, izvajanje kode pa se bo nadaljevalo od naslednje vrstice.

Odpiranje in zapiranje datotek

V php se vse operacije z datotekami izvajajo v več fazah:

  • Odpiranje datoteke;
  • Urejanje vsebine;
  • Zapiranje datoteke.

Funkcija fopen() se uporablja za odpiranje datoteke. Njegova sintaksa je:

int fopen(niz ime datoteke, način niza [, int use_include_path])

Sprejeti argumenti:

  • niz filename – ime datoteke ali absolutna pot do nje. Če pot do datoteke ni podana, se bo iskala v trenutnem imeniku. Če datoteka, ki jo iščete, manjka, bo sistem prikazal sporočilo o napaki. primer:

  • string mode – označuje način odpiranja datoteke. Vrednosti, ki jih sprejme argument:
  • r – datoteka je odprta samo za branje, kazalec datoteke je postavljen na začetek;
  • r+ – datoteka je odprta za branje in pisanje;
  • w – ustvari novo datoteko samo za pisanje. Če datoteka z istim imenom že obstaja, se vsi podatki v njej samodejno izbrišejo;
  • w+ - ustvari novo datoteko za pisanje in branje. Ko taka datoteka obstaja, so njeni podatki popolnoma prepisani z novimi;
  • a – datoteka je odprta za pisanje. Kazalec je nastavljen na koncu. To pomeni, da se pisanje v datoteko php ne bo začelo od začetka, ampak od konca;
  • a+ – odpre datoteko v načinu branja in pisanja. Snemanje se bo začelo od konca;
  • b – način dela z datoteko, ki vsebuje binarne podatke (v binarnem številskem sistemu). Ta način je na voljo samo v operacijski sistem Windows.

Če želite zapreti dostop do datoteke, uporabite funkcijo fclose(). Sintaksa:

int fclose (int datoteka) , kjer je int datoteka ročaj za mesto, ki ga je treba zapreti.

Po vsakem branju ali pisanju je treba datoteko zapreti s to funkcijo. V nasprotnem primeru tok, ustvarjen za datoteko, ostane odprt. In to vodi do nepotrebne porabe zmogljivosti strežnika.

primer:

Branje in pisanje datotek

Če želite enostavno prikazati celotno vsebino datoteke, je funkcija readfile() idealna. Njegova sintaksa je:

readfile (string filename) , kjer je string filename nizovno ime datoteke (ne ročaj).


Isto datoteko je mogoče prebrati s funkcijo fpassthru(). Podatke bere od položaja končnega kazalca do konca datoteke. Njegova sintaksa je:

int fpassthru (int datoteka)

Funkcija zahteva odpiranje in zapiranje datoteke. primer:

Rezultat je podoben prejšnjemu.

Funkcije za delo z datotekami v php vam omogočajo branje vsebine vrstico za vrstico in znak za znakom:

  • niz fgets (int datoteka, int dolžina)– funkcija prebere niz dolžine length . primer:

  • string fread (int datoteka, int dolžina)– dejanje je enako prejšnjemu.

Za pisanje besedilnih podatkov v datoteko obstajata dve enaki funkciji:

  • int fputs (int datoteka, niz niz [, int dolžina ])
  • int fwrite(int datoteka, niz niz [, int dolžina ])

Funkcije zapišejo v datoteko int file niz niza podane dolžine int length ( izbirni argument). primer:

Ustvarjanje in brisanje datotek

Če želite ustvariti datoteko php, lahko uporabite funkcijo fopen() v načinu dostopa "w" ali "w+". Ali funkcija touch(). Nastavi čas spreminjanja datoteke. Če ni elementa z iskanim imenom, bo ustvarjen. Njegova sintaksa.




Vrh