Vytvářejte, otevírejte, čtěte, zapisujte, mažte a kontrolujte existenci souborů v PHP. Práce se soubory v PHP. Čtení souboru, zápis do souboru. PHP tutoriál. Mazání souborů, změna chmod, práce s adresáři. C Php data ze souboru

V předchozí lekci jsme se naučili používat PHP pro přístup k souborovému systému serveru. V tomto tutoriálu použijeme tyto informace ke čtení z jednoduchého textového souboru.

Textové soubory jsou skvělé pro ukládání různých typů dat. Nejsou tak flexibilní jako databáze, ale obvykle nevyžadují tolik paměti. Textové soubory jsou navíc ve formátu, který je čitelný na většině systémů.

Otevřete textový soubor

Chcete-li otevřít textový soubor, použijte funkci fopen. Zde je jeho syntaxe:

Fopen( název souboru, režim)

Název souboru Název souboru, který se má otevřít. režim Režim může být "r" (čtení), "w" (zápis) nebo "a" (připojování). V tomto tutoriálu budeme pouze číst ze souboru a podle toho používat "r". V další lekci se naučíme psát a připojovat text.

Příklady v tomto tutoriálu používají soubor unitednations.txt. Toto je jednoduchý seznam programů a fondů OSN a jejich domén. Tento soubor si můžete stáhnout nebo si vytvořit vlastní a použít jej v příkladech.

Nejprve zkusme otevřít unitednations.txt:

// Otevření textového souboru // Zavře textový soubor fclose($f); ?>

Příklad 1: Čtení řádku z textového souboru

Soubor systematicky zaznamenává: název programu, čárku, doménu. Jak můžete očekávat, mnohem více informací lze zaznamenat do souboru odděleného čárkami.

K získání informací z každého řádku používáme pole. Viz lekce 8 o polích.

