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ę:
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
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);
}
}
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.
To jest pomysł; D dzięki – belaz