[ zgas @ 19.10.2009. 12:04 ] @
Zelim da kreiram sigurnu Cache kalsu.

Podaci se upisuju u fajl.

Poenta sigurnosti je na kreiranju fajla i citanju fajla od strane korisnika.
Ne sme doci do gresaka prilikom upisa u fajl i prilikom citanja fajla.

Koliko sam video na internetu, mnogo se koriste flock() funkcije za zakljucavanje fajlova.
Medjutim razmatrajuci ovo na jednom mestu na ovom forumu:
http://www.elitesecurity.org/t378296-Azuriranje-cesto-posecenog-fajla

dosli smo do zakjlucka da je rename() funkcija idealna za ovu problematiku.

Interesuju me vasa iskustva i misljenja u vezi Cache sistema.

Unapred hvala.
[ Nikola Poša @ 19.10.2009. 13:17 ] @
Ne bih da zvučim demorališuće (kako glupa reč :S), ali ako praviš tu klasu samo radi potreba nekog tvog projekta, onda je bolje da se oprobaš sa nekim gotovim rešenjima, kao što je npr. APC. A ako to ipak nije slučaj, već jednostavno hoćeš da kreiraš neki svoj sistem keširanja, kojeg planiraš da objaviš, kao zaseban projekat, itd., onda pogledaj kako to radi npr. Zend Framework, odnosno, baci pogled na File adapter njegove Zend_Cache_Backend komponente. Ne verujem da će ti išta značiti taj članak u manual-u, i zato je bolje da pogledaš kod te klase. Evo npr. ove su dve ključne metode:
Code:

    protected function _fileGetContents($file)
    {
        $result = false;
        if (!is_file($file)) {
            return false;
        }
        $f = @fopen($file, 'rb');
        if ($f) {
            if ($this->_options['file_locking']) @flock($f, LOCK_SH);
            $result = stream_get_contents($f);
            if ($this->_options['file_locking']) @flock($f, LOCK_UN);
            @fclose($f);
        }
        return $result;
    }

Code:

    protected function _filePutContents($file, $string)
    {
        $result = false;
        $f = @fopen($file, 'ab+');
        if ($f) {
            if ($this->_options['file_locking']) @flock($f, LOCK_EX);
            fseek($f, 0);
            ftruncate($f, 0);
            $tmp = @fwrite($f, $string);
            if (!($tmp === FALSE)) {
                $result = true;
            }
            @fclose($f);
        }
        @chmod($file, $this->_options['cache_file_umask']);
        return $result;
    }
[ zgas @ 19.10.2009. 14:00 ] @
Hvala Nikola, nisam imao zivaca da pretrazujem glomazne Zend klase i nadjem metode za upisivanje i citanje.

Pravim kalsu za svoj Framework koji ne zelim da objavljujem ali zalim da radim projekte pomocu njega.
Zend mi je malo glomazan pa nisam hteo da ga implementiram hocu sto brze i jednostavnije klase.

Vidim da Zend koristi samo flock. rename() ne upotrebljava.

Znaci u sustini stavlja se shered lock pri citanj fajla, sto ce onemoguciti update fajla u vreme citanja.
Isto tako stavlja se eksluzivni lock pri formiranju fajla, sto onemogucuje u citanje i pisanje u fajl dok se upis ne zavrsi.
[ Miroslav Ćurčić @ 19.10.2009. 16:12 ] @
Konta li neko zašto su prilikom upisa koristili fopen(..., 'ab+') / fseek / ftruncate umesto jednostavnije fopen(..., 'wb') ?