Introducción
El error Exception: Local file is no longer allowed en Magento 2 es un problema común de seguridad que suele aparecer tras actualizar la plataforma o al intentar importar datos, procesar catálogos o utilizar módulos que manipulan archivos directamente en el sistema de archivos del servidor. Por motivos de seguridad y para prevenir vulnerabilidades de tipo LFI (Local File Inclusion), Magento restringe ciertas operaciones con archivos locales si no están debidamente autorizadas o si las rutas no cumplen con las políticas estrictas del framework.
Causas Principales del Error
Este fallo se desencadena principalmente por las siguientes razones:
- Intentar cargar un archivo desde una ruta absoluta que no está permitida por la clase
Magento\Framework\Filesystem\Directory\Read. - Cambios en las políticas de seguridad implementadas en parches recientes o versiones actualizadas de Magento 2.
- Configuraciones incorrectas en módulos de terceros que intentan leer archivos CSV o XML fuera de los directorios permitidos (var, pub, media).
Método 1: Validar y Utilizar Directorios Permitidos (Directory List)
La forma más recomendada por Adobe/Magento para solucionar este problema sin comprometer la seguridad del sitio es asegurar que tu código o el módulo afectado utilice los directorios permitidos por la instancia.
- Identifica el archivo y la línea de código que lanza la excepción revisando el archivo
var/log/exception.log. - Modifica la llamada para utilizar las instancias de directorio predefinidas de Magento en lugar de rutas absolutas crudas.
- Ejemplo de código correcto utilizando la clase
DirectoryList:
use Magento\Framework\App\Filesystem\DirectoryList;
protected $directoryList;
public function __construct(DirectoryList $directoryList) {
$this->directoryList = $directoryList;
}
public function getPath() {
return $this->directoryList->getPath(DirectoryList::VAR_DIR);
}Método 2: Aplicar la Solución a Través de Plugins o Sobrescritura en Módulos de Terceros
Si el error proviene de un módulo comercial o gratuito instalado en tu tienda:
- Contacta al desarrollador para obtener una versión compatible con la última versión de tu Magento 2.
- Si necesitas una solución rápida, puedes crear un plugin (interceptor) para interceptar el método de validación de archivos y permitir la ruta específica bajo tu propio riesgo de seguridad.
- Limpia la caché de Magento ejecutando el siguiente comando en tu terminal SSH:
bin/magento cache:clean.
Conclusión
El error Exception: Local file is no longer allowed es una medida de protección de Magento que no debe ignorarse desactivando salv7aguardas globales. Siguiendo las buenas prácticas de desarrollo y utilizando los objetos de gestión de archivos del framework, podrás solucionar este inconveniente de raíz y mantener tu tienda e-commerce segura y funcional.