Maison  >  Article  >  développement back-end  >  Exécution asynchrone de la tâche PHP fsockopen

Exécution asynchrone de la tâche PHP fsockopen

coldplay.xixi
coldplay.xixiavant
2020-06-08 11:28:372316parcourir

Exécution asynchrone de la tâche PHP fsockopen

Méthode pratique pour PHP pour exécuter de manière asynchrone la tâche fsockopen

Nous avons créé une fonction basée sur fsockopen Dans cela. fonction Utilisez fsockopen pour accéder à l'URL, mais pendant l'accès, vous n'êtes pas obligé d'obtenir le contenu affiché dans l'URL, mais émettez uniquement une demande d'accès, et l'accès est fermé immédiatement après l'arrivée de la demande.

L'avantage est qu'il n'est pas nécessaire d'attendre que l'URL visitée renvoie des informations fiables, ce qui fait gagner du temps. Le temps d'exécution de ce code est compris entre 0,1 et 0,2 seconde pour les visiteurs ordinaires. presque pas perceptible. Par conséquent, lors de son utilisation, il vous suffit d’appeler cette fonction et l’url correspondante. Cependant, aucune partie de transmission de données n'est fournie ici. Comment transmettre des données, en fait, il vous suffit d'ajouter le contenu de la publication à $header.

/**
 * @生生 2018/12/24 19:25:06
 * [asynchronous PHP异步执行任务]
 * @param  string $url       执行任务的url地址
 * @param  array  $post_data 需要post提交的数据POST
 * @param  array  $cookie    cookie数据用于登录等的设置(此处内部调用,无需鉴权)
 * @return boole
 */
public function asynchronous($url,$post_data = array())
{
    $url_array = parse_url($url);
    dump($url_array);
    //用fsockopen()尝试连接 
    $fp = fsockopen($url_array['host'], 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        //建立成功后,向服务器写入数据 
        $getPath = isset($url_array[&#39;path&#39;]) ? $url_array[&#39;path&#39;] : &#39;/&#39;;
        $out = "GET /".$getPath."/ HTTP/1.1\r\n";
        $out .= "Host:".$url_array[&#39;host&#39;]."\r\n";
        $out .= "Connection: Close\r\n\r\n";
       
        fwrite($fp, $out);
        /*忽略执行结果
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }*/
        //关闭链接
        fclose($fp);
    }
}

Méthode d'appel

/**
*  异步方法
*  参数:(string)要执行的方法url,(array)传入参数
*/
function yibu(){
    $this->asynchronous(&#39;https://www.liqingbo.cn/index.php/admin/index/test&#39;,[&#39;1&#39;=>&#39;haha&#39;]);
    //直接返回结果
    echo &#39;操作成功&#39;;
}

Tutoriel recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer