simplexml_load_file (): предупреждение ввода-вывода: не удалось загрузить внешнюю сущность & amp; quot; /user-bundle/Resources/config/doctrine/model/User.orm.xml

У меня есть некоторые проблемы с моим производственным развертыванием Symfony2,

Я перепробовал много решений, но ни одно из них не сработало.

У меня случайно возникает эта ошибка при доступе к моему приложению Symfony в производственной среде:

( ! )   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

Я пытался обновить мою версию php (я был в php 5.4.x, а теперь в 5.6.4),

Я пытался обновить версию lixml2 (я нахожусь в 2.8.0 сейчас, но я уже пытался обновить в 2.9.3)

Я утверждал, что версия libxml, используемая в php, всегда 2.8.0, но я не нашел способа изменить это,

Я попытался установить весь каталог Symfony в CHMOD 777

Мой сервер является сервером Debian 7.5.

Может быть, кто-то, кто знает эту ошибку, может помочь мне

Вот несколько ссылок на различные вопросы, связанные с этим:

Случайная ошибка, Ошибка FOSUserBundle а также Сервисная ошибка

Я не писал в них, потому что они все устарели

[РЕДАКТИРОВАТЬ]

Я нашел быстрое решение, но оно есть у поставщиков, поэтому оно будет переопределено в первом обновлении доктрины:

QuickFix в XmlDriver.php Строка 737

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

11

Решение

Мы получили эту ошибку после того, как начали использовать libxml_disable_entity_loader(true); в нашем коде. Этот код имеет жизненно важное значение для предотвращения XXE-атак (более подробную информацию об этом в Вот). Если этого нет в вашем коде, возможно, вы установили / обновили пакет, в котором используется эта строка кода. Обратите внимание, что libxml_disable_entity_loader() не является потокобезопасным, поэтому, если в одном потоке есть один фрагмент кода, который выполняет эту строку, то все на этом сервере теперь включено на протяжении всего процесса.

Кажется, FOS-пакет использует xml-определения, которые, в свою очередь, содержат внешние сущности. Ничего особенного, но этот код мешает методам FOS-связок правильно использовать эти файлы.

К счастью, наш сервис получил эту ошибку только в одном месте, и исправление было очевидно:
Добавить libxml_disable_entity_loader(false); перед выполнением этого куска кода, откуда возникает ошибка, и добавьте libxml_disable_entity_loader(true); сразу после этого куска кода.
Таким образом, пользовательский пакет может загрузить необходимые ему xml: s, но безопасность не пострадает.

Пример:

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

Другие решения

По вопросам рекламы [email protected]