Проверка PHP XML создает фатальные исключения при передаче неверного XML - PullRequest
5 голосов
/ 28 августа 2011

У меня есть быстрая функция для загрузки строки XML и проверки ее по схеме. Когда его правильно сформированный XML, он ведет себя отлично.

Однако, когда я испортил сам синтаксис xml, php выдает фатальную ошибку и убивает скрипт. Я проверяю возвращаемое значение функции loadXML и хочу получить простое значение true / false. Если xml грязный, loadXML () завершится ошибкой, и я могу просто вернуть ошибку проверки. Я попытался установить пустой обработчик ошибок, но он все еще убивает скрипт.

Есть идеи? Нужно ли понижать рейтинг ошибок или что-то еще?

Включенный код для справки (PHP):

function __maskerrors(){};

function ValidateImageXML($xml_string)
{
    /* Parse XML data string into DOM object */
    $xdoc = new DomDocument;

    /* Calculate schema location */
    $schema = dirname(realpath(__FILE__));
    $schema.= "/image-xml-schema.xsd";

    /* Mask any errors */
    set_error_handler('__maskerrors');

    /* Parse xml string, check for success */
    if($xdoc->loadXML($xml_string))
    {
        /* Validate xml against schema */
        if($xdoc->schemaValidate($schema))
        {
            /* Valid XML structure & valid against schema, return true */
            return true;
        }
        else
        {
            /* Valid XML structure, but invalid against schema. Return false */
            return false;
        }
    }
    else
    {
        /* Invalid XML structure, return false */
        return false;
    }

    /* Stop masking errors */
    restore_error_handler();
}

1 Ответ

4 голосов
/ 28 августа 2011

Попробуйте с помощью

libxml_use_internal_errors(true);
$xdoc->loadXml($yourXml);
libxml_clear_errors();
return $xdoc->schemaValidate($schema)

Это отключит ошибки libxml и позволит пользователю получать информацию об ошибках по мере необходимости (или очищать их)

См. http: //.php.нетто / ручной / EN / book.libxml.php

...