php ako vysloviť Práca so súbormi v php: otváranie, písanie, čítanie. Tradičné fopen metódy

Posledná aktualizácia: 1.11.2015

Podobne ako väčšina programovacích jazykov aj PHP podporuje súbory, ktoré sú jedným zo spôsobov ukladania informácií.

Čítanie a zápis súborov

Otváranie a zatváranie súborov

Funkcia fopen() je definovaná v PHP na otváranie súborov. Má nasledujúcu definíciu: resource fopen(reťazec $názov súboru, reťazec $režim) . Prvý parameter $filename predstavuje cestu k súboru a druhý parameter predstavuje režim otvárania. V závislosti od účelu otvorenia a typu súboru môže mať tento parameter nasledujúce hodnoty:

    "r" : Súbor sa otvorí len na čítanie. Ak súbor neexistuje, vráti hodnotu false

    "r+" : Súbor je otvorený len na čítanie a zapisovateľný. Ak súbor neexistuje, vráti hodnotu false

    "w" : Súbor sa otvorí na zápis. Ak takýto súbor už existuje, potom sa prepíše, ak nie, potom sa vytvorí.

    "w+" : Súbor sa otvorí na zápis s čitateľnosťou. Ak takýto súbor už existuje, potom sa prepíše, ak nie, potom sa vytvorí.

    "a" : Súbor sa otvorí na zápis. Ak takýto súbor už existuje, údaje sa zapíšu na koniec súboru a staré údaje zostanú. Ak súbor neexistuje, vytvorí sa

    "a+" : Súbor sa otvorí na čítanie a zápis. Ak súbor už existuje, údaje sa pridajú na koniec súboru. Ak súbor neexistuje, vytvorí sa

Výsledkom funkcie fopen je deskriptor súboru. Táto rukoväť sa používa na operácie so súborom a na jeho zatváranie.

Po dokončení musí byť súbor zatvorený pomocou funkcie fclose(), ktorá berie ako parameter deskriptor súboru. Napríklad otvorme a zatvorme súbor:

$fd = fopen("form.php", "r") or die("Súbor sa nepodarilo otvoriť"); fclose($fd);

Konštrukcia or die("text chyby") vám umožňuje ukončiť skript a zobraziť nejaké chybové hlásenie, ak funkcia fopen nedokázala súbor otvoriť.

Čítanie súboru

Na čítanie súboru je možné použiť niekoľko funkcií. Na čítanie po riadkoch sa používa funkcia fgets(), ktorá vezme deskriptor súboru a vráti jeden prečítaný riadok. Poďme riadok po riadku cez celý súbor:

Zakaždým, keď zavoláte fgets() , PHP umiestni ukazovateľ na koniec čítaného reťazca. Na sledovanie konca súboru sa používa funkcia feof(), ktorá po skončení súboru vráti hodnotu true. A kým sa nedosiahne koniec súboru, môžeme použiť funkciu fgets().

Čítanie celého súboru

V tomto prípade nemusíme explicitne otvárať súbor, získať popisovač a potom súbor zatvoriť.

Blokovať čítanie

Môžete tiež vykonať čítanie blok po bloku, to znamená čítanie určitého počtu bajtov zo súboru pomocou funkcie fread():

Funkcia fread() má dva parametre: deskriptor súboru na čítanie a počet bajtov na čítanie. Pri čítaní bloku sa ukazovateľ v súbore presunie na koniec tohto bloku. A tiež pomocou funkcie feof () môžete sledovať dokončenie súboru.

Napíšte súbor

Na zápis súboru sa používa funkcia fwrite(), ktorá do súboru zapíše reťazec:

Ďalšia funkcia fputs() funguje podobne:

Práca s ukazovateľom súboru

Pri otváraní súboru na čítanie alebo zápis v režime "w" sa ukazovateľ v súbore umiestni na začiatok. Pri čítaní dát PHP presunie ukazovateľ v súbore na koniec bloku čítaných dát. S ukazovateľom v súbore však môžeme manipulovať aj ručne a nastaviť ho na ľubovoľné miesto. Na to musíte použiť funkciu fhľadať, ktorý má nasledujúcu formálnu definíciu:

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

Parameter $handle predstavuje popisovač súboru. Parameter $offset je posun v bajtoch vzhľadom na začiatok súboru, od ktorého sa začne čítanie/zápis. Tretí voliteľný parameter určuje, ako sa má nastaviť posun. Môže nadobudnúť tri hodnoty:

    SEEK_SET: predvolená hodnota, nastavuje posun na posunutie bajtov od začiatku súboru

    SEEK_CUR : nastavuje posun na posunutie bajtov vzhľadom na začiatok aktuálnej pozície v súbore

    SEEK_END : nastaví posun na posunutie bajtov od konca súboru

Funkcia fseek() vráti 0, ak je ukazovateľ úspešne nastavený, a -1, ak zlyhá.

Príklad použitia funkcie:

