Estoy intentando lo siguiente:
$url = 'https://www.tripadvisor.es/Hotels-g187514-Madrid-Hotels.html' $ta_html = file_get_html($url); var_dump($ta_html);devuelve falso, esto funciona y obtiene correctamente el html para:
$url = 'https://www.tripadvisor.es/Hotels-g294316-Lima_Lima_Region-Hotels.html#ACCOM_OVERVIEW'Lo primero que pensé fue que tenía una redirección, pero verifiqué los encabezados con curl y estaba 200 ok y parecía lo mismo en ambos casos. ¿Qué puede estar pasando? como se puede solucionar?
Esto parece ser un duplicado de este problema: HTML DOM simple que devuelve falso que tampoco tiene respuesta
Parece que el analizador HTML DOM está fallando porque el tamaño del archivo HTML es mayor que el tamaño máximo del archivo de la biblioteca. Cuando llama a file_get_html() , realiza una verificación del tamaño del archivo en función de su constante MAX_FILE_SIZE . Entonces, antes de llamar a cualquier método de analizador HTML DOM, aumente el tamaño máximo de archivo utilizado por la biblioteca llamando:
define('MAX_FILE_SIZE', 1200000); // or larger if needed, default is 600000Además, como descubrió, puede evitar la verificación del tamaño del archivo al hacer esto
$html = new simple_html_dom(); $html->load($str);Así que encontré una solución para hacer esto:
$base = $url; $curl = curl_init(); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_URL, $base); curl_setopt($curl, CURLOPT_REFERER, $base); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $str = curl_exec($curl); curl_close($curl); $html = new simple_html_dom(); $html->load($str);A decir verdad, no sé exactamente por qué funciona esto y cuál fue el problema original, y agradecería si alguien pudiera señalarlo.
Espero que te ayude:
$base = $url; $curl = curl_init(); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_URL, $base); curl_setopt($curl, CURLOPT_REFERER, $base); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $str = curl_exec($curl); curl_close($curl); $html = new simple_html_dom(); $html->load($str);