PHP возвращает ошибку страницы на simplexml print_r

Проблема возникает только с одним файлом, когда я пытаюсь выполнить метод DocumentDOM/SimpleXML, поэтому похоже, что проблема связана с этим файлом. Без понятия, что это может быть.

Если я сделаю следующее:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);

print_r($xml);

в Chrome я получаю сообщение об ошибке «Страница недоступна». В Firefox я ничего не получаю.

Если я сделаю то же самое, но с «test2.html», я получу распечатку, как и ожидалось.

Если я попробую то же самое, но сделаю это так:

$file = "test1.html";
$data = file_get_contents($file)
$dom = DOMDocument::loadHTML($data);
$xml = simplexml_import_dom($dom);

print_r($xml);

Я получаю ту же проблему.

Если я закомментирую строку print_r, Chrome перейдет с «Страница недоступна» на пустую.

Я изменил разрешения на 777, если это проблема, не исправить.

Я попытался просто повторить содержимое html, никаких проблем.

Любые подсказки относительно того, почему а) Chrome сделал бы это и б) почему я не получаю никаких полезных результатов?


Обновлять:

Если я вставлю: $file = "test1.html"; $dom = DOMDocument::loadHTMLFile($file); if(!$dom) { echo "Нет загрузки!"; } еще { $xml = simplexml_import_dom($dom); print_r($xml); }

Я получаю ту же проблему. Если я вставлю:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
if(!$dom) {
    echo "No Load!";
}
else {
    echo "Load!";
}

Я получаю "Загрузить!" вывод, что означает, что метод dom не должен быть проблемой (?)

Я попробую точно такой же тест с simplexml.


Обновление2:

Если я сделаю это:

Я получаю ту же проблему. Если я вставлю:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);
if(!$xml) {
    echo "No Load!";
}
else {
    echo "Load!";
}

Я получаю "Загрузить!" но если я сделаю:

$file = "test1.html";
$dom = DOMDocument::loadHTMLFile($file);
$xml = simplexml_import_dom($dom);
if(!$xml) {
    echo "No Load!";
}
else {
    echo "Load!";
    print_r($xml);
}

Я получаю ошибку. Наконец-то я заметил, что у меня есть возможность просмотреть ошибку в Chrome:

 Error 324 (net::ERR_EMPTY_RESPONSE): Unknown error.

Проблемный html-файл весит 288 КБ. Может ли это быть проблемой? Если да, то как бы я приспособился к этому?


Последнее обновление:

Очень странно. Я могу использовать методы и функции для объекта (как simplexml или domdocument), поэтому я могу делать такие вещи, как xpath для удаления или анализа html и т. д. В некоторых случаях (небольшие результаты) он может отображать результаты, но для больших вещей ( показать все диапазоны), он не работает таким же образом.

Итак, поскольку конечный результат, я думаю, будет соответствовать этим параметрам, у меня ДОЛЖНО быть все в порядке (я думаю).

Но любое реальное решение приветствуется.


person Anthony    schedule 25.06.2009    source источник


Ответы (2)



DocumentDOM и/или SimpleXML могут выйти из строя, если документ искажен. Попробуйте что-то вроде:

$dom = DOMDocument::loadHTMLFile($file);
if (!$dom) {
    echo 'Loading file failed';
    exit;
}

$xml = simplexml_import_dom($dom);
if (!$xml) {
    ...
}

Если создание $dom сработало, преобразование в $xml тоже должно сработать, но все равно убедитесь.

Изменить: как сказал Гериг, убедитесь, что отчеты об ошибках включены, это должно сделать очевидным, где происходит сбой процесса.

person deceze♦    schedule 25.06.2009
comment
Отчеты об ошибках включены. Использование условных выражений для $dom или $xml показывает, что они оба загружаются (см. обновления), но по-прежнему ничего не получают на print_r. Является ли размер файла 288K проблемой? - person Anthony; 25.06.2009