PHP - Zapis podatkov v datoteko in branje iz nje

PHP - Zapis podatkov v datoteko in branje iz nje

Avtor: Dani Sajtl

Uvod

  • Sedaj, ko vemo kako odpreti in zapreti datoteke je čas, da si pogledamo kako prebrati in zapisati podatke v datoteko.
  • PHP nam omogoča veliko različnih načinov za branje in pisanje v datoteke, zato vedno lahko najdemo funkcijo, ki ustreza našim zahtevam.
  • Spoznajmo nekatere izmed njih ...

Branje niza znakov - fread()

  • Funkcijo fread() lahko uporabimo za branje niza znakov iz datoteke.
  • Sprejme dva argumenta:

    • oprimek datoteke in
    • število znakov, ki jih bomo prebrali.
  • Primer:

    • $oprimek = fopen("datoteka.txt", "r");
    • $podatki = fread($oprimek, 10);
  • Pri binarnih datotekah znak zasede vedno en zlog.
  • Kazalec datoteke se premakne naprej za število prebranih znakov.

    • V našem primeru za 10 znakov od začetka datoteke.
  • Pri ponovnem klicu funkcije fread() preberemo v našem primeru naslednjih 10 znakov.
  • Kaj se zgodi, če je do konca datoteke manj znakov, kot pa jih želimo prebrati?

Branje enega znaka - fgetc()

  • Če želimo prebrati samo en znak naenkrat lahko uporabimo funkcijo fgetc() .
  • fgetc() sprejme samo en argument – oprimek datoteke in vrne samo en znak iz datoteke na katero kaže.
  • Ko doseže konec datoteke vrne false .
  • Primer:

    • $en_znak = fgetc($oprimek);
  • Funkcija fgetc() je počasna pri delu z večjimi datotekami.

Zapis niza znakov - fwrite()

  • Za zapis niza znakov v datoteko uporabimo funkcijo fwrite() .
  • Sprejme dva argumenta:

    • oprimek datoteke in
    • niz, ki ga bomo zapisali.
  • Funkcija zapiše vsebino niza v datoteko in vrne število zapisanih znakov oz. false pri napaki.
  • Primer:

    • $oprimek = fopen("datoteka.txt", "w");
    • fwrite($oprimek, "ABCxyz123");
  • Prva vrstica odpre datoteko datoteka.txt za pisanje, kar izbriše obstoječe podatke (če datoteka ne obstaja jo PHP skuša ustvariti).
  • Druga vrstica zapiše niz ABCxyz123 na začetek datoteke.
  • Kazalec datoteke se pomakne za zadnji zapisani znak.
  • Število zapisanih znakov lahko omejimo s tretjim argumentom.
  • Primer:

    • fwrite($oprimek, "abcdefghij", 4);
    • V datoteko se zapiše samo "abcd".

Primer: Števec obiska

  • Zelo popularna uporaba spletnih skript je števec obiska spletne strani, ki pokaže kolikokrat je bila določena spletna stran obiskana in posledično kako popularna je.
  • Števci obiska obstajajo v različnih oblikah, najbolj preprost je tekstovni števec obiska.
  • Napišimo PHP skripto za preprost tekstovni števec obiska.

    (stevec_obiska.png)
    Primer izpisa v brskalniku

Primer: Števec obiska (izvedba)

  • Na začetku imamo vedno osnovno HTML kodo:

    (stevec_obiska_koda_01.png)
  • V neki poljubni mapi (recimo, da je to naša mapa: /home/dani ) ustvarimo mapo Vaje in nastavimo pravice, da lahko uporabnik www-data bere iz nje in piše vanjo.
  • Določimo ime datoteke, kjer bo hranjeno število obiskov:

    (stevec_obiska_koda_02.png)
  • Preverimo, če obstaja $stevec_datoteka ; če ne, jo ustvarimo z odpiranjem datoteke za pisanje in vanjo zapišemo 0 (števec obiska postavimo na nič) in datoteko zapremo:

    (stevec_obiska_koda_03.png)
  • Odpremo datoteko števca za branje; če ne gre, izpišemo opozorilo in zaključimo izvajanje skripte (ukaz die je ekvivalenten ukazu exit ):

    (stevec_obiska_koda_04.png)

Primer: Števec obiska (izvedba, nad.)

  • Uporabimo oprimek datoteke, da preberemo števec obiska s funkcijo fread ; prebran števec obiska pretvorimo v integer ; preberemo 20 zlogov (dovolj za zelo velik integer ):

    (stevec_obiska_koda_05.png)
  • Zapremo datoteko ter jo s tem sprostimo za branje in pisanje drugim procesom:

    (stevec_obiska_koda_06.png)
  • Števec obiska povečamo za 1:

    (stevec_obiska_koda_07.png)
  • Obiskovalcu izpišemo število dostopov do strani:

    (stevec_obiska_koda_08.png)
  • Odpremo datoteko števca za branje in vanjo zapišemo novo vrednost števca ter datoteko na koncu zapremo:

    (stevec_obiska_koda_09.png)
  • Na koncu ne pozabimo na HTML zaključek našega programa:

    (stevec_obiska_koda_10.png)

Še nekaj funkcij

  • feof() — Preveri ali smo na koncu datoteke
  • fgets() — Prebere eno vrstico naenkrat
  • fgetcsv() — Prebere vrstico z vejico ločenih podatkov (CSV – comma separated value)
  • file() — Prebere celotno datoteko v seznam brez potrebe po predhodnem odpiranju datoteke
  • file_get_contents() — Prebere celotno datoteko v niz brez potrebe po predhodnem odpiranju datoteke
  • fpassthru() — Prikaže vsebino odprte datoteke
  • readfile() — Prikaže vsebino odprte datoteke brez potrebe po predhodnem odpiranju datoteke
  • fseek() — Postavi kazalec datoteke na določeno pozicijo v datoteki
  • rewind() — Premakne kazalec datoteke na začetek
  • ftell() — Vrne trenutno pozicijo kazalca datoteke
  • Nekatere od teh funkcij bomo spoznali preko primerov še v naslednjih urah.
0%
0%