Pergunta

O problema só está acontecendo com um arquivo quando eu tento fazer um método DocumentDOM / SimpleXML, então parece que o problema é com o arquivo. Nenhum indício que poderia ser.

Se eu faça o seguinte:

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

print_r($xml);

no Chrome, eu recebo um erro "Página não disponível". No Firefox, eu não recebem nada.

Se eu fizer a mesma coisa, mas a um "Test2.html", eu obter uma impressão como esperado.

Se eu tentar a mesma coisa, mas fazê-lo desta maneira:

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

print_r($xml);

Eu recebo o mesmo problema.

Se eu comente a linha print_r, o Chrome vai desde o "Página não disponível" em branco.

Eu mudei as permissões para 777, caso em que era um problema, nenhuma solução.

Eu tentei simplesmente ecoando o conteúdo do html, não há problema em tudo.

Qualquer pistas a respeito de porque a) Chrome faria isso, e b) por que eu não estou recebendo qualquer resultado utilizáveis?


Update:

Se eu colocar em: $ File = "test1.html"; $ Dom = DOMDocument :: loadHTMLFile ($ file); if (! $ dom) { echo "Nenhuma carga!"; } outro { Xml $ = simplexml_import_dom ($ Dom); print_r ($ xml); }

Eu recebo o mesmo problema. Se eu colocar em:

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

Eu recebo o "Load!" de saída, o que significa que o método de dom não deve ser o problema (?)

Vou tentar o mesmo teste exato com o simplexml.


Update2:

Se eu fizer isso:

Eu recebo o mesmo problema. Se eu colocar em:

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

Eu recebo "Load!" mas se eu fizer:

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

Eu recebo o erro. Eu fiz finalmente perceber que eu tinha uma opção para ver o erro no Chrome:

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

O arquivo html problemático é 288KB. Que poderia ser o problema? Se assim for, como eu iria ajustar para isso?


Última Atualização:

muito estranho. Eu posso usar métodos e funções no objeto (como simplexml ou DOMDocument), para que eu possa fazer coisas como XPath para excluir ou analisar o html, etc. Em alguns casos (pequenos resultados) pode ecoar a resultados, mas para coisas grandes ( mostrar todos os vãos), ele falha da mesma forma.

Assim, desde que o resultado final, eu acho que vai caber nestes parâmetros, eu deveria ficar bem (eu acho).

Mas qualquer solução real é muito bem-vindos.

Foi útil?

Solução

  • Ligue o relatório de erros:. error_reporting(E_ALL); na primeira linha do seu código PHP
  • Verifique o limite de memória da sua configuração do PHP: memory_limit no respectivo php.ini
  • O que é a diferença entre test1.html e Test2.html? Talvez test1.html não está bem formado.

Outras dicas

DocumentDOM e / ou SimpleXML pode socorrer se o documento for mal formado. Tente algo como:

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

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

Se a criação do $ dom trabalhou, a conversão para US $ xml deve funcionar bem, mas certifique-se de qualquer maneira.

Edit:. Como Gehrig disse, fazer relatórios certeza erro está ligado, que deve torná-lo óbvio onde o processo falha

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top