[PHP] error con file_get_contents

minipelos

buenas a todos!

os cuento, tengo un server con...

  • debian (lenny)
  • apache 2.2.9
  • php 5.2.6-1
  • openssl 0.9.8g

El servidor va perfectamente excepto al abrir una url...
intento hacer algo tan básico como...

<?php
echo file_get_contents('http://www.google.es');
?>

y el resultado que me da, tras un buen rato (no entiendo ese rato, porque ping desde php también funciona) es

Warning: file_get_contents(http://www.google.es) [function.file-get-contents]: failed to open stream: HTTP request failed! in /var/www/test/test.php on line 2

Tengo allow_url_fopen = On y safe_mode= Off
También he probado a realizar un wget desde el servidor y va bien

(edito esta parte)...

He realizado varias pruebas, llamando al script tanto desde https como fuera.
Incluso he probado un ping desde php con shell_exec y va bien
PING www.l.google.com (209.85.229.147) 56(84) bytes of data.
64 bytes from ww-in-f147.google.com (209.85.229.147): icmp_seq=1 ttl=242 time=75.8 ms
64 bytes from ww-in-f147.google.com (209.85.229.147): icmp_seq=2 ttl=243 time=74.2 ms
64 bytes from ww-in-f147.google.com (209.85.229.147): icmp_seq=3 ttl=242 time=80.2 ms

tambíén he probado haciéndolo con un fopen (incluso en binario) con los mismos resultados

¿A alguien se le ocurre qué pudiera ser?

willsmith

Ese problema lo tuve yo usando el servicio gratuito de dns de cdmon. prueba de hacerlo directamente desde la ip

bLaKnI

Si, tu servidor Apache no está configurado para ello.

minipelos

desde la ip tampoco me lo hace

y no se, sobre si apache pueda estar capando no creo (los shell_exec van bien)

acabo de hacer la megaburrada del año... ¬¬

$url = 'http://www.google.es';
//asignamos un archivo temporal
$temp_path = tempnam("/tmp", "PYG");
//hacemos un wget a capón
$wget = shell_exec('wget '.$url.' -O '.$temp_path);

echo "ARCHIVO TEMPORAL: $temp_path<br>RESULTADO DE LA DESCARGA<pre>$wget</pre>";
echo file_get_contents($temp_path); 

pero funciona xDDD

(obviamente, safe mode tiene que estar en off)

LOc0

PHP + Unix = mucho juego. Así de primeras se me ocurren estas formas de hacer lo mismo para ir descartando:

<?php
$fp = fsockopen("www.google.es", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.es\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>
<?php
echo shell_exec('wget -q www.google.es -O -');
?>
<?php
passthru('wget -q www.google.es -O -');
?>

Salu2 ;)

minipelos

#5 es raro porque fopen no va ni a tiros pero el 1er script (sockets) si va bien :S
y el 2º y 3º .... ahora te digo xD

LOc0

Yo edito, tú editas, él edita, nosotros editamos xD...

Salu2 ;)

minipelos

#7 jeje
el 2º y 3º de lujo, encima va bien con binarios. gracias

Usuarios habituales

  • minipelos
  • LOc0
  • bLaKnI
  • willsmith