Что может привести к тому, что DOMDocument.load не сможет загрузить XML с доступного URL-адреса? - PullRequest
1 голос
/ 21 октября 2010
$doc = new DOMDocument();
if ($doc->load('http://foo.com/bar.xml')) {
  // good
} else {
  // wtf happened?
}

Я могу wget <a href="http://foo.com/bar.xml" rel="nofollow">http://foo.com/bar.xml</a> из места, где работает код PHP, поэтому я знаю, что URL доступен.Я думаю, что это должно быть что-то иное, чем ошибка HTTP.

Я не уверен, что еще может быть причиной сбоя.Может быть, вопрос разбора?XML представляется действительным (и проходит валидационный тест W3C).Насколько я могу судить из документации , невозможно определить , почему произошла ошибка загрузки.

Вот XML:

 <response> 
  <version>8</version> 
  <minversion>1</minversion> 
  <url>api.asp?</url> 
 </response>

Ответы [ 2 ]

4 голосов
/ 21 октября 2010

Я наконец сузил его до параметра конфигурации PHP с именем allow_url_fopen, который был установлен на Off на сервере, на котором выполняется скрипт.

Я изменил файл php.ini, чтобы включить этот параметр:

allow_url_fopen = On

А теперь DOMDocument.load может загружать XML с удаленного URL.

ПРЕДУПРЕЖДЕНИЕ: очевидно, есть некоторые проблемы безопасности с постоянным сохранением этого параметра.

2 голосов
/ 21 октября 2010

Добавить это:

    libxml_use_internal_errors ( true );
    $doc = new DOMDocument();
    $doc -> recover = true;
    $doc -> strictErrorChecking = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...