Cómo utilizar la función fsockopen para implementar la ejecución asincrónica de PHP
PHP soporta la programación de sockets. La función fscokopen devuelve un identificador al host remoto que puede usarse para realizar operaciones fwrite, fgets y fread, al igual que el identificador devuelto por fopen. Puede usar fsockopen para conectarse a un servidor local, activar la ejecución del script y luego regresar inmediatamente sin esperar a que se complete la ejecución del script, logrando así el efecto de ejecución asincrónica de PHP.
El código de muestra es el siguiente:
functiontriggerRequest($url, $post_data=array(), $cookie=array()){
$method ="GET ";//Pasar algunos parámetros al script activado mediante POST o GET
$method="GET"; //POST o GET.
Script
$url_array=parse_url($url); //obtener información de URL
$port=isset($url_array['port'])?$url_array['port'] : 80;
$fp=fsockopen($url_array['host'], $puerto, $errno, $errstr,
if(! $fp){
returnFALSE;
}
$getPath=$url_array['ruta']." $url_array['consulta'];
if(!empty($post_data)){
$method="POST";
}
$header=$method."" .$getPath;
$header.="HTTP/1.1\r\n";
$header.="Host: ".$url_array['host']." \r\n"; //El dominio de host HTTP1.1 no se puede omitir
/*Los siguientes campos de encabezado se pueden omitir
$header.="User-Agent: Mozilla/ 5.0(Windows ;U;
WindowsNT5.1;en-US;rv:1.8.1.13 )Gecko/20080311Firefox/2.0.0.13\r\n";
$header. ="Aceptar : texto/xml, aplicación/xml, aplicación/
xhtml xml, texto/html; q=0.9, texto/plain; q=0.8, imagen/png, q=0.5\r\ n";
$header.="Accept-Language: en-us, en; q=0.5";
$header.="Accept-Encoding: gzip, deflate\ r\n ";
*/
$header.="Conexión: Cerrar\r\n";
if(!empty($cookie) ){
$_cookie=strval(NULL);
foreach($cookies$k=gt;$v){
$_cookie.=$k ."= ".$v.";";
}
$cookie_str="Cookie: ".base64_encode($_cookie)."\r\n";// Pasar cookie
$header.=$cookie_str;
}
if(!empty($post_data)){
$_post =strval( NULL);
foreach($post_ dataas$k=gt;$v){
$_post.=$k."=".$v."amp ;";
}
$post_str="Tipo de contenido: aplicación/x-www-form-urlencoded\r\n";
$post_str .=" Contenido
-Longitud: ". strlen($_post).\r\n"; //La longitud de los datos POST
$post_str.=$_post."\r\n" //Pase el Datos POST
$header.=$post_str;
}
fwrite($fp, $header);