Čtení z textových souborů $f = fopen("unitednations.txt", "r"); // Číst řádek po řádku až do konce souboru zatímco (!feof($f)) ( // Vytvoří pole oddělené čárkami $arrM = explode(",",fgets($f)); // Zápis odkazů (získání dat z pole) echo"

  • ". $arrM."
  • "; ) fclose($f); ?>

    Docela pohodlné, ne? V zásadě můžete tento soubor rozšířit o stovky odkazů nebo rozšířit adresář i o adresy.

    V další lekci se podíváme na to, jak zapisovat do textového souboru.

    V PHP se často musíte vypořádat s vytvořením souboru... je to velmi jednoduché: na disku není žádný soubor, kód byl spuštěn a soubor se objevil, pak můžete tento soubor načíst do jiné proměnné nebo dokonce na jakoukoli stránku 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 v PHP ve spustitelném skriptu, stačí zadat několik funkcí:

    Podívejme se na příklad:

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

    Tady byste to měli vědět:

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

    Toto upřesnění (parametr režimu funkce fopen) je velmi důležité:

    • "r" - otevřete soubor v php Pouze na čtení. Kurzor se umístí na začátek.
    • "r+" - otevřete soubor v php pro čtení a psaní. Kurzor se umístí na začátek. !!! - v těchto dvou režimech r a r+ musí být soubory již vytvořeny (jinak se objeví chyba Varování: fopen(soubor.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. Zapíše se co je potřeba a kurzor se umístí na začátek.
    • "w+" - otevře soubor pro zápis A ČTENÍ! Zbytek je stejný jako v režimu "w". !!! - v těchto dvou režimech - pokud soubor nebyl vytvořen - BUDE PROVEDEN POKUS O JEHO VYTVOŘENÍ!
    • "A" - otevřít soubor POUZE pro zápis. Na rozdíl od "w" tato volba 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řete soubor pro zápis a čtení.

    fwrite($fp, $text) - funkce pro zápis do souboru v PHP - tedy to, co je v proměnné $text, se zapisuje do souboru, který je v proměnné $fp;

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

    Nyní můžete snadno správně vytvářet 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:

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

    zde je splněna podmínka - "dokud nebude dosaženo konce souboru, proveďte toto" while(!feof($fp))

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

    Tato funkce řetězce fgets(resource handle [, délka int]) standardně přijímá 1024 bajtů (1 kilobajt) jako parametr délky, pokud není zadán, bude tomu tak. Tento parametr je od PHP 4.2.0 volitelný (v případě chyby 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 bajtů výstupu. V případě chyby se vrátí, pokud se pes nepoužívá - @readfile.

    Stane se 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:

    Tímto způsobem můžete číst libovolné stránky na internetu: $lines = file("http://site/"); a iterujte polem pomocí funkce 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 řetězec.

    Toto je univerzálnější funkce PHP pro čtení souboru, podobná funkci file, pouze obsah je vrácen jako řetězec, nikoli pole a lze nastavit podmínky - kterým byte začít - offset a kde skončit - maxlen. Při selhání vrátí hodnotu FALSE.

    Důležité!!!- v tomto případě funkce nahradí 3 najednou: fopen(), fread() a fclose() a tím se zbaví značky.

    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ů.

    Obecně platí, že interakce se soubory v PHP spočívá v otevření souboru, provedení nezbytných akcí s nimi a uzavření souboru. Při otevírání souboru je určen režim další práce s ním. To může být otevření pro čtení, zápis, přidávání dat. Existují také režimy otevírání souborů, které kombinují čtení i zápis.

    Existuje mnoho možností pro čtení ze souborů - můžete získat data v různých formách - čtení řádek po řádku, získání pole řetězců a tak dále.

    Vytvoření a zápis souboru

    Chcete-li vytvořit soubor, musíte soubor otevřít v režimu zápisu. Otevření souboru se provádí pomocí funkce fopen. První parametr této funkce určuje cestu k souboru. Druhý parametr označuje režim otevírání souboru. Chcete-li vytvořit soubor, musíte určit režim nahrávání souboru - "w".

    $f = fopen( "mujsoubor.txt", "w");

    Pokud soubor se stejným názvem již existuje, režim nahrávání vám umožní vytvořit nový prázdný soubor namísto stávajícího a smazat všechna jeho data.

    * K dispozici je také parametr "w+", což vám umožní otevřít současně pro čtení a psaní. V tomto případě, pokud soubor se stejným názvem již existoval, data v něm budou vymazána.

    Při provádění operace otevření vrátí funkce hodnotu deskriptoru souboru - speciální souborové proměnné, která bude dalším funkcím indikovat, se kterým souborem mají provádět své akce.

    Chcete-li přidat nová data do souboru otevřeného v režimu zápisu, použijte funkci fwrite. Prvním parametrem je deskriptor souboru. Pak řádek, který je třeba zapsat do souboru. V případě potřeby lze třetí parametr použít k omezení počtu zapsaných znaků.

    fwrite($f, "Můj text k zápisu do souboru.");

    Po zaznamenání všech řádků musí být uzavřen. K tomu slouží funkce fclose. Jediným parametrem je deskriptor souboru.

    fclose($f);

    Výsledkem je, že kód pro vytvoření a uložení souboru vypadá takto:

    $f = fopen( "mujsoubor.txt", "w");
    fwrite($f, "První řádek.\r\n");
    ...
    fwrite($f, "Poslední řádek.\r\n");
    fclose($f);

    * Symboly "\r\n" označte znak konce řádku. Pokud nepřipojíte, všechny řádky v nahraném souboru budou spojeny do jednoho řádku.

    Přidání dat do existujícího souboru

    Chcete-li přidat jakékoli informace do již vytvořeného souboru, musíte jej otevřít v režimu zápisu, ale zachovat stávající informace. Tito. soubor se také otevře pro zápis, ale při zápisu do takového souboru se přidají na jeho konec.

    $f = fopen( "mujsoubor.txt", "a"); "//Parametr "a" určuje otevření v režimu připojení"
    fwrite($f, "Nový řádek\r\n" );
    fclose($f);

    Pokud soubor se zadaným názvem neexistuje, soubor se vytvoří a všechna data se do něj zapíší.

    * K dispozici je také režim "a+", který otevře soubor pro čtení a zápis a přejde na konec souboru.

    Čtení ze souboru

    Pro čtení ze souboru je funkci fopen přiřazen parametr "r", což znamená, že soubor bude otevřen pouze pro čtení. Funkce fgets čte ze souboru. Prvním parametrem je deskriptor souboru. Druhý, volitelný, parametr určuje velikost řetězce, který se má číst. Pokud druhý parametr není zadán, bude aktuální řádek přečten až po znak konce řádku.

    $f = fopen( "mujsoubor.txt", "r"); // Parametr "r" určuje otevření v režimu čtení
    $s = fgets($f);
    echo $s;
    fclose($f);

    * Režim "r+" otevře soubor pro čtení a zápis.

    Chcete-li přečíst všechny řádky ze souboru, můžete použít smyčku, ve které bude číst jeden řádek po druhém až do konce souboru:

    $f = fopen( "mujsoubor.txt", "r");
    zatímco (!feof($f))(
    $s = fgets($f);
    echo $s;
    }
    fclose($f);

    Funkce feof se používá ve stavu smyčky k určení konce souboru a ukončení cyklu čtení.

    Kromě popsaného způsobu získávání dat ze souboru má PHP mnoho různých funkcí. Někdy je jednodušší okamžitě získat celý obsah souboru (funkce readfile) nebo načíst všechny řádky do pole (funkce file) a pracovat s ním. Pro takové účely nemusíte soubor otevírat pro čtení a zavírat. Všechny tyto akce provede samotná funkce.

    readfile( "mujsoubor.txt");

    $mas = soubor("mujsoubor.txt" );

    foreach ($mas jako $m)
    echo $m;

    Pomocí funkce fgetc můžete číst obsah souboru znak po znaku:

    $f = fopen( "mujsoubor.txt", "r");
    zatímco (!feof($f))(
    $s = fgetc($f);
    echo $s;
    }
    fclose($f);

    Odstranění souboru

    Odstranění souboru se provádí pomocí funkce unlink. Parametr určuje cestu k souboru, který má být odstraněn.

    odpojit ( "mujsoubor.txt");

    Kontrola, zda soubor existuje

    Někdy je třeba před provedením jakékoli akce se souborem zkontrolovat, zda soubor existuje. K tomu slouží funkce file_exists. Parametr určuje cestu k souboru.

    if (file_exists("myfile.txt" ))
    echo "Existuje takový soubor.";
    jiný
    echo "Neexistuje žádný soubor s tímto jménem.";

    O používání 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 množství dostupných funkcí. PHP by mohlo snadno převzít motto Perlu: „Existuje více než jeden způsob, jak něco udělat“, zejména pokud jde o zpracování souborů. Ale s množstvím dostupných nástrojů vyvstává otázka, který z nich je nejlepší pro provedení práce. Odpověď na tuto otázku samozřejmě závisí na tom, jaké jsou vaše cíle při zpracování souboru, takže osvojení všech schopností jazyka stojí za váš čas.

    Tradiční fopen metody

    Metody fopen jsou programátorům v C a C++ z minulosti možná nejznámější, protože jsou to víceméně nástroje, které máte na dosah ruky po celá léta, pokud jste s těmito programovacími jazyky pracovali. Pro kteroukoli z těchto metod postupujte podle standardního postupu, pomocí fopen otevřete soubor, funkce pro načtení dat a poté fclose pro zavření souboru, 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($soubor_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

    Přestože tyto funkce zná většina zkušených programátorů, dovolte mi rozebrat, 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 se podívám na každou použitou souborovou funkci.

    funkce fopen

    Funkce fopen naváže připojení k souboru. Říkám „naváže spojení“, protože kromě otevření souboru může fopen otevřít také adresu URL:

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

    Tato řada programu vytvoří odkaz na výše uvedenou stránku a umožní vám ji začít číst jako místní soubor.

    Poznámka: Možnost "r" použitá ve fopen označuje, že soubor je otevřen jen pro čtení. Vzhledem k tomu, že zápis do souboru není zahrnut v rozsahu problémů diskutovaných v tomto č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. Níže je uveden příklad tohoto typu.

    funkce feof

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

    Funkce fclose

    Přeskočme střed výpisu 1 a přejdeme 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, dostanete se k jádru procesu zpracování souboru: ke skutečnému č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 zobrazit nebo je jinak zpracovat. Příklad ve výpisu 1 vytiskne celý soubor.

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

    $string = fgets($soubor_handle, 81);

    Myslete na "\0", indikátor konce řádku v C, a nastavte délku o jeden znak delší, 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 řádku pro danou funkci.

    fread funkce

    Funkce fgets je jen jednou z mnoha funkcí dostupných pro čtení souboru. Toto je jedna z nejčastěji používaných funkcí, protože zpracování souboru řádek po řádku ve většině případů dává největší smysl. Ve skutečnosti několik dalších funkcí nabízí podobné možnosti. Ať je to jak chce, analýza řádek po řádku není vždy to, co potřebujete.

    A zde se dostáváme k freadu. Funkce fread má trochu jiný účel než fgets: je určena ke čtení z binárních souborů (tj. souborů, které zpočátku nesestávají z textu čitelného člověkem). Protože koncept "řádků" není pro binární soubory relevantní (logické datové struktury nejsou obvykle rozděleny do řádků), musíte zadat počet bajtů, které mají být načteny.

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

    Výše uvedený příklad přečte 4096 bajtů (4 KB) dat. Všimněte si, že bez ohledu na zadanou hodnotu přečte fread maximálně 8192 bajtů (8 kB).

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

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

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

    funkce fscanf

    Když se vrátíme ke zpracování řetězců, fscanf je také nástupcem tradiční funkce knihovny souborů C. Pokud s ní nejste obeznámeni, fscanf nač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 popsány v mnoha zdrojích, jako je PHP.net, takže zde tyto informace 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 to byly předány jako argumenty.)

    funkce fgetss

    Funkce fgetss se liší od tradičních funkcí pro manipulaci se soubory a umožňuje vám lépe porozumět možnostem PHP. Funguje jako fgets, ale zahodí všechny tagy HTML nebo PHP, které zjistí, a ponechá pouze holý text. Vezměme si níže uvedený soubor HTML.

    Výpis 2. Příklad HTML souboru
    Můj titul

    Pokud rozumíte tomu, co znamená „Protože neexistuje“ nikdo, kdo by vám nedal bolest, pak posloucháte příliš mnoho z kapely America

    Předejme to funkci fgetss.

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

    To je to, co dostanete jako výstup:

    Můj název Pokud rozumíte tomu, co znamená "Protože tu není nikdo, kdo by vám nedal 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ího výstupního kanálu 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 popsané 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 souboru. K tomu potřebujete funkci fseek.

    fseek($fh, 0);

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

    fseek($fh, 1024);

    Od PHP V4.0 je k dispozici také několik dalších možností. Pokud se například potřebujete posunout 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ě se posun o 100 bajtů zpět provede:

    fseek($fh, -100, SEEK_CUR);

    Pokud se chcete vrátit na pozici 100 bajtů před koncem souboru, použijte místo toho SEEK_END.

    fseek($fh, -100, SEEK_END);

    Jakmile je dosaženo nové pozice, můžete ke čtení dat použít fgets, fscanf nebo jinou funkci.

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

    Zachyťte celý soubor

    Nyní se podíváme na některé z jedinečných schopností PHP pro zpracování souborů: zpracování velkých bloků dat v jednom nebo dvou řádcích. Jak můžete například uchopit soubor a zobrazit celý 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ě snadný pomocí fgetcontents, který umístí celý soubor na řádek.

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

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

    echo file_get_contents("myfilename");

    Tento článek se primárně zaměřuje na zpracování místních souborů, 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);

    Možná se díváte na tyto příklady a říkáte si: "To je hodně práce." Vývojáři PHP s vámi souhlasí. Výše uvedený příkaz tedy můžete zkrátit na:

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

    Funkce readfile odešle celý obsah souboru nebo webové stránky do výchozí výstupní vyrovnávací paměti. Ve výchozím nastavení tento příkaz zobrazí chybovou zprávu, když selže. 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 jeden řádek vrácený file_get_contents je 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šechnu tuto složitost, pokud existuje dokonale vhodná funkce, která tuto práci udělá za vás? Funkce PHP file() provádí tento úkol v jednom kroku: vrací pole řetězců, jehož prvky jsou řádky souboru.

    $array = soubor("mujsoubor");

    Je třeba poznamenat, že mezi dvěma výše uvedenými příklady je nepatrný rozdíl. Příkaz split odstraní nové řádky, zatímco příkaz file ukončí řádky pole pomocí nových řádků (stejně jako fgets).

    Schopnosti 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, které jsou uvedeny 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é pole vytisknou:

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

    Výsledkem bude 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ě si můžete všimnout, že tento příkaz sloučil sekce. Toto je výchozí akce, ale můžete si ji snadno přizpůsobit 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
    Pole ( => Pole ( => Král Artuš => Hledat Svatý grál => Modrá) => Pole ( => Mark Twain => Whoopi Goldberg))

    PHP vkládá data do snadno analyzovatelného vícerozměrného pole.

    Ale to je jen špička ledovce, pokud jde o zpracování souborů v PHP. Složitější funkce, jako je tidy_parse_file a xml_parse, vám mohou pomoci analyzovat dokumenty HTML a XML. Podrobnější informace o tom, jak tyto funkce fungují, naleznete v části. Obojí stojí za zvážení, pokud budete s těmito typy souborů pracovat, ale místo procházení všech možných typů souborů se možná budete chtít blíže podívat na obsah tohoto článku, který obsahuje některá dobrá obecná pravidla pro práce s funkcemi, které jsem dosud popsal.

    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ž změna oprávnění způsobí, že nebudete moci číst obsah souboru? Existenci souboru a práva 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
    $filename = "mujsoubor"; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # Processing fclose($fh); )

    V praxi však bude tento program pravděpodobně pro váš úkol 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 v případě selhání vrátí hodnotu False, zajistí to, že soubor bude zpracován pouze v případě, že jej lze 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 ukončit program 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, pokud dojde k chybě. Samozřejmě, s výjimkou fclose , jste pravděpodobně již zpracovali výsledky, které vrací. Pokud jde o fclose , nelze toho mnoho udělat, pokud se handle souboru nezavře správně, takže kontrola návratové hodnoty fclose je obecně přehnaná.

    Volba je na tobě

    PHP nemá nedostatek efektivních způsobů, jak číst a analyzovat soubory. Klasické funkce jako fread vám mohou většinu času spolehlivě sloužit, nebo vás může více přitahovat jednoduchost readfile, pokud je to to, co potřebujete ke své práci. Výběr opravdu závisí na tom, čeho se snažíte dosáhnout.

    Pokud zpracováváte velké množství dat, pravděpodobně shledáte fscanf užitečnější a efektivnější než například použití souboru v kombinaci s následnými příkazy split a sprintf. Pokud však pouze zobrazujete velké množství textu s drobnými změnami, může dávat větší smysl použití funkcí 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ého proxy serveru.

    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ý výběr softwarových nástrojů, používejte je nejefektivněji a bavte se zpracováváním souborů pomocí PHP.

    tětiva fgets(handle zdroje [, délka int])

    Vrátí řetězec délky - 1 bajt přečtený z deskriptoru souboru, na který ukazuje handle. Čtení končí, když počet přečtených bytů dosáhne délky - 1, když dosáhne konce řádku (který je zahrnut do návratové hodnoty), nebo když dosáhne konce souboru (podle toho, co nastane dříve). Není-li délka zadána, výchozí hodnota je 1 kilobajt nebo 1024 bajtů.

    Pokud dojde k chybě, funkce se vrátí NEPRAVDIVÉ .

    Nejčastější chyby:

    Programátoři zvyklí na sémantiku „C“ funkcí fgets(), musí vzít v úvahu rozdíl ve způsobu vrácení příznaku konce souboru (EOF).

    Ukazatel souboru musí být platný a musí ukazovat na soubor úspěšně otevřený funkcemi fopen() nebo fsockopen() .

    Níže uvádíme jednoduchý příklad:


    Příklad 1. Čtení souboru řádek po řádku

    $handle = fopen("/tmp/vstupni soubor.txt" , "r" );
    zatímco (! feof ($handle )) (
    $buffer = fgets($handle, 4096);
    echo $buffer ;
    }
    fclose($handle);
    ?>

    Komentář: Počínaje verzí PHP 4.2.0 se parametr délky stal volitelným. Pokud je tento parametr vynechán, předpokládá se, že délka řetězce je 1024. Od PHP 4.3 vynechání parametru length způsobí, že se proud načte až do konce řetězce. Pokud je většina řádků v souboru delší než 8 kilobajtů, nejúčinnějším rozhodnutím ohledně zdrojů používaných skriptem je zadat maximální délku řádku.

    Komentář: Tato funkce dokáže správně zpracovat binární data počínaje PHP 4.3. Dřívější verze tuto funkci neměly.