Trabajar con conexiones socket en PHP
Escrito por Alex Barros Para aquellos que cuenten con CURL en su servidor, sabrán que esta biblioteca ofrece increíbles ventajas. Sin embargo en ocasiones no contamos con esta herramienta en el servidor, o necesitamos trabajar a un nivel más bajo; es decir, sin que CURL nos lo de todo masticadito.
Este nivel es el de interactuación entre máquinas a través de un protocolo (usualmente HTTP).
Voy a centrarme en el uso de la función fsockopen() y en las cabeceras HTTP. Aúnque estas conexiones abarcan más materia, estos puntos resultan más útiles y sencillos de entender.
Para iniciar una conexión con otro dominio de internet, crearemos un puntero mediante fsockopen. Este puntero referencia a la conexión que hemos establecido con el archivo de ese otro dominio, y podremos usar las funciones típicas de un puntero de archivo (fgets() y fputs() principalmente)
La función requiere de un parámetro obligatorio (el archivo remoto) y otros opcionales, que son:
- Puerto: Cualquier máquina consta de diversos puertos. El 80 (ó 8080 en ocasiones) es el de HTTP (transferencia de documentos web), el que más nos interesa.
- Error numérico: Número entero que identifica un error ocurrido. 0 si ha habido éxito
- Error descriptivo: Define en lenguaje natural el error.
- Tiempo de espera: Puedes indicarle el tiempo para que la conexión expire. Para tener mayor control de este tiempo, puedes usar también stream_set_timeout()
Un ejemplo de conexión usando esta técnica puede ser este:
-
if (!$da) {
-
echo "$errstr ($errno)
-
\n"; //ha ocurrido un error …
-
} else {
-
$salida = "GET / HTTP/1.1\r\n"; //conexión usando HTTP1.1 y el metodo GET
-
$salida .= "Host: www.example.com\r\n"; //indico el host con el que quiero conectarme, disponible con parse_url()
-
$salida .= "Connection: Close\r\n\r\n"; //Cierro la conexion para no seguir gastando recursos
-
-
}
-
}
-
Como podemos observar, nos permite enviar las cabeceras HTTP que creamos oportunas, aúnque para hacer una conexión simple basta con las tres instrucciones indicadas en el ejemplo.
Para chequear el contenido de cualquier URL, sin pararse a personalizar cabeceras se puede emplear este simple script:
-
function urlContent($host) {
-
if (!$da) {
-
return false;
-
} else {
-
$salida = "GET / HTTP/1.1\r\n"; //conexión usando HTTP1.1 y el metodo GET
-
$salida .= "Host: $host\r\n"; //indico el host con el que quiero conectarme, disponible con parse_url()
-
$salida .= "Connection: Close\r\n\r\n"; //Cierro la conexion para no seguir gastando recursos
-
-
}
-
return $data;
-
}
-
}
-
-
//Ejemplo de uso
-
$contenido = urlContent(‘codis.boozox.net’);
Ver en ejecución | Descargar:
El funcionamiento básico de los sockets es algo más complejo que CURL, pero si nuestro servidor no admite esta librería, este script nos vendrá de perlas en más de una ocasión.
Categorias: Código, PHP, Web |
3 comentarios »

Algunos de vosotros recordaréis el
¿Eres webmaster, usas Windows, pero te sientes vacío y quieres ir a más y considerarte un webmaster de calidad? 



¡¡Por fin!!, 6 meses después tenemos a nuestra total disposición la esperada última versión de la archiconocida ubuntu por parte de Canonical: Ubuntu GNU/Linux 7.10 Gutsy Gibbon. Ha sido liberada hoy día 18 de Octubre.


Respeta el copyleft