2010-04-22 9 views

Odpowiedz

1

Nie jestem w 100% pewien, czy moja odpowiedź jest poprawna, ale w PROJECT/lib/symfony/cache/sfCacheFile.class.php istnieje metoda: sfCacheFile::getFilePath(), która zwraca ścieżkę do pliku. Wygląda na to, że nie ma żadnej ochrony przed ograniczeniami systemu plików ext2.

Ale jest to bardzo proste rozwiązanie - zastąpić tę klasę:

  1. W PROJECT/apps/APP/config/factories.yml ustawić własną klasę cache:

    default: 
    # Others factories (if any) 
    
        view_cache: 
        class: myOwnFileCache 
        param: 
         automatic_cleaning_factor: 0 
         cache_dir:     %SF_TEMPLATE_CACHE_DIR% 
         lifetime:     86400 
         prefix:     %SF_APP_DIR%/template 
    
  2. Teraz stworzyć tę klasę i upewnić się, że rozciąga sfFileCache i zastępuje getFilePath()

    # PROJECT/lib/PROJECT/cache/myOwnFileCache.class.php   
    class myOwnFileCache extends sfFileCache { 
        protected getFilePath($key) { 
         /* 
          Convert from: abcdef 
             to: a/b/abcdef 
         */ 
         $key = substr($key, 0, 1) . DIRECTORY_SEPARATOR . substr($key, 1, 1) . DIRECTORY_SEPARATOR . $key; 
         return parent::getFilePath($key); 
        } 
    

    }

  3. Wyczyść cache: ./symfony cc

Teraz trzeba 32000 kluczy cache, który rozpoczyna z dokładnie tym samym dwóch liter/cyfr, by zniszczyć swój system plików.

+0

To jest pomysł; D dzięki – belaz

Powiązane problemy