Čitanje iz fajla red po red
U svrhu čitanja podataka iz fajla red po red koriste se
funkcije
fgets,
fgetss i
fgetcsv. Evo daću program koji
čita celi fajl i ispisuje njegov sadržaj. Nakon toga sledi komentar:
$fp = @fopen("podaci.txt", "r");
if ($fp) {
while (!feof($fp)) {
$citaj = fgets($fp, 4096);
echo $citaj . "<br>";
}
fclose($fp);
}
Rezultat programa biće:
1 Milan 176 70
2 Pera 185 95
3 Dejan 171 81
4 Slavko 189 105
Iskazom $fp=@fopen("podaci.txt", "r"); kao što znamo smo otvorili fajl i to samo
za čitanje jer smo izabrali za drugi parametar slovo "r". Na početku smo stavili
znak "@" koji ne dozvoljava pojavljivanje u brauzeru pojavljivanje programske
poruke o grešci ukoliko nastane zbog nepostojanja fajla ili nemogućnosti
njegovog otvaranja. Nakon toga ispitujemo da li je uspešno otvoren fajl pomoću
izraza if (!$fp) . Kad se otvori fajl promenjljiva $fp postaje definisana a ako
dodje do bilo kakve greške prilikom otvaranja fajla ta promenjljiva neće biti
definisana. E sad recimo da nije definisana znači
if će vratiti false pa
je potrebno da u
else delu
if naredbe postavimo našu poruku o
grešci i izlalak iz programa. Ali ako postavimo operator negacije "
! "
onda menjamo logiku
if naredbe i tad možemo na
true pisati poruku
o grešci odma nakon
if uslova i time izbeći suvišne redove sa
else.
U
while petlji čitamo sve podatke do kraja fajla. To nam omogućava
funkcija
feof tako što njome petlja
while proverava da li se došlo
do kraja fajla ili ne. Jedini parametar funkcije
feof je pokazivač na
fajl.
Feof funkcija vraća
true ako je pokazivač na kraju fajla.
Indikator za kraj fajla je
EOF kog poseduju svi fajlovi kao znak za kraj
fajlova. Uopšteno
while petlja vrši iteracije sve dok se ne pojavi u
uslovu
false. A kako
feof vraća
true u trnutku kad se
pokazivač nadje na kraju onda moramo izmeniti logiku
feof funkcije
"spolja" i zato koristimo negaciju "
! ".
Funkcija fgets se koristi za čitanje fajla.
$sadrzaj = fgets($fp, 4096);
Ova funkcija čita jedan red teksta u fajlu. Ona čita sve dok ne naidje na znak
za novi red, na kraj fajla ili dok ne pročita sve iz jednog reda. Svi tekst
fajlovi imaju maksimalnu dužinu reda od 998 bajta. A mi smo u drugom parametru
funkcije fgets i zato stavili 999, odnosno to je 998 uvećan za jedan bajt.
Normalno ukoliko stavimo recimo 500 umesto 999 neće ići funkcija fgets kada čita
do samog kraja reda, već će ići do 500 bajta u redu. Takodje ako želimo da nam
red bude duži od standardne dužine onda pišemo na primer 5000.
Za čitanje fajla red po red može se koristiti i funkcija fgetss koja ima sledeći
oblik:
fgetss($fp, $dužina [, string dozvoljeni_znaci]);
Ona se razlikuje od fgets po tome što briše sve PHP i HTML oznake iz teksta koga
isčitava iz fajla. Medjutim ako želimo da ne izbaci neke PHP ili HTMAL znakove
onda njih navedemo u parametru funkcije kog smo predstavili sa
“dozvoljeni_znaci”. Za čitanje fajla u kome su korisnici sajta unosili podatke
neophodno je koristiti funkciju fgetss, jer HTML ili PHP kod iz datoteke može da
ugrozi bezbednost sajta.
Postoji još i funkcija fgetcsv koji ima sledeći oblik:
array fgetcsv (int $fp, int dužina [, string graničnik [,
string navodnik]];
Ova funkcija čita redove iz fajla u formatu sa graničnikom – tabulatorskim
znakom ili zarezom – koji obično koriste programi za tabelarna izračunavanja i
slično. Omogućava jednostavno izdvajanje promenjljivih iz zapisa fajla bez
analiziranja tekstualnih redova. Funkcija se poziva isto kao i fgets ali joj se
prosledjuje graničnik za razdvajanje polja. Na primer:
$sadržaj = fgetcsv($fp, 120, "\t");
Znači, čita red iz fajla i rastavljaga čim naidje na tabulator "\t". Rezultati
se vraćaju kao niz u promenjljivu $sadržaj u našem slučaju. Parametar „dužina“
bi trebao da bude broj bajtova veći od najvećeg broja bajtova koje ima jedno
polje zapisa u fajlu. Parametar „navodnik“ koristite da bi ste odredili šta
stoji ispred i iza svakog polja u redu. Ako ništa ne stoji podrazumevan znak je
"" (običan navodnik).