Tässä on yksinkertainen flat-file skripti. Flat-file skriptiä käyttää esimerkiksi edgeBoard.
Flat-file skripti tallentaa monta tiedostoa yhteen tiedostoon. Elikkä toimii samalla lailla kuin UNIXin tar-ohjelma.
flatfile.php
<?php /* * Yksinkertainen flat-file skripti * Tehnyt: mikaelh * http://koti.mbnet.fi/mikaelh * Saa käyttää vapaasti skripteissä, joiden lähdekoodi on saatavilla. */ class flatfile { var $tiedostots; var $tiedostotn; function tyhjenna() { $this->tiedostots = array(); $this->tiedostotn = array(); } function lue($tiedosto) { if (file_exists($tiedosto)) { $tiedoston_sisalto = file($tiedosto); $tiedostojen_maara = (int) trim($tiedoston_sisalto[0]); $tiedostotk = array(); $alkutietojen_pituus = strlen($tiedoston_sisalto[0]); for ($i = 0; $i < $tiedostojen_maara; $i++) { list($nimi, $koko) = explode("|", trim($tiedoston_sisalto[$i+1])); array_push($this->tiedostotn, $nimi); array_push($tiedostotk, $koko); array_push($this->tiedostots, ""); $alkutietojen_pituus += strlen($tiedoston_sisalto[$i+1]); } unset($tiedoston_sisalto); $place = 0; $fp = @fopen($tiedosto, "r"); for ($i = 0; $i < $tiedostojen_maara; $i++) { fseek($fp, ($alkutietojen_pituus+$place)); $this->tiedostots[$i] = fread($fp, $tiedostotk[$i]); $place += $tiedostotk[$i]; } fclose($fp); return(true); } return(false); } function tallenna($tiedosto) { $uusi_tiedosto = ""; $uusi_tiedosto .= (count($this->tiedostotn)."\n"); foreach ($this->tiedostotn as $key => $value) { $uusi_tiedosto .= ($value."|".strlen($this->tiedostots[$key])."\n"); } foreach ($this->tiedostots as $key => $value) { $uusi_tiedosto .= $value; } $fp = @fopen($tiedosto, "w"); if (!$fp) return(false); fwrite($fp, $uusi_tiedosto); fclose($fp); return(true); } function avaa_tiedosto($nimi) { $etsi = array_search($nimi, $this->tiedostotn); if (is_null($etsi) || $etsi === false) return(false); return($this->tiedostots[$etsi]); } function lisaa_tiedosto($nimi, $sisalto) { $etsi = array_search($nimi, $this->tiedostotn); if (!is_null($etsi) && $etsi !== false) return(false); if (strstr($nimi, "|") !== false) return(false); if (strstr($nimi, "\n") !== false) return(false); array_push($this->tiedostotn, $nimi); array_push($this->tiedostots, $sisalto); return(true); } function poista_tiedosto($nimi) { $etsi = array_search($nimi, $this->tiedostotn); if (is_null($etsi) || $etsi === false) return(false); array_splice($this->tiedostotn, $etsi, 1); array_splice($this->tiedostots, $etsi, 1); return(true); } function korvaa_tiedosto($nimi, $sisalto) { $etsi = array_search($nimi, $this->tiedostotn); if (is_null($etsi) || $etsi === false) return(false); $this->tiedostots[$etsi] = $sisalto; return(true); } function tiedosto_olemassa($nimi) { $etsi = array_search($nimi, $this->tiedostotn); if (is_null($etsi) || $etsi === false) return(false); return(true); } } ?>
testi.php
<?php //Flat-filen testaus skripti include("flatfile.php"); $flatfile = new flatfile; $flatfile->tyhjenna(); if (!file_exists("testit.txt")) { $flatfile->lisaa_tiedosto("testi.txt", "Tää on tälläinen testi vain."); $flatfile->lisaa_tiedosto("testi2.txt", "Tää on toinen testi."); $flatfile->lisaa_tiedosto("testi3.txt", "Tässä on testissä on myös rivinvaihto.\nTää on sen rivinvaihdon jälkeen."); $flatfile->tallenna("testit.txt"); } else { $flatfile->lue("testit.txt"); echo($flatfile->avaa_tiedosto("testi.txt")."\n"); echo($flatfile->avaa_tiedosto("testi2.txt")."\n"); echo($flatfile->avaa_tiedosto("testi3.txt")."\n"); } ?>
testit.txt
testaus skriptin tulos: 3 testi.txt|28 testi2.txt|20 testi3.txt|71 Tää on tälläinen testi vain.Tää on toinen testi.Tässä on testissä on myös rivinvaihto. Tää on sen rivinvaihdon jälkeen.
Kommentteja, kiitos.
(Näinhän ne kaikki sanovat)
Ihan toimivan näköisiä funktioita.
Kätsy!
joo, en nyt jääny testaan, mutta rekisteröityminen rulz :D
jeeee
Ihan kivan näköistä koodia ja varmasti jollekkin on hyötyä
Aihe on jo aika vanha, joten et voi enää vastata siihen.