Проблема проверки XML на XSD - PHP / schemaValidate - PullRequest
1 голос
/ 05 августа 2011

Я пытаюсь проверить XML-файл по XSD, используя функцию schemaValidate(String file) из DOMDocument.Когда я проверяю его на других инструментах, таких как онлайн-валидаторы, он работает нормально, но в моей программе я всегда получаю эту ошибку и действительно не могу найти, откуда она исходит:Итак, мой вопрос, есть ли способ получить более подробную информацию об этой ошибке (в основном, из-за неверной схемы) с помощью функций DOMDocument?и если кто-нибудь когда-нибудь сможет сказать, что может вызвать такие ошибки, которые были бы хорошими (xml и xsd являются своего рода конфиденциальными сообщениями, извините, но, опять же, он отлично работает с несколькими другими инструментами).!

Ответы [ 3 ]

1 голос
/ 05 августа 2011

/ home / public_html / product / xxxx / xxxx / xxxxx / xsd / AdlSchema.xsd): не удалось открыть поток: отказано в разрешении
Процесс php не имеет необходимых прав для доступа к xsdфайл.

Давайте немного поэкспериментируем и добавим код отладки / информации. Пожалуйста, добавьте

/* debug code start. Don't forget to remove */
// if there already is a variable you use as parameter for schemaValidate() use that instead of defining a new one.
$path = '/home/public_html/product/xxxx/xxxx/xxxxx/xsd/AdlSchema.xsd';
foreach( array('file_exists', 'is_readable', 'is_writable') as $fn ) {
    echo $fn, ': ', $fn($path) ? 'true':'false', "<br />\n";
}
$foo = stat($path);
echo 'mode: ', $foo['mode'], "<br />\n";
echo 'uid: ', $foo['uid'], "<br />\n";
echo 'gid: ', $foo['gid'], "<br />\n";
if ( function_exists('getmyuid') ) {
    echo 'myuid: ', getmyuid(), "<br />\n";
}
if ( function_exists('getmygid') ) {
    echo 'myuid: ', getmygid(), "<br />\n";
}

$foo = fopen($path, 'rb');
if ( $foo ) {
    echo 'fopen succeeded';
    fclose($foo);
}
else {
    echo 'fopen failed';
}
/*  debug code end */

прямо перед вызовом schemaValidate ().

0 голосов
/ 12 июля 2019

Для меня причина была в том, что загрузчик сущностей libxml был отключен (libxml_disable_entity_loader(true);). Кажется, чтобы использовать эту функцию, необходимо включить. Я переключился на DOMDocument::validateSchemaSource, поскольку не хочу включать загрузчик сущностей.

0 голосов
/ 03 января 2015

Я получил ту же проблему, используя относительные пути к файлам схемы XML и XSD.Но после того, как я изменил его на абсолютные, проблема исчезла.

...