server_version query new migrations generar entidades create php symfony doctrine2 libxml2

php - query - simplexml_load_file(): advertencia de E/S: error al cargar la entidad externa & quot;/user-bundle/Resources/config/doctrine/model/User.orm.xml



Tengo un problema con mi implementación de producción de Symfony2,

He intentado muchas soluciones, pero ninguna ha funcionado.

Al azar tengo este error al acceder a mi aplicación Symfony en el entorno de producción:

( ! ) Fatal error: Uncaught exception ''Symfony/Component/Debug/Exception/ContextErrorException'' with message ''Warning: simplexml_load_file(): I/O warning : failed to load external entity "/home/user/symfony/vendor/friendsofsymfony/user-bundle/Resources/config/doctrine/model/User.orm.xml"'' in /home/user/symfony/app/bootstrap.php.cache on line 2998 ( ! ) Symfony/Component/Debug/Exception/ContextErrorException: Warning: simplexml_load_file(): I/O warning : failed to load external entity "/home/user/symfony/vendor/friendsofsymfony/user-bundle/Resources/config/doctrine/model/User.orm.xml" in /home/user/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php on line 736 Call Stack # Time Memory Function Location 1 0.0000 262880 {main}( ) ../app_dev.php:0 2 0.0015 572736 Symfony/Component/HttpKernel/Kernel->handle( ) ../app_dev.php:79 3 0.1342 4023952 Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel->handle( ) ../bootstrap.php.cache:2376 ( ! ) LogicException: Request stack is empty in /home/user/symfony/app/bootstrap.php.cache on line 2998 Call Stack # Time Memory Function Location 1 0.3330 7110120 Symfony/Component/Debug/ErrorHandler->handleException( ) ../classes.php:0 2 0.3331 7119696 Symfony/Component/Debug/ErrorHandler->handleException( ) ../classes.php:1939

Intenté actualizar mi versión de php (estaba en php 5.4.x y ahora en 5.6.4),

Intenté actualizar la versión de lixml2 (ahora estoy en 2.8.0, pero ya intenté actualizar en 2.9.3)

He comprobado que la versión de libxml utilizada en php es siempre 2.8.0, pero no he encontrado la manera de cambiar esto,

Intenté establecer el directorio completo de Symfony en chmod 777

Mi servidor es un servidor Debian 7.5.

Tal vez alguien que conozca este error pueda ayudarme

Aquí hay algunos enlaces a diferentes preguntas relacionadas con este:

Error aleatorio , error de FOSUserBundle y error de servicio

No publiqué en ellos porque están todos caducados

[EDITAR]

Encontré una solución rápida, pero está en proveedores, por lo que se anulará en la primera actualización de la actualización de doctrina:

QuickFix en XmlDriver.php Línea 737

$xmlElement = @simplexml_load_file($file); if(!$xmlElement){ $xmlData = file_get_contents($file); $xmlElement = simplexml_load_string($xmlData); }


Obtuvimos este error después de que comenzamos a usar libxml_disable_entity_loader(true); en nuestro código Ese código es vital para prevenir XXE -ataques (más información de eso aquí ). Si no tiene eso en su código, podría ser que haya instalado / actualizado un paquete que tiene esa línea de código en uso. Tenga en cuenta que libxml_disable_entity_loader() no es seguro para subprocesos, por lo que si hay un fragmento de código en un subproceso que ejecuta esa línea, todo en ese servidor ahora lo tiene habilitado durante todo el proceso.

El paquete de FOS parece usar xml-definitions, que a cambio tienen entidades externas en ellos. Sin embargo, nada importante, pero ese código impide que los métodos de FOS-bundles utilicen esos archivos correctamente.

Afortunadamente, nuestro servicio obtuvo ese error solo en un lugar, y la solución era obvia: agregue un libxml_disable_entity_loader(false); antes de ejecutar ese fragmento de código de donde proviene el error, y añada libxml_disable_entity_loader(true); justo después de esa pieza de código. De esta forma, el paquete de usuario podría cargar el xml: s que necesitaba, pero la seguridad no se vería comprometida.

Ejemplo:

libxml_disable_entity_loader(false); $user = $query->getOneOrNullResult(); // This generates an error if entity loader is disabled libxml_disable_entity_loader(true);