Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> CacheSystem, Chciałbym abyście ocenili mój Cache System
Fifi209
post
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


  1. <?php
  2. # autor: fifi209 (Fast)
  3.    # class: CacheSystem
  4.    # version: 1.02
  5.  
  6.    class CacheSystem {
  7.    
  8.        const COMPRESSION_NONE=0;
  9.        const COMPRESSION_BZIP2=1;
  10.        protected $dir;
  11.        private $compression;
  12.        
  13.        public function __construct($dir, $compression) {
  14.            if (@opendir($dir)) {
  15.                $this->dir = $dir;
  16.                switch ($compression) {
  17.                    case self::COMPRESSION_NONE:
  18.                        $this->compression = false;
  19.                        break;
  20.                    case self::COMPRESSION_BZIP2:
  21.                        $this->compression = true;
  22.                        break;
  23.                }
  24.            }else{
  25.                echo 'Podany katalog nie istnieje lub nie masz praw do jego otworzenia.';
  26.            }
  27.        }
  28.        
  29.        public function __get($cacheFile) {
  30.            if (file_exists($this->dir.'/'.$cacheFile.'.cache')) {
  31.                if ($this->compression == false) {
  32.                    return file_get_contents($this->dir.'/'.$cacheFile.'.cache');
  33.                }else{
  34.                    $handle = bzopen($this->dir.'/'.$cacheFile.'.cache', 'r');
  35.                    $text = bzread($handle, filesize($this->dir.'/'.$cacheFile.'.cache'));
  36.                    bzclose($handle);
  37.                    return $text;
  38.                }
  39.            }else{
  40.                return false;
  41.            }
  42.        }
  43.        
  44.        public function __set($cacheFile, $value) {
  45.            if ($this->compression == false) {
  46.                file_put_contents($this->dir.'/'.$cacheFile.'.cache', $value);
  47.                return true;
  48.            }else{
  49.                $handle = bzopen($this->dir.'/'.$cacheFile.'.cache', 'w');
  50.                bzwrite($handle, $value);
  51.                bzclose($handle);
  52.                return true;
  53.            }
  54.        }
  55.        
  56.        public function destroy($cacheFile) {
  57.            if ($this->$cacheFile != false) {
  58.                unlink($this->dir.'/'.$cacheFile.'.cache');
  59.                return true;
  60.            }else{
  61.                return false;
  62.            }
  63.        }
  64.        
  65.    }
  66. ?>


Napisałem ją dla siebie, ale może się komuś przyda. A teraz prosiłbym o jakieś uwagi dot. kodu, tj. co by można zmienić, zrobić inaczej.
Wydaje mi się, że jak na tą prostotę funkcjonalność jest wystarczająca. (przynajmniej dla mnie)

Użycie przykładowe:

Najpierw konstruktor:
  1. <?php
  2. $cache = new CacheSystem('cache', CacheSystem::COMPRESSION_NONE);
  3. ?>


Parametr pierwszy - ścieżka do folderu cache
Parametr drugi - używana kompresja (w tym wypadku brak, lecz "NONE" można zastąpić "BZIP2")

a) Dodawanie cache/Zmienianie jego wartości (konstruktor pomijam)
  1. <?php
  2. $cache->podstrona = 'Jakas wartosc';
  3. ?>


(IMG:http://forum.php.pl/style_emoticons/default/cool.gif) Odczyt cache
  1. <?php
  2. echo $cache->podstrona;
  3. ?>


c) Usuwanie cache
  1. <?php
  2. $cache->destroy('podstrona');
  3. ?>


