simplexml charger le fichier(): I/O avertissement: échec de chargement de l'entité externe "/utilisateur-bundle/Resources/config/doctrine/modèle/de l'Utilisateur.orm.XML

j'ai un problème avec mon déploiement en production de Symfony2,

j'ai essayé plusieurs solutions, mais aucune n'a fonctionné.

j'ai au hasard cette erreur en accédant à mon application symfony sur l'environnement de production:

( ! )   Fatal error: Uncaught exception 'SymfonyComponentDebugExceptionContextErrorException' 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
( ! )   SymfonyComponentDebugExceptionContextErrorException: 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  SymfonyComponentHttpKernelKernel->handle( )  ../app_dev.php:79
3   0.1342  4023952 SymfonyComponentHttpKernelDependencyInjectionContainerAwareHttpKernel->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 SymfonyComponentDebugErrorHandler->handleException( )    ../classes.php:0
2   0.3331  7119696 SymfonyComponentDebugErrorHandler->handleException( )    ../classes.php:1939

j'ai essayé de mettre à jour ma version php (j'étais en php 5.4.x et maintenant dans 5.6.4),

j'ai essayé de mettre à jour la version lixml2 (je suis en 2.8.0 maintenant, mais j'ai déjà essayé de mettre à jour en 2.9.3)

j'ai constatés que la version de libxml en php est toujours 2.8.0, mais, je n'ai pas trouvé le moyen de changer cela ,

j'ai essayé de définir le répertoire de symfony dans chmod 777

mon serveur est un serveur debian 7.5.

Peut-être quelqu'un qui sait cette erreur peut m'aider

<!-Voici quelques liens vers des questions différentes liées à celle-ci:

Erreur Aléatoire,FOSUserBundle Error et Service erreur

Je ne les ai pas postées parce qu'elles sont toutes périmées

[EDIT]

j'ai trouvé une solution rapide, mais c'est dans les vendeurs, donc il sera annulé dans la première mise à jour de la doctrine de mise à jour:

QuickFix dans XmlDriver.php Ligne 737

$xmlElement = @simplexml_load_file($file);
if(!$xmlElement){
        $xmlData = file_get_contents($file);
        $xmlElement = simplexml_load_string($xmlData);
}
11
demandé sur Community 2015-01-23 13:04:46

2 réponses

nous avons eu cette erreur après avoir commencé à utiliser libxml_disable_entity_loader(true); dans notre code. Ce code est vital pour prévenir les attaques XXE(plus d'infos sur ce sujet dans ici). Si vous ne l'avez pas dans votre code, il se peut que vous ayez installé/mis à jour un paquet qui utilise cette ligne de code. Notez que libxml_disable_entity_loader() n'est pas un thread sûr, donc s'il y a un morceau de code sur un thread qui exécute cette ligne, tout ce qui se trouve sur ce serveur est maintenant activé tout au long du processus.

le FOS-bundle semble utiliser xml-définitions, qui en retour ont des entités externes. Rien de majeur cependant, mais ce code empêche les méthodes FOS-bundles d'utiliser ces fichiers correctement.

par chance, notre service n'a eu cette erreur qu'à un seul endroit, et le correctif était évident: Ajouter un libxml_disable_entity_loader(false); avant l'exécution de ce morceau de code où vient l'erreur, et ajouter libxml_disable_entity_loader(true); juste après ce morceau de code. De cette façon, le paquet d'utilisateurs pourrait charger le xml:S nécessaire, mais la sécurité n'est pas compromise.

Exemple:

libxml_disable_entity_loader(false);
$user = $query->getOneOrNullResult(); // This generates an error if entity loader is disabled
libxml_disable_entity_loader(true);
0
répondu GotBatteries 2017-10-05 07:53:57