2011-05-30 26 views
6

file_get_contents() no lee datos para URLs cortas Ejemplo:file_get_contents() para URLs cortas

  • http://wp.me/pbZy8-1WM,
  • http://bit.ly/ d00E2C

Ayúdenme a manejar esto. O ¿Hay alguna función CURL para manejar los enlaces anteriores?

+0

¿Por qué etiqueta este rizo? – erisco

+0

@erisco si usa 'file_get_contents' con una URL, difiere a cURL para obtener los datos –

+0

Según http://php.net/manual/en/wrappers.http.php Los redireccionamientos HTTP son compatibles. – erisco

Respuesta

6

Esto en general funciona bien. Si encuentra que no hace lo correcto puede utilizar explícitamente un contexto de secuencia:

$url = "http://bit.ly/d00E2C"; 
$context = stream_context_create(array('http' => array('max_redirects' => 5))); 
$val = file_get_contents($url, false, $context); 

debe hacerlo. No es necesario tocar CURL para eso.

+0

Le robé su contribución de ''max_redirects'' ... no estoy seguro de cómo me siento al respecto. ¿Puedes combinar las respuestas en Stackoverflow? – erisco

+0

Hehe. Dame un voto y lo llamaremos incluso. – Femi

+0

Este es un intercambio extraño, pero está bien. – erisco

1

Lo que puede hacer es usar rizo con CURLOPT_FOLLOWLOCATION se establece en True:

$ch = curl_init("http://bit.ly/d00E2C"); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$result = curl_exec($ch); 
curl_close($ch); 

echo $result; 
4

En mi máquina, no puede replicar su problema; Recibo la página como estaba previsto. Sin embargo, si el problema es con la redirección, esto puede resolver su problema.

<?php 
$opts = array(
    'http' => array(
     'follow_location' => 1, 
     'max_redirects' => 20 
    ) 
); 
$context = stream_context_create($opts); 
echo file_get_contents('http://wp.me/pbZy8-1WM', false, $context); 

Imagino que puede haber una directiva que active el redireccionamiento siguiente, pero aún no lo he encontrado. Voy a editar mi respuesta debería I.