2010-10-20 17 views
34
$xml_file = file_get_contents(SITE_PATH . 'cms/data.php'); 

El problema es que un servidor tiene acceso de archivo URL deshabilitado. No puedo habilitarlo, es una cosa de alojamiento.¿Alternativa a file_get_contents?

Así que la pregunta es esta. El archivo data.php genera el código xml.

¿Cómo puedo ejecutar esto y obtener los datos xml sin hacer el método anterior?

¿Es posible?

+0

Es parte SITE_PATH de * su * sitio? ¿O es en otro lugar? – VoteyDisciple

+0

Es parte de mi sitio. SITE_PATH = 'http://mydomain.com/'; – JasonS

+0

posible duplicado de [Cómo raspar sitios web cuando cURL y allow_url_fopen está deshabilitado] (http://stackoverflow.com/questions/3880628/how-to-scrape-websites-when-curl-and-allow-url-fopen-is -disabled) – Gordon

Respuesta

96

Uso cURL. Esta función es una alternativa al file_get_contents.

function url_get_contents ($Url) { 
    if (!function_exists('curl_init')){ 
     die('CURL is not installed!'); 
    } 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    return $output; 
} 
+5

Esta función me salvó. Gracias. –

+0

pero sigo recibiendo "¡CURL no está instalado!" Pero habilité las extensiones php_curl y php_openssl –

+0

"CURL no está instalado" significa que debe instalar cURL. Cuál es una situación rara actualmente, la mayoría de los sistemas lo tienen instalado por abandono. La mayoría de las distribuciones basadas en dpkg sirven un paquete llamado * php5_curl * que viene con las dependencias correctas y las directivas de configuración. –

3

Sí, si tiene desactivadas las envolturas de URL, debe usar conectores o, incluso mejor, la biblioteca cURL.

Si es parte de su sitio, consulte la ruta del sistema de archivos, no la URL web. /var/www/..., en lugar de http://domain.tld/....

1

Si usted está tratando de leer XML generado a partir de una URL sin file_get_contents() entonces probablemente querrá echar un vistazo a cURL

1

Si lo tienes disponible, utilizando rizo es su mejor opción.

Puede ver si está habilitado haciendo phpinfo() y buscando en la página curl.

Si está habilitada, intente esto:

$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL, SITE_PATH . 'cms/data.php'); 
$xml_file = curl_exec($curl_handle); 
curl_close($curl_handle); 
2

Si el archivo es local que su comentario sobre SITE_PATH sugieren, es bastante simple sólo hay que ejecutar la secuencia de comandos y almacenar en caché el resultado en una variable mediante el output control functions:

function print_xml_data_file() 
{ 
    include(XML_DATA_FILE_DIRECTORY . 'cms/data.php'); 
} 

function get_xml_data() 
{ 
    ob_start(); 
    print_xml_data_file(); 
    $xml_file = ob_get_contents(); 
    ob_end_clean(); 
    return $xml_file; 
} 

Si es remoto como mucho otros dijeron curl es el camino a seguir. Si no está presente, intente con socket_create o fsockopen. Si nada funciona ... cambia tu proveedor de hosting.

5

Debe intentar algo como esto, Estoy haciendo esto para mi proyecto, es un sistema de respaldo

//function to get the remote data 
function url_get_contents ($url) { 
    if (function_exists('curl_exec')){ 
     $conn = curl_init($url); 
     curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true); 
     curl_setopt($conn, CURLOPT_FRESH_CONNECT, true); 
     curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1); 
     $url_get_contents_data = (curl_exec($conn)); 
     curl_close($conn); 
    }elseif(function_exists('file_get_contents')){ 
     $url_get_contents_data = file_get_contents($url); 
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){ 
     $handle = fopen ($url, "r"); 
     $url_get_contents_data = stream_get_contents($handle); 
    }else{ 
     $url_get_contents_data = false; 
    } 
return $url_get_contents_data; 
} 

luego se puede hacer como esto

$data = url_get_contents("http://www.google.com"); 
if($data){ 
//Do Something.... 
}