PHP - práce se soubory

Tento text jsou spíš moje poznámky, než nějaký ucelený návod.

PHP umí pracovat se soubory celkem slušně. Přitom se to, co do těch souborů píše, samozřejmě vůbec nemusí ukazovat uživateli na výstupu. To většinou není účel.

Zápis PHPkem do souboru

Zápis jednoduchého textu do nového souboru:

<?php
$soubor = fopen("./text.txt", "w");
fwrite($soubor, "Sem se píše obsah");
fclose($soubor);
?>

$soubor je nějaká proměnná, ve které si PHPko pamatuje spojení na otevřený soubor.

fopen() je funkce, která otevírá soubor. V parametrech je uvedena cesta k souboru, do kterého se bude zapisovat. V tomto případě jde o soubor ./text.txt, kde ta tečka a lomítko znamená "tento" adresář, tedy stejný adresář, ve kterém je spouštěný skript. To "w" znamená, že se soubor otevře pro zápis a před zápisem se smaže jeho obsah. Nechcete-li mazat jeho obsah a chcete dopisovat na konec souboru, dejte tam parametr "a".

Funkce fwrite zapíše text do souboru. Pokud soubor neexistuje, tak se vytvoří. Pokud existuje, tak se v tomto příkladu přepíše.

Funkce fclose($soubor) zavírá soubor, aby nehnil v paměti. Když se to zapomene zavřít, tak se nic moc nestane, ale je to prasárna.

Výsledkem kódu bude, že se na obrazovku nevypíše nic, ale na disku serveru se vytvoří soubor text.txt, jehož obsah bude "Sem se píše obsah".

Povolený zápis do adresáře

Zapisování do souborů často nefunguje kvůli tomu, že na serveru nemá PHPko práva do souborů zapisovat. Záleží na nastavení práv k adresářům, musí tam být právo zápisu. Práva k adresářům se dají nastavit třeba i přes FTP. V případě problémů je potřeba to řešit se správcem serveru, protože každý server bývá nastaven jinak. Většinou je praxe taková, že se soubory mohou zapisovat jenom do určitého podadresáře, protože když má PHP právo zápisu všude, není to úplně bezpečné.

Čtení ze souboru

<?php
$soubor = fopen("./text.txt", "r");
$prvni=fgets($soubor); //prvni radek
$druhy=fgets($soubor); // druhy radek
fclose($soubor);
echo "První řádek: $prvni <br>";
echo "Druhý řádek: $druhy";
?>

Funkce fopen() otevře soubor ./text.txt pro čtení. To "r" vyjadřuje, že je to pro čtení.

Funkce fgets() čte jeden řádek otevřeného souboru. Pokud se volá opakovaně, čte vždy další řádek souboru. (Z toho vyplývá, že se v otevřeném souboru někde udržuje ukazatel, který říká, který řádek se bude číst příště.)

Funkce fclose() soubor zavírá, to známe.

Poslední dva řádky pošlou přes echo oba řádky na výstup, takže se zobrazí v prohlížeči.

Načtení obsahu adresáře

<?php
$adresar=opendir("./");
while($jmenosouboru = readdir($adresar)) {
    echo "$jmenosouboru <br>";
}
closedir($adresar);
?>

Funkce opendir() otevírá adresář. Jako parametr dostává umístění adresáře, v tomto případě zápis "./" znamená "tento" adresář, tedy adresář, ve kterým se nachází právě spouštěný skript. Dá se tam samozřejmě napsat libovolná cesta.

Funkce readdir() je zajímavá v tom, že při každém volání bere položku po položce, typicky jména souborů. Funkce vrací jméno souboru.

Ten cyklus while prostě nechává číst soubor po souboru a vypisuje ho na výstup. V praxi je samozřejmě lepší dělat s nimi něco jiného.

Closedir je typicky zavírání souboru.

Odstranění virtuálních objektů

Já do skriptu (před echo nebo jinou akci) ještě často přidávám řádek

if ($jmenosouboru != "." && $jmenosouboru != "..")

což je podmínka, která mi z výpisu vyhodí dva "virtuální" objekty, totiž tento adresář (".") a nadřazený adresář (".."). Každý adresář totiž automaticky obsahuje odkaz sám na sebe (to je ta tečka) a odkaz na nadřazený adresář (to jsou dvě tečky), i když o tom uživatelé Windowsů obvykle ani nevědí.

 

Reklama

www.webhosting-c4.cz, webhosting s doménou v ceně. 20GB
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Encyklopedie FrontPage Reklama PHP Server

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.