PHP возвращает страницу ошибки на simplexml print_r - PullRequest
0 голосов
/ 25 июня 2009

Проблема возникает только с одним файлом, когда я пытаюсь выполнить метод 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, без проблем.

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


Обновление:

Если я введу: $ file = "test1.html"; $ dom = DOMDocument :: loadHTMLFile ($ file); if (! $ dom) { echo "No Load!"; } еще { $ xml = simplexml_import_dom ($ dom); print_r ($ XML); }

У меня та же проблема. Если я введу:

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

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

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


Update2:

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

У меня та же проблема. Если я введу:

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

Я получаю "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, и т. Д. В некоторых случаях (небольшие результаты) он может выводить результаты, но для больших вещей показать все промежутки), он не может быть таким же образом.

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

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

Ответы [ 2 ]

1 голос
/ 25 июня 2009
  • Включите сообщение об ошибке: error_reporting(E_ALL); в первой строке вашего PHP-кода.
  • Проверьте лимит памяти вашей конфигурации PHP: memory_limit в соответствующем php.ini
  • В чем разница между test1.html и test2.html? Возможно, test1.html не правильно сформирован.
0 голосов
/ 25 июня 2009

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

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

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

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

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

...