LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP (30) - Počitadlo pomocí souborů

Dnes se podívame na to, jak umí PHP soubory na serveru přímo vytvářet. S praktickou ukázkou počitadla přístupů.

28.7.2004 15:00 | Petr Zajíc | Články autora | přečteno 62455×

PHP umí soubory nejen číst a vkládat do skriptů, ale rovněž vytvářet. To může být výhodné, pokud potřebujeme uložit nějaké informace na straně serveru nebo pokud vytváříme aplikaci, která ke své činnosti potřebuje zapisovat do souborového systému.

Pro vytváření a pohyb v souborech slouží v PHP sada příkazů. Příkaz fopen soubor otevře, fread z něj přečte data, fwrite do něj data zapíše a fclose jej zavře. Funkce file_exists zjistí, zda daný soubor existuje. Tady by byla všechna další teorie nudná, takže si pojďme vytvořit něco praktického.

Součástí našeho webu může být malý textový soubor, který bude obsahovat údaj o počtu shlédnutí naší stránky - takové primitivní počítadlo. Tady je kód, který jej zrealizuje:

<?
define
("NAZEV_SOUBORU", "pocitadlo.txt");
if (
file_exists(NAZEV_SOUBORU))
{
  
$soubor=fopen(NAZEV_SOUBORU, "r+");
  
$stav=fread($soubor, 10);
}
else
{
  
$soubor=fopen(NAZEV_SOUBORU, "w");
  
$stav=0;
}
rewind($soubor);
fwrite($soubor,++$stav,10);
fclose($soubor);

echo
"Již máme zaznamenáno $stav přístupů!!!";
?>

Spustit skript

Skript sám je dobře čtivý, musíte si ovšem dát pozor na některé drobnosti. Především jsme jako název souboru pro uložení počitadla použili konstantu - to je velmi rozumné, protože časem třeba můžeme chtít umístění souboru změnit a nikomu by se nechtělo přepisovat jeho název na mnoha místech. Z programátorských fintiček jsme ještě použili preinkrementaci (++$stav) a automatickou expanzi proměnné (zaznamenáno $stav přístupů). A teď k práci se souborem:

V zásadě mohou existovat dvě situace: Celý skript se buď spouští poprvé, nebo již poněkolikáté. Pakliže se spouští prvně, nezbývá než soubor s počitadlem vytvořit a výchozí stav nastavit na nulu, pokud již počítací soubor existuje, načteme z něj aktuální stav počitadla pomocí funkce fread. Funkce fopen přijímá povinný parametr mode, který může nabývat následujících hodnot (zvýraznil jsem ty, které si pletu, raději bych uvítal dvoupísmenné hodnoty):

r
Soubor je otevřen pro čtení, ukazatel je nastaven na začátek.
r+
Soubor je otevřen pro čtení i pro zápis, ukazatel je nastaven na začátek.
w
Soubor je vytvořen a otevřen pro zápis. Pokud existoval, je zkráce na nulovou délku.
w+
Soubor je vytvořen a otevřen pro čtení i zápis. Pokud existoval, je zkráce na nulovou délku.
a
Soubor je otevřen pro připisování. Ukazatel je nastaven na konec. Pokud neexistuje, pokusí se PHP soubor vytvořit.
a+
Soubor je otevřen pro čtení nebo připisování. Ukazatel je nastaven na konec. Pokud neexistuje, pokusí se PHP soubor vytvořit.

Ještě jednou se zmíním o právech k souborům: Na úspěšné vykonání funkce fopen musíte mít k vytvářenému nebo otevíranému souboru dostatečná práva. Většinou je mít nebudete na komerčních webhostinzích, protože správci nedávají uživateli, pod nímž běží PHP příliš rozsáhlá práva. Takže, na Linuxsoftu by se Vám například vytvoření souboru nepovedlo. Pokud byste ale měli na serveru účet, mohli byste si soubor počitadla vytvořit ručně. Ani to Vám však nemusí fungovat, pokud nejste uživatelem, který spouští PHP. Já jsem například musel aby příklad fungoval soubor nejprve vytvořit, a pak změnit jeho práva tak, aby do něj mohl zapisovat a číst z něj kdokoli.

A ještě něco: Pokud požadujete otevřít soubor například v režimu r+ a nemáte k tomu práva, PHP nahlásí neúspěch a nepokusí se otevřít soubor v žádném jiném režimu (třeba, jen čtení). Myslete na to.

Pozn.: Stav počitadla nebude souhlasit s číslem určujícím počet shlédnutí tohoto článku. Tam je použita odlišná filozofie.

Možná vás napdane, co by se stalo, kdyby se do souboru pokusili přistupovat dva uživatelé najednou. V takovém případě by naše jednoduché počitadlo mohlo selhat. V praxi se v takovém případě nasazuje systém zamykání souborů, který se v PHP realizuje příkazem flock.

Soubory obsahující data

Častou úlohou související se zpracováním souborů je vytáhnout z nich data (třeba data, která se budou vkládat do databáze). PHP přímo podporuje zpracování souborů s hodnotami oddělenými středníky. Máte-li třeba následující soubor:

Petr;Zajíc;1. máje 6;Liberec
Franta;Jetel;Novodvorská 12;Praha
Pepa;Jouda;Pakoměřice 23;Pakoměřice

můžete jej rozsekat na jednotlivé hodnoty pomocí volání funkce fgetcsv.  Následující ukázka to ozřejmí:

Pozn.: Pakoměřice skutečně existují.

<?
$radek
= 1;
$soubor = fopen ("30_data.csv","r");
while (
$data = fgetcsv ($soubor, 1000))
{
  echo
"<p>Zpracovávam řádek č.$radek: <br>";
  
$radek++;
  foreach (
$data as $polozka)
  {
    print
$polozka. "<br>";
  }
}
fclose ($soubor);
?>

Spustit skript

Příkaz fgetcsv načte řádek a vrátí jej jako pole položek $data. Ta následně zobrazíme pomocí funkce foreach. Fgetcsv může obsahovat nepovinný třetí parametr, který specifikuje jiný oddělovač (třeba tabelátor, středník a podobně).

Pozn.: Většina databází má vlastní rychlý způsob načítání textových souborů do tabulek, takže to tvrzení v úvodu berte s rezervou.

Další možnosti

Zpracování souborů v PHP zahrnuje daleko více. Za určitých okolností je možné například:

  • Otevírat vzdálené soubory pomocí prtokolů HTTP nebo FTP
  • Otevírat porty (třeba COM)
  • Číst ze standardního vstupu nebo zapisovat na standardní výstup
  • Soubory kopírovat, přesouvat, mazat, měnit jim práva a tak dále
  • Soubory šifrovat

My se v dalším díle našeho seriálu zaměříme na to, jak nám může PHP pomoci při kopírování souborů na server nebo při stahování souborů ze serveru.

Verze pro tisk

pridej.cz

 

DISKUZE

Aktualizace v časových intervalech 22.2.2008 20:25 Dan Pelíšek
L Re: Aktualizace v časových intervalech 22.2.2008 21:20 Ondřej Čečák
  L Re: Aktualizace v časových intervalech 22.2.2008 22:59 Dan Pelíšek
    L Re: Aktualizace v časových intervalech 22.2.2008 23:12 Aleš Hakl
prístupové práva 28.2.2008 18:24 [Peter Szatmary]
L Re: prístupové práva 28.2.2008 19:02 Aleš Hakl
Cteni/zapis 27.7.2017 12:24 Jaromir Obr




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze