Я не уверен на 100%, правильный ли мой ответ, но в PROJECT/lib/symfony/cache/sfCacheFile.class.php
есть метод: sfCacheFile::getFilePath()
, который возвращает путь к файлу. Кажется, что нет никакой защиты от ограничений файловой системы ext2
.
Но есть очень простое решение - переопределить этот класс:
В PROJECT/apps/APP/config/factories.yml
установите свой собственный класс кэша:
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
Теперь создайте этот класс и убедитесь, что он расширяет sfFileCache
и переопределяет 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);
}
}
Очистить кеш: ./symfony cc
Теперь вам нужно 32000 ключей кэша, которые начинаются с с точно такими же двумя буквами / цифрами, чтобы разрушить вашу файловую систему.