Nube

viernes, 28 de marzo de 2008

6 métodos para abrir direcciones web desde PHP

Vía sockets:

//función que solicita la web mediante socket
function getcontent($server, $file='/index.php', $port=80){
$contenido = "";
$ip = gethostbyname($server);
$fp = fsockopen($ip, $port);
if(!
$fp){
return
"Inaccesible";
}else{
$crlf = "\r\n";
$cabecera= 'GET ' . $file . ' HTTP/1.0' . $crlf
.'Host: ' . $server . $crlf
.$crlf;
fputs($fp, $cabecera);
while (!
feof($fp)){
$
contenido .= fgets($fp, 1024);
}
fclose($fp);
$contenido = substr($
contenido , strpos($contenido , "\r\n\r\n") + 4);
return
$contenido;
}
}
echo
getcontent('www.evobas.org'
);
?>
Vía file_get_contents:
$contenido=file_get_contents('http://www.kobox.org/index.php');
echo
$contenido;
?>
Vía file:
$contenido=implode('',file('http://www.indomita.org/index.html'));
echo
$contenido;
?>
Vía fopen:
$f='http://blog-indomita.blogspot.com/index.html';
$fp=fopen($f,'r');
$contenido='';
if(!$fp){
$contenido="Inaccesible";
}else{

while(!
feof($fp))
$contenido.=fgets($fp,1024);
fclose($fp);
}
echo
$contenido;
?>
Vía Curl:
$ch = curl_init("http://www.ventadiscos.indomita.org/index.php");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$contenido = curl_exec ($ch);
curl_close ($ch);
echo
$contenido;
?>

Vía Control de Salida ob_:

ob_start();
include("http://www.google.com");
$contenido=ob_get_contents
();
ob_clean();
echo $contenido;
?>


Algunos métodos necesitan tener activada la opción allow_url_fopen de PHP (php.ini).

5 comentarios:

Raúl dijo...

Hola, intenté acceder al contenido de una página externa con iframe y DOM pero no pude, lo que intento es leer automáticamente algún dato contenido en ella así lo puedo procesar. ¿Hay alguna forma de hacerlo con html básico?. Gracias :).

Demiurgo dijo...

Es imposible hacerlo con html, necesitas utilizar mínimo javascript e ingeniártelas para leer los valores del iframe cada x tiempo (cosa que me da que es bastante complicado de hacer)

lo aconsejable es utilizar ajax si vas a relizar las peticiones cada x segundos o php si solamente necesitas hacerla una vez

los métodos que propongo son para hacerlo desde php, pero podrías llamarlos desde ajax

Anónimo dijo...

Estas mal desde el dom no se puede leer un archivo externo de otro host aunquesea desde un frame, en js, y con el query de ajax tampoco, es solo local

Joe dijo...

Buenas, me ha sido de muchísima utilidad este post. Llevaba horas (muuchas) buscando alguna forma de leer un xml desde php, ya que mi hosting tiene el allow a "off" y no había forma.

Finalmente he usado la lectura que has colgado via sockets, como si fuera una web y la he pasado a xml con el simple_xml.

Muchísimas gracias y enhorabuena por tu trabajo.

Daniel José Abate dijo...

Buen post, gracias.