Počítače Okna Internet

Php přečetl řádek ze souboru. Práce se soubory v php: otevírání, zápis, čtení. Soubory: provozní režimy

PHP

file_exists ("test.txt") // Existuje soubor? velikost souboru ("test.txt"); // Zjistěte velikost souboru // Vraťte časové razítko: fileatime ("test.txt"); // Datum posledního přístupu k souboru // datum ("d MY ", $ čas); filemtime ("test.txt"); // Datum úpravy souboru // datum ("d M Y", $ mtime); filectime ("test.txt"); // Datum vytvoření souboru (Windows) // datum ("d M Y", $ ctime);

Soubory: provozní režimy

PHP

resource fopen (řetězcový název souboru, režim řetězce) // resource - při úspěchu vrátí ukazatel na soubor nebo při chybě FALSE
Pracovní doba Popis
r otevřít soubor jen pro čtení;
r + otevřít soubor pro čtení a zápis;
w otevřít soubor pouze pro zápis. Pokud existuje, bude aktuální obsah souboru zničen. Aktuální pozice je nastavena na začátek;
w + otevřete soubor pro čtení a zápis. Pokud existuje, bude aktuální obsah souboru zničen. Aktuální pozice je nastavena na začátek;
A otevřete soubor pro zápis. Aktuální pozice je nastavena na konec souboru;
a + otevřete soubor pro čtení a zápis. Aktuální pozice je nastavena na konec souboru;
b zpracovat binární soubor. Tento příznak je vyžadován při práci s binárními soubory ve Windows.

Otevírání a zavírání souborů v PHP

PHP

$ fi = fopen ("test.html", "w +") nebo zemřít ("Chyba"); // Příklady $ fi = fopen ("http://www.you/test.html", "r"); $ fi = fopen ("http://ftp.you/test.html", "r"); // Zavřít fclose ($ fi)

Čtení souborů v PHP

PHP

// Přečtení souboru fread (int fi, délka int) $ str = fread ($ fi, 5); // Přečte prvních 5 znaků echo $ str; // od přesunu kurzoru $ str = fread ($ fi, 12); // Přečte dalších 12 znaků echo $ str; fgets (int fi [, délka int]) // Čtení řádku ze souboru fgetss (int fi, délka int [, povolený řetězec]) // Čtení řádku ze souboru a vyřazení značek HTML // povolený řetězec - značky, které musí být ponecháno fgetc (int fi) // Přečte znak ze souboru

Zpočátku dojde k zápisu na začátek souboru přepsáním existujících dat, pokud existují. Pokud tedy potřebujete něco zapsat na konec souboru, musíte nastavit odpovídající režim čtení například +.

Manipulace s kurzorem v souborech PHP

PHP

int fseek (int fi, int offset [, int odkud]) // Nastavení kurzoru // int fi - ukazatel na soubor // offset - počet znaků, které se mají přesunout. // odkud: // SEEK_SET - pohyb začíná od začátku souboru; // SEEK_CUR - pohyb začíná z aktuální pozice; // SEEK_END - pohyb začíná od konce souboru. fseek ($ fi, -10, SEEK_END); // Přečtení posledních 10 znaků $ s = fread ($ fi, 10); $ pos = ftell ($ fi); // Zjistěte aktuální pozici zpět ($ f) // reset kurzoru bool feof ($ f) // konec souboru

Práce se soubory (daty) přímo v PHP

PHP

soubor pole (soubor souboru řetězce) // Získání obsahu souboru jako pole // Další možnost pro přímou práci s daty file_get_contents (soubory řetězce) // Čtení (celý soubor dostaneme na jeden řádek) // Zápis do souboru (původně přepsáno) file_put_contents (řetězec název_souboru, smíšená data [, příznak int]); // FILE_APPEND // Zápis na konec souboru: file_put_contents ("test.txt", "data", FILE_APPEND); // Pokud napíšeme pole, $ array = array ("I", "live"); file_put_contents ("test.txt", $ pole); // pak dostaneme "Živý"

Správa souborů php

PHP

kopírovat (zdroj řetězce, cíl řetězce); // Zkopírujte přejmenování souboru (str oldname, str newname); // Přejmenujte soubor unlink (string filename); // Smazat soubor

Nahrávání souborů na PHP server

// Nastavení PHP.ini file_uploads (zapnuto | vypnuto) // povolit Zakázat nahrávání souborů upload_tmp_dir // dočasná složka pro nahrané soubory. výchozí dočasná složka upload_max_filesize (výchozí = 2 Mb) // max. velikost nahraného souboru post_max_size // celková velikost odeslaného formuláře (musí být větší než upload_max_filesize) // Jednoduché nahrání

Html

Pracujeme se soubory na serveru

PHP

