Материал из Joonte Wiki
Перейти к: навигация, поиск

Описание

Обнаружена ошибка в связке php 5.2.5+ и libxml 2.6.30+

При обработке XML библиотека не восстанавливает XML сущности вида &entity;

Описание ошибки есть официальном сайте 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>[&quot;] - must be quot</Bug>
 <Bug>[&gt;] - must be right arrow</Bug>
 <Bug>[&lt;] - 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.