podstrona -> nazwa pliku cache (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował fifi209 14.06.2009, 22:54:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kamil_biela
post
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 7
Dołączył: 14.06.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


setXMLPath, to IMO powinno być w konstruktorze, z wymaganą zmienną path.

Jak zdziedziczę to mam metody $o->destroy() i $o->destroyDie(). Bezsensowne nazewnictwo. Poza tym, z tego co widzę to przed odczytem, muszę dać destroyDie(), które przejdzie przez cały system keszowania? Bzdura. Czyli jak mam 10000 plików keszu, to serwer klęka.

To powinno wyglądać tak, że przy odczycie danego elementu keszu, jest sprawdzany tylko jego TTL i usuwany w tym momencie.
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(kamil_biela @ 14.06.2009, 23:23:31 ) *
setXMLPath, to IMO powinno być w konstruktorze, z wymaganą zmienną path.

Jak zdziedziczę to mam metody $o->destroy() i $o->destroyDie(). Bezsensowne nazewnictwo. Poza tym, z tego co widzę to przed odczytem, muszę dać destroyDie(), które przejdzie przez cały system keszowania? Bzdura. Czyli jak mam 10000 plików keszu, to serwer klęka.

To powinno wyglądać tak, że przy odczycie danego elementu keszu, jest sprawdzany tylko jego TTL i usuwany w tym momencie.


Nie wiem co w nazewnictwie jest nie tak. :< Wysłucham Twoich propozycji.

Przecież destroyDie odczyta, które są już nieużyteczne i je wywali - fakt mogłem to inaczej rozwiązać, poprawię to w kolejnej wersji.

Co do konstruktora, niestety odpada bo musiałbym nadpisać konstruktor z klasy głównej - co za tym idzie niepotrzebny kod + zmiany w dostępie do zmiennych w klasie głównej.

Ten post edytował fifi209 14.06.2009, 22:41:01
Go to the top of the page
+Quote Post
kamil_biela
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 7
Dołączył: 14.06.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(fifi209 @ 14.06.2009, 23:34:21 ) *
Nie wiem co w nazewnictwie jest nie tak. :< Wysłucham Twoich propozycji.


destroyDie, jest nieintuicyjne. brzmi trochę jak jakieś combo w mortal combat.
cleanAll, checkAllLifetime, można pewnie jeszcze coś lepszego wymyślić.

Cytat(fifi209 @ 14.06.2009, 23:34:21 ) *
Przeciez destroyDie odczyta, które są już nieużyteczne i je wywali - fakt mogłem to inaczej rozwiązać, poprawię to w kolejnej wersji.


Fakt, ale przechodzenie po wszystkich elementach mija się ogólnie z celem. Jako ogólna metoda ok, może się przydać, ale przy odczycie pojedynczego elementu mam sprawdzać wszystkie?

Cytat(fifi209 @ 14.06.2009, 23:34:21 ) *
Co do konstruktora, niestety odpada bo musiałbym nadpisać konstruktor z klasy głównej - co za tym idzie niepotrzebny kod + zmiany w dostępie do zmiennych w klasie głównej.


a parent::__construct to już się nie da wywołać?

Ten post edytował kamil_biela 14.06.2009, 22:44:39
Go to the top of the page
+Quote Post

Posty w temacie
- fifi209   CacheSystem   13.06.2009, 22:58:36
- - Moli   Zły dział. Jest dział do ocen. A co jak będę chci...   13.06.2009, 23:06:03
|- - fifi209   Cytat(Moli @ 14.06.2009, 00:06:03 ) Z...   13.06.2009, 23:11:50
- - kamil_biela   osobiście wolalbym pobierać/ustawia...   14.06.2009, 00:50:17
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 01:50...   14.06.2009, 01:06:46
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 02:06:46 ...   14.06.2009, 01:18:10
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 02:18...   14.06.2009, 10:01:44
- - kamil_biela   Kesz który wymaga połączenia z bazą danych? Oczywi...   14.06.2009, 11:27:08
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 12:27...   14.06.2009, 11:32:24
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 12:32:24 ...   14.06.2009, 11:45:57
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 12:45...   14.06.2009, 11:50:12
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 12:50:12 ...   14.06.2009, 11:54:43
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 12:54...   14.06.2009, 12:09:04
- - kamil_biela   Trochę sprzeczne jest ze sobą to co mówisz. Z jedn...   14.06.2009, 12:12:54
- - fifi209   Cytat(kamil_biela @ 14.06.2009, 13:12...   14.06.2009, 22:08:47
- - kamil_biela   setXMLPath, to IMO powinno być w konstruktorze, z ...   14.06.2009, 22:23:31
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 23:23...   14.06.2009, 22:34:21
|- - kamil_biela   Cytat(fifi209 @ 14.06.2009, 23:34:21 ...   14.06.2009, 22:43:26
|- - fifi209   Cytat(kamil_biela @ 14.06.2009, 23:43...   14.06.2009, 22:56:27
- - erix   Cache'owanie + kompresja = zuo Poza tym, nie ...   15.06.2009, 10:01:28


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 16:54