// Příjem dat $ tmp = $ _FILES ["userfile"] ["tmp_name"]; $ name = $ _FILES ["soubor uživatele"] ["jméno"]; // Přesunutí souboru move_uploaded_file ($ tmp, name); move_uploaded_file ($ tmp, "nahrát /". název); // přesměrování souboru do složky pro nahrávání // vzhledem k aktuálnímu souboru // Co je v poli $ _FILES $ _FILES ["userfile"] ["name"] // název souboru, například test.html $ _FILES [ "userfile"] [" tmp_name "] // název dočasného souboru (cesta) $ _FILES [" userfile "] [" velikost "] // velikost souboru $ _FILES [" userfile "] [" typ "] // typ souboru $ _FILES [" userfile "] ["error"] // 0 - žádné chyby, počet - ano

Při studiu tohoto tématu mějte na paměti, že některé funkce PHP používají pro přístup k souboru deskriptor souboru, zatímco jiné používají cestu k souboru.

Čtení ze souboru

Funkci fread () lze použít k načtení určitého množství dat ze souboru.

fread (soubor, délka)

Možnosti:

soubor - deskriptor souboru

délka - velikost dat v bajtech

Pokud je konec souboru dosažen dříve, než funkce přečte zadanou velikost dat, vrátí menší řetězec. Tato funkce užitečné pro čtení binárních souborů.

Při zadávání délky řetězce a při pohybu ukazatele je třeba vzít v úvahu, že ruská písmena nemají velikost jeden bajt, ale více. Další informace najdete v části Práce s řetězci. Také nezapomeňte, že na začátku souboru s kódováním UTF-8 je několik bajtů. V kódování UTF-8 bez kusovníku tyto bajty chybí.

Pojďme si přečíst prvních 10 bajtů ze souboru myfile.txt. Otevřeme jej v režimu "r +". Ukazatel bude na začátku.

$ soubor = fopen ("mujsoubor.txt", "r +"); $ take = fread ($ soubor, 10); echo $ vzít;

Pokud soubor obsahuje ruská písmena, může být poslední písmeno zobrazeno nesprávně. Je to proto, že znak má velikost více než jeden bajt a jedna část byla přečtena a druhá ne.

Funkce fgets () vrací jeden řetězec počínaje ukazatelem na konec řetězce.

fgets (soubor, délka)

Možnosti:

soubor - deskriptor souboru

délka - umožňuje zadat velikost řetězce v bajtech. Navíc, pokud je dosaženo konce řádku, další řádek není zahrnut do výsledku funkce, i když je řádek kratší než zadaná délka. Volitelný parametr.

Pokud není zadána žádná délka, pak ve starších verzích PHP byla maximální délka vráceného řetězce omezena. Novější verze toto omezení nemají.

Spuštění funkce ve smyčce vám umožní číst soubor řádek po řádku.

Přečteme jeden řádek ze souboru myfile.txt. Vzhledem k tomu, že ukazatel již byl přesunut, nebude načten celý řádek, ale z ukazatele.

$ take = fgets ($ soubor); echo"
". $ vzít;

Funkce fgetss () také vrací jeden řetězec, ale odstraňuje z něj HTML tagy. Pokud je v kódu přítomen PHP skript, bude také odstraněn.

fgetss (soubor, délka, požadované značky)

Možnosti:

soubor - deskriptor souboru

délka - velikost řetězce v bajtech. Volitelný parametr.

požadované značky - umožňuje určit značky, které nebudou smazány.

Existuje funkce fgetc (), která vrací jeden znak ze souboru.

Funkce file () načte celý soubor a vloží data do pole. Každý řádek je umístěn do prvku pole. Aby tato funkce fungovala, nemusíte otevírat soubor. Umístění ukazatele je ignorováno.

soubor (cesta k souboru, příznaky, kontext)

Možnosti:

cesta k souboru - absolutní nebo relativní cesta k souboru

příznaky - příznaky, které určují, jak funkce funguje. Volitelný parametr.

kontext - umožňuje zadat kontextový zdroj

Můžete zadat následující příznaky:

FILE_USE_INCLUDE_PATH - umožňuje vyhledat soubor ve složkách cesty pro začlenění.

FILE_IGNORE_NEW_LINES – odstraní znak konce řádku. Pokud tento příznak není nastaven, bude na každém řádku znak konce řádku.

FILE_SKIP_EMPTY_LINES - nepřidává do pole prázdné řádky.

Pokud je zadáno více příznaků, jsou odděleny operátorem "|".

Zobrazme na stránce soubor myfile.txt.

