Материал из Joonte Wiki
м |
Alex Keda (обсуждение | вклад) (→Решение) |
||
Строка 55: | Строка 55: | ||
Откатить libxml до версии 2.6.30 и перекомпилировать PHP. | Откатить libxml до версии 2.6.30 и перекомпилировать PHP. | ||
+ | |||
+ | |||
+ | = Обновление, от 2011-11-21 = | ||
+ | |||
+ | на последних версиях софта, всё ровно | ||
+ | |||
+ | Оттестировано на libxml2-2.7.8 && php52-5.2.17_4 && FreeBSD 8.2 |
Текущая версия на 12:50, 21 ноября 2011
Описание
Обнаружена ошибка в связке php 5.2.5+ и libxml 2.6.30+
При обработке XML библиотека не восстанавливает XML сущности вида &entity;
Описание ошибки есть на официальном сайте PHP http://bugs.php.net/bug.php?id=45996
Симптомы
Лог ошибок системы (errors.log) содержит следующее:
[MySQL->Query]: SELECT COUNT(*) FROM HostingOrdersOwners WHERE `OrderDate` BEGIN_WEEK() [!] [1024]-[MySQL->Query]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN_WEEK()' at line 1 в линии 123 ...
Сценарий проверки
Для проверки наличия проблем с libxml используйте сценарий:
<? # Joonte Software 2007-2009 # The following PHP script shows libxml bug, which do not restore XML entities. # Solution: rebuild php with libxml-2.6.30. $XML = <<<EOD <XML> <Name>This is a test!</Name> <Bug>["] - must be quot</Bug> <Bug>[>] - must be right arrow</Bug> <Bug>[<] - must be left arrow</Bug> </XML> EOD; # Creating XML parser $Parser = Xml_Parser_Create('UTF-8'); # Set option Xml_Parser_Set_Option($Parser,XML_OPTION_SKIP_WHITE,TRUE); # Parse XML Xml_Parse_Into_Struct($Parser,$XML,$Stuct,$Indexes); Header('Content-Type: text\plain; charset=UTF-8'); echo "Original XML:\n"; echo HtmlEntities($XML); echo "--\n"; echo "Result of parsing:\n"; print_r($Stuct); ?>
Решение
Откатить libxml до версии 2.6.30 и перекомпилировать PHP.
Обновление, от 2011-11-21
на последних версиях софта, всё ровно
Оттестировано на libxml2-2.7.8 && php52-5.2.17_4 && FreeBSD 8.2