| Duomenų įrašymas į failą |
|
Anksčiau populiariausias būdas saugoti informaciją būdavo kaupti ją paprastame *.dat ar tekstiniame faile. Duomenys buvo skaitomi iš jo ir rašomi į jį, kol neatsirado greitesnis būdas - duomenų bazės. Nors duomenų bazių vartojimas vis populiarėja, failų skaitymas ir rašymas į juos yra naudingi. Pagrindinės funkcijos skaitymui bei rašymui: fopen(), fgets(), fputs(), fclose(), feof(); Jų pilnai pakanka darbui su failais. fopen() funkcija fopen - atidaro failą (skaitymui, rašymui arba papildimui). fopen(string failo_pavadinimas, string mode); mode - kokiai "sesijai" atidaryti failą. O "sesijos" yra štai tokios: 'r' - atidaro failą tik skaitymui, žymeklį pastato failo pradžioje, 'r+' - atidaro failą skaitymui ir rašymui, žymeklį pastato failo pradžioje, 'w' - atidaro failą rašymui, žymeklį pastato failo pradžioje, failo dydį nunulina (ištrina visus buvusius duomenis), o jei failas neegzistuoja - sukuria jį, 'w+' - atidaro failą skaitymui ir rašymui, žymeklį pastato failo pradžioje, faila nunulina, o jei failo nėra, jį sukuria, 'a' - atidaro failą tik rašymui, pastato žymeklį į failo pabaigą, jei failas neegzistuoja - sukuria jį, 'a+' - atidaro failą ir skaitymui ir rašymui, pastato žymeklį į failo pabaigą, jei failas neegzistuoja - sukuria jį. Pavyzdžiai: $fp = fopen("/home/katalogas/file.txt", "r"); $fp = fopen("http://www.mano.lt", "r"); $fp = fopen("ftp://vartotojas: Šis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript /", "w"); Atidarius failą, atlikus savo veiksmus, būtinai reikia jį uždaryti, pasinaudojus funkcija fclose();, pvz.: fclose($fp); fputs(); - įrašo duomenis į failą, fgets(); - nuskaito nurodyto ilgio eilutę į string tipo kintamąjį, $string = fgets($fp,255); // nuskaito visą eilutę Pavyzdys: $fp = fopen("/katalogas/failas.txt", "r"); while ($bf = fgets($fp, 4096)) { echo $bf; } fclose($fp); Nuskaito visas failo eilutes ir išveda į ekraną. Bet ciklą galime pakeisti paprastesniu: $fp = fopen("/katalogas/failas.txt", "r"); while (!feof($fp)) { $bf = fgets($fp, 4096) echo $bf; } fclose($fp); Dabar ciklas vykdomas tol, kol prieinama failo pabaiga. Padarykime paprasčiausią puslapio skaitliuką, kad pamatytume, kaip gi iš tiesų veikia aukščiau aprašytos funkcijos: <?php $filename = "skait.dat"; /* Priskiria kintamajam failo pavadinimą */ $fp = @fopen($filename,"r"); // Atidaro failą skaitymui if ($fp) { /* Jei failas atidarytas, vykdomas sąlygos sakinys */ $counter=fgets($fp,10); /* Į kintamąjį nuskaitoma skaitliuko reikšmė */ fclose($fp); // Uždaromas failas } else { $counter=0; /* Jei failo nebuvo, skaitliukui priskiriamas nulis */ } $counter++; /* Skaitliuko reikšmė padidinama vienetu */ echo $counter; // Išspausdinama reikšmė $fp = fopen($filename,"w"); /* Ir toliau į failą įdedama nauja skaitliuko reikšmė, padidinta vienetu. */ if ($fp) { $counter=fputs($fp,$counter); fclose($fp); } ?> Štai taip savo puslapiui galima pasigaminti skaitliuką. Jei puslapis dažnai lankomas, galite susidurti su problema, kad du lankytojai ateis vienu metu, tuo pačiu vienas skaitys, kitas rašys, o tai negalima, todėl skaitliuko duomenys bus neteisingi. Kad tai išpręstume, galima naudoti funkciją flock(). Ši funkcija laikinai sustabdo antro vartotojo darbą ir palaukia, kol pirmasis baigs dirbti su failu, tada antrajam vartotojui leidžiama pradėti dirbti. Patariama kuo dažniau naudoti šią funkciją dažnai lankomuose puslapiuose. Pavyzdys: $failas = @fopen('skait.dat','r'); flock = ($naujas_failas,2); $count = fgets($file, 255); $count++; flock = ($naujas_failas,3); fclose($file); Šiuo atveju jūs esate apsaugoti nuo galimo duomenų praradimo. Tekstiniai failai - puiki duomenų bazių alternatyva pradedančiajam. Jam nebūtinas nei specialus palaikimas, nei labai didelės PHP žinios. Todėl paprastiems projektėliams pilnai turėtų pakakti ir duomenų saugojimo faile. Informacijos perskaitymas iš tekstinio failo <?php $failas="duomenys.txt"; $duomenys = fopen($failas, "r"); $informacija = fread($duomenys, filesize($failas)); fclose($duomenys); echo $informacija; ?> Naujas įrašymas ištrinant visus senus duomenis <?php $informacija="Tekstas, įrašomas į failą"; $failas="duomenys.txt"; $duomenys=fopen($failas, "w"); fwrite($duomenys, "$informacija"); fclose($duomenys); ?> Įrašymas neištrinant senų duomenų, o tęsiant sąrašą toliau <?php $informacija="Tekstas, įrašomas į failą"; $failas="duomenys.txt"; $duomenys=fopen($failas, "a"); fwrite($duomenys, "$informacija\n"); fclose($duomenys); ?> Tekstinė duomenų bazė Pavyzdys: Jonas|19|192|77 Pateikta eilutė apibūdina asmens vardą, amžių, ūgį ir svorį. Taigi, duomenys.txt struktūra turi būti tokia: tekstas0|tekstas1|tekstas2|tekstas3. Kodo fragmento esmė tokia, kad yra perskaitoma eilutėje surašyta informacija ir išskirstoma į atskirus atitinkamus kintamuosius $laukelis[$i]. Šiuo būdu jau įmanoma sukurti panašią į duomenų bazės lentelę: <?php $failas="duomenys.txt"; $simboliu_skaicius = count($failas); $stulpelis = file($failas); for($i=0; $simboliu_skc > $i; $i++){ $laukelis = explode("|", $stulpelis[$i]); } echo "$laukelis[0] $laukelis[1] $laukelis[2] $laukelis[3]"; ?> Kintamasis, į kurį įveda informacija, turėtų būti toks: $informacija="Mindaugas|20|185|70"; Tekstinė duomenų bazė Pavyzdys: Mindaugas|20|185|70 Kristina|20|174|50 Rimantas|50|190|80 [..] Vaida|19|171|53 duomenys.txt failo sukūrimas yra toks: <?php $vardas="vardas"; $amzius="amžius"; $ugis="ūgis"; $svoris="svoris"; $informacija=$vardas."|".$amzius."|".$ugis."|".$svoris; $failas="duomenys.txt"; $duomenys=fopen($failas, "a"); fwrite($duomenys, "$informacija\n"); fclose($duomenys); ?> |