$ ar = soubor ("myfile.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); echo"
"; print_r ($ ar);

Zapsat do souboru

Funkce fwrite () zapisuje data do souboru.

fwrite (soubor, data, délka)

Možnosti:

soubor - deskriptor souboru

data – data, která se zapisují

délka - maximální velikost zapisovaných dat v bajtech. Nelze zapsat celý řádek, ale pouze zadaný počet bajtů. Volitelný parametr.

Pokud je ukazatel na začátku nebo uprostřed souboru, funkce nahradí znaky v souboru novými. To znamená, že pokud je napsáno 5 znaků, pak se 5 znaků ze souboru odstraní a na jejich místo se přidají nové.

Když píšete ruská písmena, kódování skriptu musí odpovídat kódování souboru.

Do souboru napíšeme řádek „text ze skriptu“. V našem příkladu je deskriptor uprostřed souboru a tam se zapíše řádek. Když potřebujete přidat data na konec souboru, můžete jej otevřít v režimu „a“. A když je třeba soubor přepsat, otevře se v režimu "w". Ukazatelem nepohneme, data zapíšeme tam, kde jsou.

$ text = "text ze skriptu"; fwrite ($ soubor, $ text);

Použití funkcí fopen, fclose, feof, fgets, fgetss a fscanf

Pojďme si vyjmenovat všechny možnosti

Jednou z výhod práce s moderními programovacími jazyky, jako je PHP, je obrovské množství dostupných funkcí. PHP mohlo snadno převzít motto Perlu: „Existuje několik způsobů, jak něco udělat“, zejména pokud jde o práci se soubory. Ale s množstvím dostupných finančních prostředků vyvstává otázka, který z nich je nejlepší pro provedení práce. Ve skutečnosti samozřejmě odpověď na tuto otázku závisí na tom, jaké cíle si při zpracování souboru stanovíte, takže naučit se všechny funkce jazyka stojí za to.

Tradiční fopen metody

Metody fopen možná znají programátoři v C a C++ ze starých časů, protože jsou to ve větší či menší míře přesně ty nástroje, které vám byly na dosah ruky po mnoho let, pokud jste s tímto programováním pracovali. jazyky. Pro kteroukoli z těchto metod postupujte podle standardního postupu, pomocí fopen otevřete soubor, pomocí funkce načtete data a poté fclose soubor zavřete, jak je znázorněno ve výpisu 1.

Výpis 1. Otevření a čtení souboru pomocí fgets
$ file_handle = fopen ("myfile", "r"); while (! feof ($ file_handle)) ($ line = fgets ($ file_handle); echo $ line;) fclose ($ file_handle);

I když jsou tyto funkce většině zkušených programátorů známé, dovolte mi analyzovat, jak fungují. Ve skutečnosti postupujete takto:

  1. Otevřete soubor. $ file_handle ukládá odkaz na samotný soubor.
  2. Zkontrolujte, zda jste dosáhli konce souboru.
  3. Pokračujte ve čtení souboru, dokud se nedostanete na konec, vytiskněte každý přečtený řádek.
  4. Zavřete soubor.

S ohledem na to projdu všechny zde použité souborové funkce.

Funkce fopen

Funkce fopen vytvoří odkaz na soubor. Říkám „připojí“, protože kromě otevření souboru může fopen také otevřít adresu URL:

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

Tento řádek kódu vytváří odkaz na výše uvedenou stránku a umožňuje vám ji začít číst jako místní soubor.

Poznámka: Parametr "r" použitý ve fopen označuje, že soubor je otevřen jen pro čtení. Protože zápis do souboru je nad rámec tohoto článku, nebudu uvádět všechny možné hodnoty parametru. Musíte však změnit „r“ na „rb“, pokud čtete z binárních souborů pro kompatibilitu mezi platformami. Příklad tohoto typu bude uveden níže.

Funkce Feof

Příkaz feof určuje, zda bylo provedeno čtení až do konce souboru, a vrací hodnotu True nebo False. Smyčka uvedená v pokračuje až do konce souboru "myfile." Všimněte si, že feof také vrací False, pokud čtete URL a vypršel časový limit připojení, protože již nejsou k dispozici žádná data ke čtení.

Funkce Fclose

Přeskočte střed výpisu 1 a přejděte na konec; fclose dělá opak fopen: zavře připojení k souboru nebo URL. Po provedení této funkce již nebudete moci číst ze souboru nebo soketu.

Funkce Fgets

Vrátíme-li se o několik řádků zpět ve výpisu 1, jste přímo u srdce procesu zpracování souboru: přímé čtení souboru. Funkce fgets je vaší "zbraní" pro první příklad. Vezme řádek dat ze souboru a vrátí je jako řetězec. Odtud můžete data vydávat nebo je jinak zpracovávat. Příklad ve výpisu 1 vytiskne celý soubor.

Pokud se rozhodnete omezit velikost části dat, na kterých pracujete, můžete přidat argument do fgets, abyste omezili maximální délku zachyceného datového řádku. Například pomocí následujícího kódu omezte délku řetězce na 80 znaků:

$ string = fgets ($ file_handle, 81);

Myslete na "\ 0", konec řádku v C, a nastavte délku na jeden znak více, než ve skutečnosti potřebujete. Jak vidíte, výše uvedený příklad používá 81, zatímco vy potřebujete 80 znaků. Zvykněte si přidat další znak, kdykoli potřebujete nastavit limit délky řetězce pro danou funkci.

Funkce Fread

Funkce fgets je pouze jednou z mnoha funkcí dostupných pro čtení souboru. Jedná se o jednu z nejčastěji používaných funkcí, protože zpracování souboru po řádcích je ve většině případů nejrozumnější. Ve skutečnosti několik dalších funkcí nabízí podobné možnosti. Analýza řádek po řádku však není vždy to, co chcete.

A tady se obracíme ke strachu. Funkce fread se používá k trochu jinému účelu než fgets: je určena ke čtení z binárních souborů (tedy souborů, které nejsou původně čitelným textem). Vzhledem k tomu, že koncept „řetězců“ není pro binární soubory relevantní (logické datové struktury se obvykle nerozdělují na řádky), musíte zadat počet bajtů ke čtení.

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

Výše uvedený příklad přečte 4096 bajtů (4 KB) dat. Všimněte si, že bez ohledu na hodnotu, kterou zadáte, fread nepřečte více než 8192 bajtů (8 kB).

Za předpokladu, že soubor není větší než 8 kB, měl by fragment kódu níže přečíst celý soubor na jednom řádku.

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

Pokud je soubor větší, budete muset ke čtení zbytku souboru použít smyčku.

Funkce Fscanf

Vrátíme-li se k řádkovému zpracování, všimněte si, že fscanf je také nástupcem tradiční funkce knihovny C založené na souborech. Pokud s ní nejste obeznámeni, fscanf čte datová pole do proměnných ze souboru.

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

Formátovací řetězce použité v této funkci jsou zdokumentovány v mnoha zdrojích, jako je PHP.net, takže tyto informace zde nebudu opakovat. Stačí říci, že formátování řetězců je velmi flexibilní. Je třeba také zmínit, že všechna pole jsou umístěna v proměnné vrácené funkcí. (V C by byly předány jako argumenty.)

Funkce Fgetss

Funkce fgetss se liší od tradičních souborových funkcí a poskytuje vám lepší představu o tom, co PHP umí. Funguje jako fgets, ale odstraní všechny HTML nebo PHP tagy, se kterými se setká, a ponechá pouze „holý“ text. Vezměme si níže uvedený soubor HTML.

Výpis 2. Ukázkový soubor HTML
Můj titul

Pokud rozumíte tomu, co znamená „Příčina, že tu není“, aby vám nikdo nezpůsobil bolest, pak posloucháte příliš mnoho z kapely America

Proveďme to funkcí fgetss.

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

Zde je to, co získáte jako výstup:

Můj název Pokud rozumíte tomu, co znamená „Příčina neexistuje“, aby vám nikdo nezpůsobil bolest, pak posloucháte příliš mnoho z kapely America

Funkce Fpassthru

Bez ohledu na to, jak čtete data ze souboru, můžete zbývající data vytisknout pomocí standardní výstupní roury pomocí funkce fpassthru.

fpassthru ($ fh);

Tato funkce vytiskne data, takže je nemusíte vkládat do proměnné.

Nelineární zpracování souborů: pohyb v souboru

Výše uvedené funkce vám samozřejmě umožňují číst ze souboru pouze postupně. Složitější soubory mohou vyžadovat přesunutí do různých částí souboru na začátku nebo na konci. K tomu potřebujete funkci fseek.

fseek ($ fh, 0);

Výše uvedený příklad přeskočí zpět na začátek souboru. Pokud se nechcete přesouvat na úplný začátek souboru – řekněme jeden kilobajt stačí – jednoduše napíšete:

fseek ($ fh, 1024);

Od PHP V4.0 je k dispozici také několik dalších možností. Pokud například potřebujete skočit dopředu o 100 bajtů ze své aktuální pozice, můžete použít následující kód:

fseek ($ fh, 100, SEEK_CUR);

Podobně skok zpět o 100 bajtů se provádí:

fseek ($ fh, -100, SEEK_CUR);

Pokud chcete přejít zpět na 100 bajtů před koncem souboru, použijte místo toho SEEK_END.

fseek ($ fh, -100, SEEK_END);

Jakmile dosáhnete své nové pozice, můžete ke čtení dat použít fgets, fscanf nebo jinou funkci.

Poznámka: nemůžete použít fseek na deskriptory souborů odkazující na URL.

Zachycení celého souboru

Nyní se podíváme na některé jedinečné možnosti práce se soubory PHP: zpracování velkých bloků dat v jednom nebo dvou řádcích. Jak můžete například uchopit soubor a zobrazit veškerý jeho obsah na své webové stránce? No, viděli jste příklad použití smyčky s fgets. Ale jak si to můžete usnadnit? Tento proces je téměř směšně jednoduchý s fgetcontents, který dává celý soubor na řetězec.

$ my_file = file_get_contents ("myfilename"); echo $ můj_soubor;

Ačkoli to není nejlepší volba, můžete tento příkaz napsat ještě kratší:

echo file_get_contents ("myfilename");

Tento článek je primárně o práci s místními soubory, nicméně stojí za zmínku, že pomocí popsaných funkcí můžete také zachytit, zobrazit a analyzovat další webové stránky.

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

Tento příkaz je ve skutečnosti stejný jako:

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

Určitě se díváte na tyto příklady a říkáte si: "Je to stále příliš časově náročné." Vývojáři PHP s vámi souhlasí. Proto můžete výše uvedený příkaz zkrátit na:

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

Funkce readfile standardně zapisuje celý obsah souboru nebo webové stránky do výstupní vyrovnávací paměti. Ve výchozím nastavení tento příkaz zobrazí chybovou zprávu při selhání. Chcete-li se tomuto chování vyhnout (pokud jej chcete), vyzkoušejte příkaz:

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

Samozřejmě, pokud potřebujete zpracovat obsah souborů, pak je jeden řádek vrácený file_get_contents pravděpodobně příliš. Možná jej budete chtít nejprve rozdělit na části pomocí funkce split ().

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

Ale proč potřebujete všechny tyto komplikace, pokud existuje dokonale vhodná funkce, která tuto práci udělá za vás? Funkce PHP file () to dělá v jednom kroku: vrací pole řetězců, jehož prvky jsou řetězce souboru.

$ pole = soubor ("mujsoubor");

Je třeba poznamenat, že mezi dvěma výše uvedenými příklady je nepatrný rozdíl. Příkaz split odstraňuje nové řádky, zatímco příkaz file končí novými řádky (stejně jako u fgets).

Možnosti PHP však dalece přesahují výše popsané. Můžete analyzovat celé soubory .ini ve stylu PHP pomocí jediného příkazu parse_ini_file. Příkaz parse_ini_file se vztahuje na soubory podobné těm ve výpisu 4.

Výpis 4. Příklad souboru .ini
; Jméno komentáře = Úkol "Král Artuš" = Hledání svatého grálu oblíbená barva = Modrá Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Následující příkazy představují soubor jako pole a poté toto pole vytisknou:

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

Tím vznikne následující výstup:

Výpis 5. Výstup
Array (=> Král Artuš => Hledat Svatý grál => Modrá => Mark Twain => Whoopi Goldberg)

Samozřejmě můžete vidět, že tento příkaz má sloučené sekce. Toto je výchozí nastavení, ale potřebné úpravy můžete snadno provést pomocí druhého argumentu parse_ini_file: process_sections, což je booleovská proměnná. Nastavte process_sections na hodnotu True.

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

A váš výstup bude vypadat takto:

Výpis 6. Výstup
Array (=> Array (=> Král Artuš => Hledat Svatý grál => Modrá) => Array (=> Mark Twain => Whoopi Goldberg))

PHP umísťuje data do vícerozměrného pole, které lze snadno analyzovat pro analýzu.

Ale to je jen špička ledovce, pokud jde o práci se soubory v PHP. Složitější funkce, jako je tidy_parse_file a xml_parse, vám mohou pomoci analyzovat dokumenty HTML a XML. Další informace o tom, jak tyto funkce fungují, naleznete v části. Obojí stojí za to se podívat, pokud pracujete s těmito typy souborů, ale místo toho, abyste se podívali na všechny možné typy souborů, můžete si pozorně přečíst obsah tohoto článku, kde jsou některá dobrá obecná pravidla pro práci s funkcemi, které mám dosud popsané.

Dobrý styl programování

Nikdy nepředpokládejte, že vše ve vašem programu bude fungovat tak, jak bylo zamýšleno. Například: co když byl hledaný soubor přesunut? Co když v důsledku změny oprávnění nemůžete číst obsah souboru? Existenci souboru a oprávnění k jeho čtení můžete předem zkontrolovat pomocí metod file_exists a is_readable.

Výpis 7. Použití file_exists a is_readable
$ název_souboru = "mujsoubor"; if (file_exists ($ filename) && is_readable ($ filename)) ($ fh = fopen ($ filename, "r"); # Zpracování fclose ($ fh);)

V praxi však bude tento kus kódu pro váš úkol možná přehnaný. Manipulace s hodnotami vrácenými fopenem je jednodušší a přesnější.

if ($ fh = fopen ($ název souboru, "r")) (# Zpracování fclose ($ fh);)

Protože fopen při selhání vrací False, zajišťuje to, že soubor bude zpracován pouze v případě, že lze soubor otevřít. Samozřejmě, pokud soubor neexistuje nebo je nečitelný, očekáváte, že vrácená hodnota bude záporná. Proto je taková kontrola pastí, do které spadají všechny potenciální problémy. Případně můžete použít ukončení programu nebo zobrazit chybovou zprávu, pokud soubor nelze otevřít.

Stejně jako fopen, funkce file_get_contents, file a readfile vrátí hodnotu False, pokud soubor nelze otevřít nebo zpracovat. Funkce fgets, fgetss, fread, fscanf a fclose také vrátí hodnotu False při chybě. Samozřejmě, s výjimkou fclose jste pravděpodobně již zpracovali výsledky, které vrací. Pokud jde o fclose, lze udělat jen málo, pokud se deskriptor souboru nezavře správně, takže kontrola návratové hodnoty fclose je obvykle přehnaná.

Volba je na tobě

PHP nemá nedostatek efektivních způsobů, jak číst a analyzovat soubory. Většinu času vám spolehlivě poslouží klasické funkce jako fread, nebo vás může více přitahovat jednoduchost readfile, pokud je to nutné k dokončení úkolu. Výběr opravdu závisí na tom, čeho se snažíte dosáhnout.

Pokud zpracováváte velké množství dat, fscanf bude pravděpodobně užitečnější a efektivnější než například použití souboru ve spojení s následnými příkazy split a sprintf. Alternativně, pokud jednoduše zobrazujete velký text s malými změnami, může být vhodnější funkce file, file_get_contents nebo readfile. Toto řešení bude pravděpodobně správné při použití PHP pro ukládání do mezipaměti nebo dokonce vytvoření dočasné proxy.

PHP poskytuje mnoho nástrojů pro práci se soubory. Seznamte se lépe s každým z nich a zjistěte, které nástroje jsou nejlepší pro projekt, na kterém pracujete. Nabízí se vám široká škála softwarových nástrojů, používejte je nejefektivněji a bavte se zpracováváním souborů pomocí PHP.

V PHP se často musíte potýkat s vytvořením souboru ... vše je velmi jednoduché na disku není žádný soubor, kód se spustil a soubor se objevil, pak můžete tento soubor načíst do jiné proměnné nebo dokonce libovolné stránky na internet a pak tam něco napsat ... ale k tomu je potřeba znát speciální funkce ... více o tom v tomto článku ...

Chcete-li vytvořit soubor php ve spustitelném skriptu, stačí zadat několik funkcí:

Podívejme se hned na příklad:

$ text = "Nějaký text k zápisu do souboru";
$ fp = fopen ("soubor.txt", "w");
fwrite ($ fp, $ text);
fclose ($ fp);
?>

Zde byste měli vědět:

fopen ()- funkce otevře soubor pro čtení nebo pro zápis a upřesnění;

Tato upřesnění (parametr režimu funkce fopen) jsou velmi důležitá:

  • "r"- otevřít soubor v php Pouze na čtení... Kurzor se umístí na začátek.
  • "r +"- otevřít soubor v php pro čtení i pro psaní... Kurzor se umístí na začátek. !!! - s těmito dvěma režimy r a r + musí být soubory již vytvořeny (jinak se objeví chyba Varování: fopen (file.txt): nepodařilo se otevřít stream: Žádný takový soubor nebo adresář v ...), a pouze čteme nebo máme možnost doplnit.
  • "w"- soubor se otevře POUZE pro zápis. Soubor se zkrátí na nulovou délku - tedy přepíše. Napíše se co je potřeba a na začátek se umístí Kurzor.
  • "w +"- soubor je otevřen pro zápis A ČTENÍ! Zbytek je stejný jako v režimu" w ". !!! - s těmito dvěma režimy - pokud soubor nebyl vytvořen - ZKUSTE HO VYTVOŘIT!
  • "A"- otevřít soubor POUZE pro zápis. Na rozdíl od" w " tento parametr nepřepíše obsah souboru, ale umístí kurzor na konec řádku a připojí obsah, který jsme chtěli přidat na konec.
  • "a +"- otevřít soubor pro zápis a čtení.

fwrite($ fp, $ text) - funkce zápisu do souboru v php - tedy do souboru se zapíše to, co je v proměnné $ text, což je v proměnné $ fp;

fzavřít($ fp) - funkce uzavření souboru, který jsme zapsali do proměnné $ fp;

Vše nyní můžete bezpečně vytvářet správně soubory v php, otevírat je pro čtení a úpravy.

Užitečné doplňky a funkce PHP pro práci s otevřeným souborem:

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

zde je splněna podmínka - "dokud nebude dosaženo konce souboru, pak to udělejte" zatímco (! feof ($ fp))

1. Funkce fgets($ fp, 99) – umožňuje rozdělit veškerý obsah do sekcí o délce 99 bajtů a dále, abychom to viděli jasněji, vložili jsme značku

Tato funkce řetězce fgets(resource handle [, délka int]) ve výchozím nastavení přijímá délku 1024 bajtů (1 kilobajt), pokud není zadán, bude. Tento parametr je volitelný od PHP 4.2.0 (při chybě vrací FALSE)

Další funkce pro otevírání, zápis a vytváření souboru

Funkce - int readfile(řetězec název_souboru [, bool use_include_path [, kontext zdroje]]) - číst soubor jako celek.

Přečte soubor a zapíše obsah do výstupní vyrovnávací paměti. A vrátí počet vytištěných bajtů. V případě chyby se vrátí, pokud se pes nepoužívá - @readfile.

Vyjde něco takového:

Na konci slova je značka
.

b. Funkce - pole soubor(řetězec název_souboru [, int use_include_path [, zdrojový kontext]]) dělá totéž jako funkce readfile, s jedinou výjimkou přidá obsah souboru do pole:

Můžete tedy číst libovolné stránky na internetu: $ lines = file ("http: // site /"); a iterujte pole přes funkci foreach;

3a. Funkce řetězce file_get_contents(řetězec název_souboru [, bool use_include_path [, zdroj kontext [, int offset [, int maxlen]]]]) - umožňuje získat obsah jako jeden řádek.

Je všestrannější Funkce PHP pro čtení souboru se podobně jako u funkce file vrací pouze obsah do řetězce, nikoli pole, a lze nastavit podmínky - kterým bytem začít - offset a kterým skončit - maxlen... Při selhání vrátí FALSE.

Důležité!!!- v tomto případě funkce nahradí 3 najednou: fopen (), fread () a fclose () a zbaví se tak razítek.

3b. Funkce Int file_put_contents(řetězec název_souboru, smíšená data [, příznaky int [, kontext zdroje]]) - totožné se sekvenčním voláním funkcí fopen (), fwrite () a fclose () - vrací počet zapsaných bajtů.

Každý programátor by měl umět správně pracovat se soubory. Tento článek je zaměřen na začínající PHP programátory, nicméně "sbírka receptů" bude užitečná pro pokročilé uživatele.

Práce se soubory je rozdělena do 3 fází:

  1. Otevření souboru.
  2. Manipulace s daty.
  3. Zavírání souboru.

. Otevření souboru

Chcete-li otevřít soubor v prostředí PHP, použijte funkci fopen ()... Požadované parametry pro tuto funkci jsou název souboru a režim souboru.

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

Podle dokumentace PHP se rozlišují následující typy režimů souborů:

  1. r - otevřít soubor jen pro čtení.
  2. r + - otevřít soubor současně pro čtení a zápis.
  3. w - vytvořit nový prázdný soubor. Pokud v době volání takový soubor již existuje, je zničen.
  4. w + - je podobné jako r +, pouze pokud takový soubor v době volání existuje, jeho obsah se smaže.
  5. a - otevře existující soubor v režimu zápisu, přičemž ukazatel je posunut na poslední bajt souboru (na konec souboru).
  6. + - otevře soubor v režimu čtení a zápisu, zatímco ukazatel je posunut na poslední bajt souboru (na konec souboru). Obsah souboru se nesmaže.

Poznámka: Na konci libovolného řádku může být ještě jeden volitelný parametr: b nebo t. Pokud je zadáno b, pak se soubor otevře v binárním režimu čtení/zápisu. Pokud t, pak je pro soubor nastaven režim překladu posunu řádku, tzn. je vnímána jako textová.

Pro demonstraci zvažte následující scénář:

// Otevře soubor v různých režimech
$ fp = fopen ("counter.txt", "r"); // Binární režim
$ fp = fopen ("counter.txt", "rt"); // Textový režim
$ fp = fopen ("http://www.yandex.ru", "r"); // Otevře připojení HTTP pro čtení
$ fp = fopen ("ftp: // uživatel: [e-mail chráněný]"," w "); // Otevřete připojení FTP pomocí přihlašovacího jména a hesla
?>

II... Manipulace s daty souborů

Zapsat data do souboru, když Nápověda PHP můžete použít funkci fwrite ()... Tato funkce má 2 požadované parametry a 1 volitelný. Požadované parametry jsou deskriptor souboru a režim souboru:

$ fp = fopen ("counter.txt", "a"); // Otevřete soubor v režimu zápisu
$ mytext = "Musíme napsat tento řádek \ r \ n"; // Zdrojový řetězec
$ test = fwrite ($ fp, $ mytext); // Zápis do souboru
if ($ test) echo "Data byla úspěšně vložena do souboru.";
else echo "Chyba při zápisu do souboru.";
fclose ($ fp); // Zavřete soubor
?>

Chcete-li číst soubor řádek po řádku, použijte funkci fgets ()... Funkce má 2 požadované parametry:


if ($ fp)
{
zatímco (! feof ($ fp))
{
$ mytext = fgets ($ fp, 999);
echo $ mytext."
";
}
}

fclose ($ fp);
?>

Poznámka: B tento příklad hodnota 999 určuje počet znaků, které se budou číst, dokud ukazatel nedosáhne konce souboru (EOF).

Abyste mohli číst soubor jako celek, musíte použít funkci readfile () který vyžaduje 1 požadovaný parametr. Funkce otevře soubor, zobrazí jeho obsah v okně prohlížeče a poté soubor zavře:

echoreadfile ("counter.txt");
?>

Můžete také použít funkci fpassthru (), která přebírá 1 požadovaný parametr. Před použitím této funkce musíte soubor otevřít v režimu čtení. Po dokončení čtení souboru funkce automaticky soubor zavře (a deskriptor souboru se stane neplatným).

$ fp = fopen ("counter.txt", "r"); // Otevřete soubor v režimu čtení
if ($ fp) echo fpassthru ($ fp);
elseecho "Chyba při otevírání souboru";
?>

Velmi často nastávají situace, kdy je potřeba načíst obsah webu do pole. Tato funkce je poskytována pomocí funkce soubor ()... Při volání této funkce bude každý řádek souboru uložen do samostatného prvku zadaného pole.

Poznámka: Funkci nepoužívejte soubor () do binárních souborů (binary-safe), protože není to bezpečné z hlediska čtení binárních souborů, pokud je zároveň někde znak konce souboru (EOF), tak to nezaručuje přečtení celého binárního souboru.

$ file_array = soubor ("counter.txt"); // Přečte soubor do $ file_array
// Práce s daty pole
?>

Poznámka: Práce s poli je podrobně popsána, autoři: Mukhametshin D.F., Simdyanov I.V.

Na konci článku najdete dobrý „receptář“ na pole, který poskytuje řešení mnoha problémů, se kterými se webový programátor denně setkává.

Představme si situaci, kdy je potřeba číst soubor znak po znaku. K tomu můžeme použít funkci fgetc ()... Funkce přebírá jeden parametr. Funkce je užitečná, pokud potřebujeme najít libovolný znak nebo počet stejných znaků.

$ fp = fopen ("counter.txt", "r"); // Otevřete soubor v režimu čtení
if ($ fp)
{
zatímco (! feof ($ fp))
{
$ char = fgetc ($ fp);
if ($ char == "c") $ i = $ i + 1; // Najděte znak "c"
}
echo "Počet písmen" c "v souboru:". $ i;
}
else echo "Chyba při otevírání souboru";
?>

III... Zavírání souboru

Zavření souboru pomocí funkce fclose () který přebírá 1 požadovaný parametr.

$ fp = fopen ("counter.txt", "r");
if ($ fp)
{
echo "Soubor otevřít";
fclose ($ fp); // Zavřete soubor
}
?>

Sbírka receptů

1) Musíme zkontrolovat, zda ten či onen soubor existuje. K tomu použijeme funkci soubor existuje ().

myfile ("counter.txt"); // Použijte funkci myfile a předejte název souboru jako argument

function myfile ($ name) // Vytvořte funkci pro kontrolu, zda soubor existuje
{
if (file_exists ($ name)) echo "Soubor existuje";

}
?>

Poznámka: Funkce soubor existuje nekontroluje soubory na vzdáleném webovém serveru. Pro správná práce musí být soubor skriptu umístěn na serveru, kde je kontrolovaný soubor.

2) Určete velikost souboru pomocí funkce velikost souboru()

myfile ("counter.txt");

function myfile ($ name) // Vytvořte funkci pro kontrolu existence souboru a určení velikosti souboru
{
if (file_exists ($ name)) echo "Velikost souboru:" .filesize ($ name). "byte";
else echo "Soubor neexistuje";
}
?>

3) Vytvořte dočasný soubor pomocí funkce tmpfile()

$ myfile = tmpfile ();
fwrite ($ myfile, "Tento řádek je zapsán do dočasného souboru."); // Zápis do dočasného souboru
fseek ($ myfile, 0); // Nastavení ukazatele souboru
echo fread ($ myfile, 1024); // zobrazí obsah souboru
?>

4) Musíte definovat počet řádků v souboru. K tomu použijeme funkci počet()

$ fp = soubor ("counter.txt");
echo "Počet řádků v souboru:" .count ($ fp);
?>

5) Musíme použít mechanismus zamykání souborů

$ fp = fopen ("counter.txt", "a");
hejno ($ fp, LOCK_EX); // Uzamčení souboru pro zápis
fwrite ($ fp, "String to write");
hejno ($ fp, LOCK_UN); // Odemknout
fclose ($ fp);
?>

6) Potřebujeme ze souboru odstranit konkrétní řádek

$ num_stroka = 5; // Odebrání řádku 5 ze souboru
$ soubor = soubor ("counter.txt"); // Přečte celý soubor do pole

pro ($ i = 0; $ i< sizeof($file); $i++)
if ($ i == $ num_stroka) nenastaveno ($ soubor [$ i]);

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

7) Určení typu souboru. Používáme funkci