2010-04-22 12 views

Respuesta

1

No estoy 100% seguro de si mi respuesta es correcta, pero en PROJECT/lib/symfony/cache/sfCacheFile.class.php hay un método: sfCacheFile::getFilePath() que devuelve una ruta a un archivo. Parece que no hay ninguna protección contra las limitaciones del sistema de archivos ext2.

Pero hay una solución muy simple - omiso de esa clase:

  1. En PROJECT/apps/APP/config/factories.yml configurar su propia clase caché:

    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. Ahora crear esa clase y asegurarse de que se extiende sfFileCache y sobrescribe 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. Borrar caché: ./symfony cc

Ahora necesita 32000 claves de caché que se inicia con exactamente el mismo dos letras/dígitos para aplastar a su sistema de archivos.

+0

Esa es la idea; D gracias – belaz

Cuestiones relacionadas