我不确定我的答案是否正确,但有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
Run Code Online (Sandbox Code Playgroud)现在创建该类并确保它扩展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);
}
Run Code Online (Sandbox Code Playgroud)
}
清除缓存:./symfony cc
现在您需要 32000 个以完全相同的两个字母/数字开头的缓存键来粉碎您的文件系统。