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
Fifi209
post
Post #2





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, 13:12:54 ) *
Trochę sprzeczne jest ze sobą to co mówisz. Z jednej strony cache_lite złe bo ma 1000+ linii kodu, a zaraz mówisz, że parsowanie XML'a jest spoczko. Gdzie sens?


Nigdy jakoś nie miałem problemów z obciążeniem przy parsowaniu xml.


Cytat(belliash @ 14.06.2009, 13:14:15 ) *
z tymi zasobami potrzebnymi na parsowanie xml to ja bym uwazal... co by sie z reka w nocniku nie obudzic...
poza tym nie na kazdy mserwerze sa dostepne rozszerzenia


Jak już wspominałem kod piszę, praktycznie tylko dla siebie.


Macie jakieś uwagi do kodu? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

@edit
Obiecałem rozszerzenie oparte na pliku xml
(w te klocki nie jestem dobry ale mi jako tako wyszło)

  1. <?php
  2.   # autor: fifi209 (Fast)
  3.    # class: CacheSystemXML
  4.    # version: 1.1
  5.  
  6.    class CacheSystemXML extends CacheSystem {
  7.    
  8.        private $path;
  9.        
  10.        public function __construct($dir, $compression, $path) {
  11.            $this->setXMLPath($path);
  12.            $this->destroyDie();
  13.            parent::__construct($dir, $compression);
  14.        }
  15.        
  16.        private function setXMLPath($path) {
  17.            if (@opendir($path)) {
  18.                $this->path = $path.'/cache.xml';
  19.                return true;
  20.            }else{
  21.                return false;
  22.            }
  23.        }
  24.        
  25.        public function setTimeLife($cacheFile, $time) {
  26.            if ($this->$cacheFile != false) {
  27.                if (!empty($this->path)) {
  28.                    $xml = simplexml_load_file($this->path);
  29.                    $edit=false;
  30.                    foreach ($xml->item as $item) { if ($item->name == $cacheFile) { $item->time = $time; $edit=true; } }
  31.                        if ($edit == false) {
  32.                            $item = $xml->addChild('item');
  33.                            $item->addChild('name', $cacheFile);
  34.                            $item->addChild('time', $time);
  35.                        }
  36.                        file_put_contents($this->path, $xml->asXML());
  37.                        return true;
  38.                }else{
  39.                    return false;
  40.                }    
  41.            }else{
  42.                return false;
  43.            }
  44.        }
  45.        
  46.        public function destroy($cacheFile) {
  47.            $result = parent::destroy($cacheFile);
  48.            if ($result == true) {
  49.                return $this->destroyDie();
  50.            }else{
  51.                return false;
  52.            }
  53.        }
  54.            
  55.        
  56.        public function destroyDie() {
  57.            if (!empty($this->path)) {
  58.                $xml = simplexml_load_file($this->path);
  59.                foreach ($xml->item as $item) {
  60.                    if ($item->time > time()) {
  61.                        $items[] = $item;
  62.                    }else{
  63.                        $this->destroy($item->name);
  64.                    }
  65.                }
  66.    
  67.                $new = new simplexmlelement('<?xml version="1.0" encoding="UTF-8"?><items></items>');
  68.                foreach ($items as $value) {
  69.                    $item = $new->addChild('item');
  70.                    $item->addChild('name', $value->name);
  71.                    $item->addChild('time', $value->time);
  72.                }
  73.                file_put_contents($this->path, $new->asXML());
  74.                
  75.                return true;
  76.            }else{
  77.                return false;
  78.            }
  79.        }
  80.    }
  81. ?>


Szablon pliku cache.xml:
Kod
<?xml version="1.0" encoding="UTF-8"?>
    <items>
    </items>


Ten post edytował fifi209 14.06.2009, 22:55:12
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: 15.10.2025 - 21:33