2009-07-29 17 views
5

Estoy obteniendo información a través de PHP desde una página web usando simple_php_dom y curl. El problema es que la página no está construida correctamente, por lo que el objeto DOM contiene información errónea.¿Cómo puedo obtener una página HTML como una cadena a través de PHP?

¿Cómo puedo obtener el archivo HTML como una cadena en una var PHP para que pueda ejecutar una expresión regular a través de él?

Curl no funciona ya que está ignorando la parte defectuosa.
simple_html_dom.php tiene el mismo problema.
wget no funciona, ya que no tengo permisos para ello en el servidor.

Respuesta

12

file_get_contents - Lee un archivo entero en una cadena

string file_get_contents ( 
    string $filename [, int $flags= 0 [, resource $context [, int $offset= -1 [, int $maxlen= -1 ]]]] 
) 

del manual:

Esta función es similar a un archivo(), excepto que file_get_contents() devuelve el archivo en una cadena, comenzando en la compensación especificada hasta maxlen bytes. En caso de error, file_get_contents() devolverá FALSE.

file_get_contents() es la forma preferida para leer el contenido de un archivo en una cadena. Utilizará técnicas de mapeo de memoria si es compatible con su sistema operativo para mejorar el rendimiento.

Y funciona tanto con páginas web y archivos. Puede tomar el HTML, simplemente usando "http://whatever.com/page.html" como $ nombre de archivo.

+0

Eso es lo que sugeriría. – Christian

+2

Solo funciona si allow_url_fopen está habilitado. Realmente no hay ninguna razón por la que esto funcione con curl también. –

+1

También ignora parte del archivo: S El único que realmente obtiene el archivo correctamente es wget, que no puedo usar: S – fmsf

4

Con rizo que usted quiere asegurarse de que se está configurando el parámetro CURLOPT_RETURNTRANSFER para asegurarse de que la página se recupera como una cadena, por ejemplo:

//return the transfer as a string 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

Ver http://www.php.net/manual/en/function.curl-setopt.php

0

Solía ​​cURL para obtener el archivo en una cadena (simple_html_dom :: load_file simplemente ajusta file_get_contents) y luego usar el método de carga simple_html_dom (desde cadena) para analizarlo. Eso funciona para algunas URL, pero está fallando en este caso cuando la URL tiene una cadena de parámetros. Está buscando la URL como si no tuviera una cadena de parámetro. Configuré un agente con curl para suplantar a un navegador pero sin dados.

Disculpa, esta no es una respuesta real, pero tal vez usar curl funcionará para algunas personas para quienes la configuración fopen es un problema.

Cuestiones relacionadas