Pregunta

El problema solo ocurre con un archivo cuando intento hacer un método DocumentDOM / SimpleXML, por lo que parece que el problema está en ese archivo. No tengo idea de lo que podría ser.

Si hago lo siguiente:

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

print_r($xml);

en Chrome, obtengo una " Página no disponible " error. En Firefox, no obtengo nada.

Si hago lo mismo pero a un " test2.html " ;, obtengo una impresión como se esperaba.

Si intento lo mismo pero de esta manera:

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

print_r($xml);

Me sale el mismo problema.

Si comento la línea print_r, Chrome pasa de la página "No disponible" en blanco.

Cambié los permisos a 777, en caso de que fuera un problema, no hay solución.

Intenté simplemente repetir el contenido del html, sin ningún problema.

¿Alguna pista de por qué a) Chrome haría eso yb) por qué no obtengo ningún resultado utilizable?


Actualización:

Si pongo en:     $ file = " test1.html " ;;     $ dom = DOMDocument :: loadHTMLFile ($ archivo);     si (! $ dom) {         echo " ¡Sin carga! " ;;     }     más {     $ xml = simplexml_import_dom ($ dom);     print_r ($ xml);     }

Me sale el mismo problema. Si pongo en:

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

Me sale el " Load! " salida, lo que significa que el método dom no debería ser el problema (?)

Probaré la misma prueba exacta con el simplexml.


Actualización2:

Si hago esto:

Me sale el mismo problema. Si pongo en:

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

Obtengo " Cargar " pero si lo hago:

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

Me sale el error. Finalmente noté que tenía una opción para ver el error en Chrome:

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

El archivo html problemático es 288Kb. ¿Podría ese ser el problema? Si es así, ¿cómo me ajustaría para eso?


Última actualización:

Muy extraño. Puedo usar métodos y funciones en el objeto (como simplexml o domdocument), por lo que puedo hacer cosas como xpath para eliminar o analizar el html, etc. En algunos casos (resultados pequeños) puede hacer eco de los resultados, pero para cosas grandes ( mostrar todos los tramos), falla de la misma manera.

Entonces, desde el resultado final, creo que encajará en estos parámetros, DEBO estar bien (supongo).

Pero cualquier solución real es muy bienvenida.

¿Fue útil?

Solución

  • Active el informe de errores: error_reporting (E_ALL); en la primera línea de su código PHP.
  • Compruebe el límite de memoria de su configuración de PHP: memory_limit en los respectivos php.ini
  • ¿Cuál es la diferencia entre test1.html y test2.html? Quizás test1.html no está bien formado.

Otros consejos

DocumentDOM y / o SimpleXML pueden rescatar si el documento está mal formado. Pruebe algo como:

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

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

Si crear el $ dom funcionó, la conversión a $ xml también debería funcionar, pero asegúrese de todos modos.

Editar: como dijo Gehrig, asegúrese de que los informes de errores estén activados, eso debería hacer obvio dónde falla el proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top