$fd = fopen("ahoj.txt", "w+") alebo die("súbor sa nepodarilo otvoriť"); $str = "Ahoj svet!"; // reťazec na zápis fwrite($fd, $str); // zapíše reťazec na začiatok fseek($fd, 0); // umiestni ukazovateľ súboru na začiatok fwrite($fd, "Oink"); // napíšeme riadok na začiatok fseek($fd, 0, SEEK_END); // umiestnime ukazovateľ na koniec fwrite($fd, $str); // napíšeme ďalší riadok na koniec fclose($fd);

O používaní funkcií fopen, fclose, feof, fgets, fgetss a fscanf

Uveďme si všetky možnosti

Jednou z výhod práce s modernými programovacími jazykmi, ako je PHP, je množstvo dostupných funkcií. PHP by mohlo ľahko prepožičať motto Perlu: „Existuje viac ako jeden spôsob, ako robiť veci“, najmä pokiaľ ide o manipuláciu so súbormi. Ale s množstvom dostupných nástrojov vyvstáva otázka, ktorý z nich je najlepší na vykonanie práce. Samozrejme, v skutočnosti odpoveď na túto otázku závisí od toho, aké ciele si stanovíte pri spracovaní súboru, takže osvojenie si všetkých funkcií jazyka stojí za vynaložený čas.

Tradičné fopen metódy

Metódy fopen sú pravdepodobne najznámejším programátorom v C a C++ z minulosti, keďže sú to viac-menej práve tie nástroje, ktoré boli na dosah ruky už roky, ak ste s týmito programovacími jazykmi pracovali. Pre ktorúkoľvek z týchto metód postupujte podľa štandardného postupu pomocou fopen na otvorenie súboru, funkcie na čítanie údajov a potom fclose na zatvorenie súboru, ako je uvedené vo výpise 1.

