2010-10-21 3 views
1
$doc = new DOMDocument(); 
if ($doc->load('http://foo.com/bar.xml')) { 
    // good 
} else { 
    // wtf happened? 
} 

Я могу wget http://foo.com/bar.xml с места, где работает PHP-код, поэтому я знаю, что URL-адрес доступен. Я думаю, что это должно быть нечто иное, кроме ошибки HTTP.Что может привести к тому, что DOMDocument.load не сможет загрузить XML из доступного URL-адреса?

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

Вот XML:

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

ответ

4

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

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

allow_url_fopen = On 

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

ПРЕДУПРЕЖДЕНИЕ:, по-видимому, есть security issues, сохраняя эту настройку на постоянной основе.

2

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

libxml_use_internal_errors (true); 
    $doc = new DOMDocument(); 
    $doc -> recover = true; 
    $doc -> strictErrorChecking = false; 
+0

Что это для меня сделают? (Я не парень PHP, это одноразовая вещь, над которой я работаю) –

+0

просто подавляет ошибки и позволяет вашему коду продолжать в случае сбоя. для проверки точной проблемы, добавьте следующее: 'var_dump (libxml_get_errors());' – stillstanding

+0

О, спасибо! Мой код продолжается (он попадает в предложение 'else'), но мне нужно знать, почему. Надеюсь, что 'var_dump' скажет мне, что случилось. –

Смежные вопросы