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.



Respeta el copyleft
Enero
17:16 Pepito Ha dicho:
muy bueno…
Mayo
13:19 Liborio Ha dicho:
eso esta muy weno..
me hacia mucha falta algo komo eso….