PHP异步执行的解决方法

PHP异步执行的解决方法

PHP异步执行的解决方法

PHP实现异步的方法很多,这里就记录我自己在项目中常用的一种方法吧

使用fsockopen实现

   public static function async($url, $post_data = ''){
        $info = parse_url($url);
        $fp = fsockopen($info["host"], 80, $errno, $errstr, 30);
        $head = "POST ".$info['path']."? HTTP/1.0\r\n";
        $head .= "Host: ".$info['host']."\r\n";
        $head .= "Referer: http://".$info['host'].$info['path']."\r\n";
        $head .= "Content-type: application/x-www-form-urlencoded\r\n";
        $head .= "Content-Length: ".strlen(trim($post_data))."\r\n";
        $head .= "Connection: Close\r\n";
        $head .= "\r\n";
        $head .= trim($post_data);
        $write = fputs($fp, $head);
//        while (!feof($fp))
//        {
//            $line = fread($fp,4096);
//            echo $line;
//        }
        fclose($fp);
        return true;
    }

调用

Common::async(url("async/addLog"),"name=longzongqin");

注意:当执行过程中,客户端连接断开或连接超时,都会有可能造成执行不完整,可以加上如下代码

ignore_user_abort(true); // 忽略客户端断开 
set_time_limit(0);    // 设置执行不超时