Výpis 1. Otvorenie a čítanie súboru pomocou fgets
$file_handle = fopen("myfile", "r"); while (!feof($súbor_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

Hoci tieto funkcie pozná väčšina skúsených programátorov, dovoľte mi analyzovať, ako fungujú. V skutočnosti robíte nasledujúce kroky:

  1. Otvoríte súbor. $file_handle obsahuje odkaz na samotný súbor.
  2. Skontrolujte, či ste dosiahli koniec súboru.
  3. Pokračujte v čítaní súboru, kým sa nedostanete na koniec, pričom vytlačte každý prečítaný riadok.
  4. Zatvoríte súbor.

S ohľadom na to prejdem každú tu použitú funkciu súboru.

funkcia fopen

Funkcia fopen vytvorí spojenie so súborom. Hovorím „pripojiť“, pretože okrem otvorenia súboru môže fopen otvoriť aj adresu URL:

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

Tento riadok programu vytvorí odkaz na vyššie uvedenú stránku a umožní vám začať čítať ako lokálny súbor.

Poznámka: Voľba "r" použitá vo fopen označuje, že súbor je len na čítanie. Keďže zápis do súboru je mimo rozsahu tohto článku, nebudem uvádzať všetky možné hodnoty parametra. Ak však čítate z binárnych súborov, musíte zmeniť „r“ na „rb“, aby ste dosiahli kompatibilitu medzi platformami. Príklad tohto typu bude uvedený nižšie.

funkcia feof

Príkaz feof určuje, či sa vykonalo čítanie do konca súboru a vráti hodnotu True (True) alebo False (False). Slučka pokračuje až do konca "myfile." Všimnite si, že feof tiež vráti hodnotu False, ak čítate adresu URL a časový limit pripojenia vypršal, pretože nie sú k dispozícii žiadne ďalšie údaje na čítanie.

funkcia fclose

Preskočme stred Výpisu 1 a prejdime na koniec; fclose robí opak fopen: zatvorí spojenie so súborom alebo URL. Po vykonaní tejto funkcie už nebudete môcť čítať zo súboru alebo soketu.

funkcia fgets

Vrátenie sa o niekoľko riadkov späť vo výpise 1 vás privedie k jadru procesu spracovania súboru: čítanie samotného súboru. Funkcia fgets je „zbraňou“, ktorú ste si vybrali pre prvý príklad. Zo súboru vezme riadok údajov a vráti ho ako reťazec. Odtiaľ môžete vydávať údaje alebo ich spracovávať iným spôsobom. Príklad vo výpise 1 vytlačí celý súbor.

Ak sa rozhodnete obmedziť veľkosť časti údajov, s ktorými pracujete, môžete do fgets pridať argument, aby ste obmedzili maximálnu dĺžku reťazca údajov, ktoré sa zachytia. Napríklad na obmedzenie reťazca na 80 znakov použite nasledujúci kód:

$string = fgets($súbor_handle, 81);

Zapamätajte si "\0", indikátor konca riadku v C, a nastavte dĺžku na jeden znak dlhší, ako skutočne potrebujete. Ako vidíte, vyššie uvedený príklad používa 81, keď potrebujete 80 znakov. Zvyknite si pridať ďalší znak vždy, keď potrebujete pre túto funkciu nastaviť obmedzenie reťazca.

funkcia fread

Funkcia fgets je len jednou z mnohých dostupných funkcií na čítanie súboru. Toto je jedna z najčastejšie používaných funkcií, pretože spracovanie súboru po riadkoch je vo väčšine prípadov najrozumnejšie. V skutočnosti niekoľko ďalších funkcií ponúka podobné možnosti. Nech je to akokoľvek, analýza riadkov po riadkoch nie je vždy to, čo potrebujete.

A tu sa obrátime na fread. Funkcia fread sa používa na trochu iný účel ako fgets: je určená na čítanie z binárnych súborov (teda súborov, ktoré pôvodne neboli zložené z textu čitateľného pre človeka). Keďže koncept „reťazcov“ nie je relevantný pre binárne súbory (logické dátové štruktúry sa zvyčajne nerozdeľujú do riadkov), musíte zadať počet bajtov, ktoré sa majú prečítať.

$fh = fopen("myfile", "rb"); $data = fread($súbor_handle, 4096);

Vyššie uvedený príklad číta 4096 bajtov (4 KB) údajov. Všimnite si, že bez ohľadu na to, akú hodnotu zadáte, fread neprečíta viac ako 8192 bajtov (8 KB).

Za predpokladu, že súbor nie je väčší ako 8 kB, úryvok nižšie by mal prečítať celý súbor v jednom riadku.

$fh = fopen("myfile", "rb"); $data = fread($fh, veľkosť súboru("myfile")); fclose($fh);

Ak je súbor väčší, na prečítanie zvyšku budete musieť použiť slučku.

funkcia fscanf

Ak sa vrátime k spracovaniu reťazcov, fscanf je tiež nástupcom tradičnej funkcie knižnice súborov C. Ak ju nepoznáte, fscanf načíta dátové polia do premenných zo súboru.

zoznam ($pole1, $pole2, $pole3) = fscanf($fh, "%s %s %s");

Formátovacie reťazce použité v tejto funkcii sú zdokumentované v mnohých zdrojoch, ako napríklad PHP.net, takže tieto informácie tu nebudem opakovať. Stačí povedať, že formátovanie reťazcov je veľmi flexibilné. Treba tiež spomenúť, že všetky polia sú umiestnené v premennej vrátenej funkciou. (V C by boli odovzdané ako argumenty.)

funkcia fgetss

Funkcia fgetss sa líši od tradičných súborových funkcií a poskytuje vám lepšiu predstavu o možnostiach PHP. Funguje ako fgets , ale zahodí všetky nájdené značky HTML alebo PHP a ponechá len holý text. Vezmite nasledujúci súbor HTML.

Výpis 2. Vzorový súbor HTML
Môj titul

Ak pochopíte, čo znamená „Príčina, pre ktorú nie je nikto, aby vám nedal bolesť“, potom počúvate príliš veľa z kapely America



Prejdime to cez funkciu fgetss.

Výpis 3. Použitie fgetss
$file_handle = fopen("myfile", "r"); while (!feof($súbor_handle)) ( echo = fgetss($súbor_handle); ) fclose($súbor_handle);

Tu je to, čo dostanete ako výstup:

Môj názov Ak chápete, čo znamená "Príčina, pre ktorú nie je nikto, aby vám nedal bolesť", potom počúvate príliš veľa z kapely America

funkcia fpassthru

Bez ohľadu na to, ako načítate údaje zo súboru, zvyšok údajov môžete vytlačiť pomocou štandardného výstupného kanála s funkciou fpassthru.

fpassthru($fh);

Táto funkcia vytlačí údaje, takže ich nemusíte vkladať do premennej.

Nelineárne spracovanie súborov: pohyb v súbore

Vyššie opísané funkcie vám samozrejme umožňujú čítať zo súboru iba postupne. Zložitejšie súbory môžu vyžadovať presun do rôznych častí súboru na začiatku alebo na konci súboru. Na to potrebujete funkciu fseek.

fseek($fh, 0);

Vyššie uvedený príklad preskočí späť na začiatok súboru. Ak nechcete skočiť na úplný začiatok súboru - povedzte, že stačí jeden kilobajt - stačí napísať:

fseek($fh, 1024);

Od PHP V4.0 je k dispozícii aj niekoľko ďalších možností. Napríklad, ak potrebujete skočiť dopredu o 100 bajtov z vašej aktuálnej pozície, môžete použiť nasledujúci kód:

fseek($fh, 100, SEEK_CUR);

Podobne skok späť o 100 bajtov sa vykonáva takto:

fseek($fh, -100, SEEK_CUR);

Ak chcete prejsť späť na pozíciu 100 bajtov pred koncom súboru, použite namiesto toho SEEK_END.

fseek($fh, -100, SEEK_END);

Po dosiahnutí novej pozície môžete na čítanie údajov použiť fgets , fscanf alebo inú funkciu.

Poznámka: nemôžete použiť fseek na deskriptory súborov, ktoré odkazujú na URL.

Zachytenie celého súboru

Teraz sa obraciame na niektoré jedinečné možnosti spracovania súborov PHP: spracovanie veľkých blokov údajov v jednom alebo dvoch riadkoch. Ako môžete napríklad uchopiť súbor a zobraziť celý jeho obsah na svojej webovej stránke? Videli ste príklad použitia cyklu s fgets . Ako si to však uľahčiť? Tento proces je takmer smiešne jednoduchý pri použití fgetcontents , ktorý dáva celý súbor na reťazec.

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

Aj keď to nie je najlepšia možnosť, tento príkaz môžete napísať ešte kratšie:

echo file_get_contents("myfilename");

Tento článok je primárne o spracovaní lokálnych súborov, je však potrebné poznamenať, že pomocou opísaných funkcií môžete zachytávať, zobrazovať a analyzovať aj iné webové stránky.

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

Tento príkaz je v skutočnosti rovnaký ako:

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

Určite sa pozeráte na tieto príklady a hovoríte si: "Toto je stále príliš náročné na prácu." Vývojári PHP s vami súhlasia. Vyššie uvedený príkaz teda môžete skrátiť na:

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

Funkcia readfile odošle celý obsah súboru alebo webovej stránky do predvolenej výstupnej vyrovnávacej pamäte. Tento príkaz štandardne vytlačí chybové hlásenie pri zlyhaní. Ak sa chcete tomuto správaniu vyhnúť (ak ho chcete), skúste príkaz:

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

Samozrejme, ak potrebujete spracovať obsah súborov, potom jeden riadok vrátený file_get_contents je pravdepodobne príliš veľa. Možno ho budete chcieť najskôr rozdeliť pomocou funkcie split().

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

Ale prečo potrebujete všetku túto zložitosť, ak existuje dokonale vhodná funkcia, ktorá túto prácu urobí za vás? Funkcia PHP file() vykoná túto úlohu v jednom kroku: vráti pole reťazcov, ktorých prvky sú riadky súboru.

$array = file("myfile");

Je potrebné poznamenať, že medzi dvoma vyššie uvedenými príkladmi je malý rozdiel. Príkaz split odstráni nové riadky, zatiaľ čo príkaz file ukončí riadky poľa novými riadkami (rovnako ako fgets).

Schopnosti PHP však ďaleko presahujú možnosti opísané vyššie. Môžete analyzovať celé súbory .ini v štýle PHP pomocou jediného príkazu parse_ini_file. Príkaz parse_ini_file sa vzťahuje na súbory ako výpis 4.

Výpis 4. Vzorový súbor .ini
; Názov komentára = Úloha „Kráľ Artuš“ = Hľadanie svätého grálu obľúbená farba = Modrá Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Nasledujúce príkazy predstavujú súbor ako pole a potom toto pole vytlačia:

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

Výsledkom bude nasledujúci výstup:

Výpis 5. Výstup
Array ( => Kráľ Artuš => Hľadať Svätý grál => Modrá => Mark Twain => Whoopi Goldberg)

Samozrejme, môžete si všimnúť, že tento príkaz má zlúčené sekcie. Toto je predvolená akcia, ale môžete ju ľahko prispôsobiť pomocou druhého argumentu na parse_ini_file: process_sections , čo je booleovská premenná. Nastavte process_sections na hodnotu True.

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

A váš výstup bude vyzerať takto:

Výpis 6. Výstup
Pole ( => Pole ( => Kráľ Artuš => Hľadanie Svätého grálu => Modrá) => Pole ( => Mark Twain => Whoopi Goldberg))

PHP vkladá údaje do viacrozmerného poľa, ktoré sa dá ľahko analyzovať.

Ale toto je len špička ľadovca, pokiaľ ide o prácu so súbormi v PHP. Pokročilejšie funkcie ako tidy_parse_file a xml_parse vám môžu pomôcť analyzovať dokumenty HTML a XML. Viac informácií o tom, ako tieto funkcie fungujú, nájdete v časti. Oboje stojí za zváženie, ak budete pracovať s týmito typmi súborov, ale namiesto toho, aby ste si prešli všetky možné typy súborov, možno by ste sa chceli bližšie pozrieť na obsah tohto článku, kde je niekoľko dobrých všeobecných pravidlá pre prácu s funkciami, ktoré som doteraz opísal.

Dobrý štýl programovania

Nikdy nepredpokladajte, že všetko vo vašom programe bude fungovať podľa plánu. Napríklad: čo ak bol hľadaný súbor presunutý? Čo ak v dôsledku zmeny oprávnení nemôžete čítať obsah súboru? Existenciu súboru a práva na jeho čítanie môžete vopred skontrolovať pomocou metód file_exists a is_readable.

Výpis 7. Použitie file_exists a is_readable
$filename = "myfile"; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # Processing fclose($fh); )

V praxi však bude tento kúsok kódu pre vašu úlohu pravdepodobne prehnaný. Manipulácia s hodnotami vrátenými fopenom je jednoduchšia a presnejšia.

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

Keďže fopen pri zlyhaní vracia hodnotu False, zaisťuje to, že súbor bude spracovaný iba v prípade, že súbor bolo možné otvoriť. Samozrejme, ak súbor neexistuje alebo je nečitateľný, očakávali by ste, že návratová hodnota bude záporná. Preto je takáto kontrola pascou, do ktorej padajú všetky potenciálne problémy. Prípadne môžete program použiť na ukončenie alebo zobrazenie chybového hlásenia, ak sa súbor nedá otvoriť.

Podobne ako fopen, funkcie file_get_contents, file a readfile vrátia hodnotu False, ak súbor nemožno otvoriť alebo spracovať. Funkcie fgets , fgetss , fread , fscanf a fclose tiež vrátia hodnotu False pri chybe. Samozrejme, s výnimkou fclose ste už pravdepodobne spracovali výsledky, ktoré vracajú. Pokiaľ ide o fclose , nemôžete urobiť veľa, ak deskriptor súboru nie je správne zatvorený, takže kontrola návratovej hodnoty fclose je zvyčajne nadbytočná.

Výber je na tebe

PHP nemá nedostatok efektívnych spôsobov čítania a analýzy súborov. Väčšinu času vám môžu dobre poslúžiť klasické funkcie, ako je fread, alebo vás môže viac priťahovať jednoduchosť readfile, ak je to potrebné na vykonanie úlohy. Výber skutočne závisí od toho, čo sa snažíte dosiahnuť.

Ak spracovávate veľké množstvo údajov, fscanf bude pravdepodobne užitočnejší a efektívnejší ako napríklad použitie súboru v kombinácii s následnými príkazmi split a sprintf. Na druhej strane, ak práve zobrazujete veľké množstvo textu s malými zmenami, môže byť vhodnejšie použiť funkcie file , file_get_contents alebo readfile . Toto riešenie bude pravdepodobne správne pri použití PHP na ukladanie do vyrovnávacej pamäte alebo dokonca na vytvorenie dočasného proxy servera.

PHP poskytuje mnoho nástrojov na prácu so súbormi. Pozrite sa bližšie na každý z nich a zistite, ktoré nástroje sú najvhodnejšie pre projekt, na ktorom pracujete. Na výber máte zo širokej škály nástrojov, využite ich na maximum a zabavte sa pri spracovávaní súborov pomocou PHP.

PHP sa objavilo oveľa neskôr ako programovacie jazyky, posilnilo svoje pozície, formulovalo všeobecné predstavy o syntaxi, logike, premenných a iných programových objektoch. Súbory a funkcie na prácu s nimi nenapredovali a ani problém s kódovaním súborov, ktorý vznikol z prirodzených dôvodov, neviedol k radikálne novým riešeniam.

Všeobecné poznámky

Základnou prácou so súbormi, nech už sú akékoľvek, je otváranie, čítanie/zápis a zatváranie. Môžete použiť funkcie blokovania / odblokovania prístupu k súboru počas jeho spracovania, môžete nastaviť pozíciu čítania / zápisu v súbore - všetko, ako predtým, je v dávnej minulosti.

Dôležitým bodom v PHP je množstvo funkcií na prácu so súbormi a ich prípadmi použitia. V praxi stačí použiť jednoduché, ale fungujúce možnosti. Súbor je predovšetkým pamäť programu. Môže uchovávať informácie. Účelom akéhokoľvek programu, účelom akejkoľvek stránky je prezentovať, spracovávať a zaisťovať bezpečnosť informácií.

Podstatná okolnosť

Kedysi to bola neotrasiteľná požiadavka na kompatibilitu aspoň zdola nahor. To znamená, že akonáhle je program napísaný v jednej verzii programovacieho jazyka ideálne skompilovaný/interpretovaný v ďalšej verzii. V modernom programovaní to tak nie je. Požiadavka kompatibility syntaktických konštrukcií jazyka vstúpila do histórie a boj medzi štýlmi a programovacími nástrojmi a verziami určitých nástrojov sa stal normou ich života.

Práca so súbormi, podobne ako s databázami, je rovnako dôležitá ako rozhranie stránky. Prvý by mal byť zostavený tak, že keď zmeníte platformu, hosting, jazykovú verziu, nemusíte meniť kód stránky. Rozhranie pre prácu so súbormi by malo byť umiestnené v samostatnom skripte a zaisťovať plnú kompatibilitu, rovnako ako dizajn stránky by sa mal adekvátne prispôsobiť akémukoľvek zariadeniu, prehliadaču a poskytovať ostatné funkcie stránky s rovnakými možnosťami.

Prečítajte si a upravte sami

Môže sa zmeniť samotný program, teda dá sa vylepšiť skript? Dodnes táto otázka zaujíma mnohých. Úloha však znie oveľa praktickejšie: PHP čítanie súboru PHP. Nie vždy môže vývojár vyriešiť konkrétny problém napísaním špecifického kódu. Niekedy je potrebné ho zmeniť, keď návštevník prišiel na stránku a sformuloval otázku, ktorá nebola poskytnutá vo fáze vývoja.

Rovnako ako vo všetkých ostatných prípadoch je potrebné najskôr otvoriť súbor. Nezáleží na tom, či súbor existuje alebo nie. Ak je známe, že súbor existuje (file_exists() vráti kladnú odpoveď), použije sa fopen() s prístupom 'r', 'r+', 'a', 'a+'. Ak súbor ešte neexistuje, potom s prístupom 'a', 'a+', 'w', 'w+'. Výsledkom otvorenia súboru bude jeho deskriptor. Súbor sa uzavrie funkciou fclose().

Je vhodné použiť PHP na čítanie súboru do poľa, keď nie je potrebné ho spracovávať v čase čítania.

if (file_exists($fName)) (

$aLines = súbor($fName)

V tomto variante každý riadok súboru vstupuje do prvku poľa postupne. Všimnite si, že funkcie file() alebo file_get_contents() nemusia otvárať súbor a zatvárať ho.

Keď je vstupný súbor príliš veľký a potrebujete nájsť veľmi málo informácií, alebo z iných dôvodov, môžete použiť PHP na čítanie súboru riadok po riadku. PHP poskytuje možnosť to urobiť pomocou funkcií fgets() a fgetc().

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

while ((false !== ($cLine = fgets($fvs, 2000)))) (

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

Obe možnosti fungujú bezchybne. Keď však PHP načítava súbor PHP na neskoršie úpravy, je potrebné prijať preventívne opatrenia. Zďaleka nie je vždy možné predvídať možnosti jeho použitia návštevníkom vo fáze vývoja stránky. Je lepšie, ak sa skripty menia v rámci funkcií stránky a správa tejto zmeny nie je pre návštevníka vrátane správcu zdroja dostupná.

Ukladanie výsledkov

Prijaté a aktualizované informácie zapisuje do súboru funkcia fputs() riadok po riadku alebo funkcia file_put_contents() ako celok.

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

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

kŕdeľ ($fvs, LOCK_EX)

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

fputs($fvs, $cline)

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

fputs($fvs, $cline)

kŕdeľ ($fvs, LOCK_UN)

Vo verzii záznamu riadok po riadku môžete počas procesu záznamu manipulovať s údajmi, v druhom prípade sa zapisovaný reťazec alebo pole umiestni do celého súboru.

$file = "scData.php"

$cContents = file_get_contents($file)

// pridanie záznamu

$cContents .= "nový záznam\n"

// zápis súboru späť

file_put_contents($file, $cContents)

Čítanie a písanie súborov PHP je jednoduché a prirodzené. Je však dôležité mať na pamäti, že každý súbor má názov, príponu a cestu (priečinok). Aby PHP skript mohol čítať a zapisovať súbory, musí mať tento skript príslušné práva. Automaticky sú vystavené na hostingu, no v niektorých prípadoch je potrebné ich rozšíriť.

V niektorých prípadoch je žiaduce skontrolovať výsledky vykonaním testu. Zápis súborov PHP to vyžaduje v čase vývoja, ale v niektorých prípadoch je v záujme bezpečnosti alebo dôveryhodnosti lokality nevyhnutná validácia zadávaných údajov.

Charakteristickým rysom PHP, MySQl, JavaScriptu a najmä prehliadačov: potichu nechať unášať niektoré chyby. „Nerozpoznané, nevyrobené...“ nie je veľmi dobrou praxou v najnovších informačných technológiách, ale učí vývojárov nerobiť chyby a písať čistý a kvalitný kód, čo tiež nie je zlé.

PHP a práca s reálnymi dokumentmi

PHP Čítanie súboru PHP je určite praktické, ale toto je oblasť programovania. Používateľa a návštevníka stránky zaujímajú aplikované informácie, ktoré je zvyknutý vidieť vo forme tabuliek a dokumentov, najmä vo formátoch *.xlsx a *.docx. Ide o súbory MS Excel a MS Word.

Zoznamy tovaru, cien, charakteristík sú zvyčajne tvorené vo forme tabuliek, takže PHP čítanie súboru Excel je nevyhnutné.

Na prácu s takýmito súbormi boli vyvinuté knižnice PHPExcel a PHPWord. Obsah súborov *.xlsx a *.docx je však prezentovaný v štandarde OOXML, to znamená, že skutočný zrozumiteľný dokument predstavuje archív zip. Zip archív je súbor súborov, vrátane obrázkov, objektov, vzorcov, príloh z iných programov. Textové súbory sú tu reprezentované popismi vo forme značiek. Čítanie takéhoto súboru nestačí, musíte ho analyzovať, aby ste získali obsah a štruktúru na použitie a úpravu.

To znamená, že operácia čítania sa zmení na procedúru otvárania archívu. Tieto knižnice samy otvárajú archív dokumentov a poskytujú vývojárovi rozsiahle funkcie na čítanie, spracovanie a písanie takýchto dokumentov.

Excelové tabuľky

include_once 'PhpOffice/PhpExcel/IOFactory.php'

funkcia scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//toto pole obsahuje polia reťazcov

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//liečba

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

$cellIterator = $row->getCellIterator()

foreach($cellIterator ako $cell)(

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

array_push($pole, $položka)

Čítanie a spracovanie súborov programu Excel je oveľa náročnejšie ako spracovanie dokumentov programu Word. Najlepšou možnosťou, ak potrebujete implementovať seriózny projekt na čítanie a spracovanie informácií o aplikácii, je najprv zvládnuť knižnicu PHPWord. To poskytne dobrú skúsenosť a rýchly vstup do špecifík problematiky.

Dokumenty programu Word

Len dva riadky:

$oWord = nový \PhpOffice\PhpWord\PhpWord()

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

Dokument $cFileName je teraz k dispozícii na spracovanie. Ďalej sa otvorí archív, vyberie sa a analyzuje sa jeho obsah, ktorý je možné zobraziť na stránke, zmeniť a zapísať.

$zipClass = nový archív ZipArchive()

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

// prečítať celý obsah dokumentu

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

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

$cNameInExt = substr($cNameIn, -4)

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

// súbory s príponami ".xml" a ".xml.rels" sú uložené v tabuľke dokumentov

// každý xml riadok je napísaný s jedinečným sériovým číslom

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

$cBodyInLen = strlen($cBodyIn)

// všetky ostatné súbory sa zapíšu do priečinka dokumentov tak, ako sú

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

$zipClass->getFromName($cNameIn, $cWorkPath); // obsah ako súbor

Možnosti, ktoré sa otvárajú pomocou PHP Excelu a PHP Wordu, vám umožňujú manipulovať so skutočnými dokumentmi, urobiť ich obsah relevantný v akomkoľvek danom čase. V dnešnom dynamickom svete je to veľmi dôležité. Ťažisko sa už dávno presunulo z lokálneho využívania výpočtovej techniky do virtuálneho internetového priestoru. Vytváranie tabuliek a dokumentov v lokálnych produktoch od spoločnosti Microsoft je preto menej efektívne ako práca s takýmito dokumentmi v automatickom a poloautomatickom režime na stránke, ktorá je dostupná nielen pre tvorcov tabuľky alebo dokumentu, ale aj pre ich spotrebiteľov. .

Textové súbory, iný život

Na prvý pohľad sú textové súbory jednoduchšie ako súbory PHP alebo aplikačné dokumenty. Je tu však o čom premýšľať. Operácie čítania/zápisu takýchto súborov sú už uvedené vyššie, ale význam takýchto súborov je oveľa dôležitejší.

Keďže existuje taká danosť ako klient a server (JavaScript dominuje prvému, PHP dominuje druhému), potom ani mechanizmy cookie a sessions nedokážu zvládnuť potrebu prenosu informácií medzi skriptami, stránkami alebo inými procesmi.

Požadované zmeny je možné premietnuť do databázy, no napriek všetkým svojim výhodám a rýchlosti môžu byť malé dočasné alebo trvalé textové súbory oveľa zaujímavejšou možnosťou prenosu informácií. Ak nevytvárate veľa malých súborov a nekontrolujete ich veľkosť, môžu byť špecifickou a flexibilnejšou verziou databázy.

PHP čítanie textového súboru je rýchle, možno ho okamžite analyzovať do štruktúry, poľa alebo objektu. To druhé je veľmi dôležité, pretože umožňuje vytvárať objekty, ktoré žijú mimo času vyhradeného PHP skriptu, ktorý, ako viete, môže existovať iba na serveri a iba v čase načítania stránky, generovania odpovede AJAX alebo z akéhokoľvek iného dôvodu, ktorý spôsobí spustenie interpretera PHP.

Ak sa zamyslíte nad tým, že textový súbor je obsah a štruktúra od vývojára, súbor PHP je syntax interpreta plus logika vývojára a „tagované“ popisy html, css, xml sú viac sémantické prvky, ale regulované podľa statických noriem. Možno dospieť k záveru, že je pravdepodobne čas, aby súbory získali nový obsah, a to by malo samo určovať ich kvalitu a aplikačnú logiku. Práve preto, že programovanie ešte nie je pripravené na ďalšiu etapu svojho vývoja, súbory sú už len súbory, ktoré vývojár vytvorí a definuje ich použitie.

Najzaujímavejšia a najsľubnejšia vec je, keď PHP v prípade potreby prečíta súbor PHP sám. A jednoduché prečítanie riadku zo súboru v PHP má za následok vytvorenie objektu, aspoň v stave, v akom bol uložený. Nie sú to celkom známe nápady, ale v modernom svete sa všetko tak rýchlo mení.

16,5 tis

V skutočnosti, ako otvoriť súbor php, nie je veľký problém. Keď ste uprostred lesa, môže byť ťažšie otvoriť fľašu piva. Myslia si to však iba zanietení programátori. A pre začiatočníkov si povedzme o všetkých funkciách php pre prácu so súbormi:

php súbory

Súbory s príponou php obsahujú kód napísaný v rovnomennom programovacom jazyku. Na rozdiel od iných jazykov je php programovací jazyk na strane servera. To znamená, že beží na strane servera. Preto na ladenie jeho kódu musí byť na klientskom počítači nainštalovaný lokálny server.

Na prácu s php súbormi sa používajú špeciálne aplikácie - programové editory. Najbežnejšie z nich sú:

  • dreamweaver.
  • Upraviť.
  • Vývoj Eclipse PHP.
Pri vytváraní stránok založených na php môže byť potrebné znova použiť programový kód. V takýchto situáciách je vhodné zahrnúť hotové riešenia umiestnené v inom súbore. Na tento účel sa používa konštrukcia include. Jeho syntax je:

zahrnúť názov súboru

Príklad pripojenia:

Pripojený súbor:


Zahrnutie súboru je tiež možné pomocou konštrukcie require. Na rozdiel od include obsahuje súbor ešte pred spustením programového kódu. Pomocou požiadavky v kóde je možné len jedno volanie tohto súboru. Pri opakovanom prístupe systém zobrazí globálnu chybovú správu a zastaví vykonávanie programu.

Konštrukcia include spája zdroj iba počas vykonávania programu. Podporuje viacnásobné čítanie súboru php. Ak sa vyskytne chyba, zobrazí sa iba varovné hlásenie a vykonávanie kódu bude pokračovať od ďalšieho riadku.

Otváranie a zatváranie súborov

V php sa všetky operácie so súbormi vykonávajú v niekoľkých fázach:

  • Otvorenie súboru;
  • Úprava obsahu;
  • Zatvorenie súboru.

Funkcia fopen() sa používa na otvorenie súboru. Jeho syntax je:

int fopen(reťazec názov súboru, režim reťazca [, int use_include_path])

Akceptované argumenty:

  • string filename – názov súboru alebo absolútna cesta k nemu. Ak cesta k súboru nie je zadaná, bude sa hľadať v aktuálnom adresári. Ak hľadaný súbor neexistuje, systém zobrazí chybové hlásenie. Príklad:

  • string mode - určuje režim otvárania súboru. Hodnoty akceptované argumentom:
  • r - súbor je otvorený len na čítanie, ukazovateľ súboru je nastavený na začiatku;
  • r+ – súbor je otvorený na čítanie a zápis;
  • w - Vytvorí nový súbor len na zápis. Ak súbor s rovnakým názvom už existuje, automaticky vymaže všetky údaje;
  • w+ - vytvorí nový súbor na zápis a čítanie. Ak takýto súbor existuje, jeho údaje sa úplne prepíšu novými;
  • a - súbor je otvorený na zápis. Ukazovateľ je nastavený na koniec. To znamená, že zápis do súboru php nezačne od začiatku, ale od konca;
  • a+ - otvorenie súboru v režime čítania a zápisu. Nahrávanie sa spustí od konca;
  • b – režim práce so súborom obsahujúcim binárne dáta (v dvojkovej sústave). Tento režim je dostupný len v operačnom systéme Windows.

Funkcia fclose() sa používa na zatvorenie prístupu k súboru. Syntax:

int fclose (súbor int) , kde súbor int je popisovač lokality, ktorá sa má zatvoriť.

Po každom čítaní alebo zápise je potrebné súbor zatvoriť pomocou tejto funkcie. V opačnom prípade zostane prúd vytvorený pre súbor otvorený. A to vedie k zbytočnej spotrebe kapacity servera.

Príklad:

Čítanie a zápis súborov

Na jednoduché zobrazenie celého obsahu súboru je ideálna funkcia readfile(). Jeho syntax je:

readfile (reťazec názov_súboru) , kde reťazec názov_súboru je reťazec názvu súboru (nie deskriptor súboru).


Rovnaký súbor je možné prečítať pomocou funkcie fpassthru(). Číta dáta od koncovej polohy ukazovateľa až po koniec súboru. Jeho syntax je:

int fpassthru (súbor int)

Ak chcete s funkciou pracovať, musíte súbor otvoriť a zatvoriť. Príklad:

Výsledok je podobný predchádzajúcemu.

Funkcie súboru php vám umožňujú čítať obsah riadok po riadku a znak po znaku:

  • string fgets (súbor int, dĺžka int)– funkcia číta reťazec dĺžky length . Príklad:

  • reťazec fread (súbor int, dĺžka int)- akcia je totožná s predchádzajúcou.

Na zapisovanie textových údajov do súboru existujú dve rovnaké funkcie:

  • int fputs (súbor int, reťazec [, dĺžka int ])
  • int fwrite (súbor int, reťazec [, dĺžka int ])

Funkcie zapisujú do súboru int reťazec reťazec reťazec zadanej dĺžky int dĺžky ( voliteľný argument). Príklad:

Vytváranie a odstraňovanie súborov

Na vytvorenie súboru php môžete použiť funkciu fopen() v režime prístupu „w“ alebo „w+“. Alebo funkcia touch(). Nastavuje čas úpravy súboru. Ak neexistuje žiadny prvok s hľadaným názvom, vytvorí sa. Jeho syntax.




Hore