Tôi không chắc chắn 100% câu trả lời có đúng hay không nhưng trong PROJECT/lib/symfony/cache/sfCacheFile.class.php
có một phương thức: sfCacheFile::getFilePath()
trả về đường dẫn đến tệp. Dường như không có bất kỳ sự bảo vệ nào chống lại các giới hạn của hệ thống tệp ext2
.
Nhưng có một giải pháp rất đơn giản - ghi đè lên lớp rằng:
Trong PROJECT/apps/APP/config/factories.yml
thiết lập lớp bộ nhớ cache của riêng bạn:
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
Bây giờ, tạo lớp đó và chắc chắn rằng nó kéo dài sfFileCache
và ghi đè 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);
}
}
Xóa bộ nhớ đệm: ./symfony cc
Bây giờ bạn cần 32000 phím bộ nhớ cache mà bắt đầu với chính xác cùng hai chữ cái/chữ số để đè bẹp hệ thống tập tin của bạn.
Đó là ý tưởng; D cảm ơn – belaz