php异步处理

Posted fps2tao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php异步处理相关的知识,希望对你有一定的参考价值。

 

<?php
namespace Index\\Controller;
use Core\\Controller;
 
class test extends Controller

    
    public function test11()
    
        sleep(5);
        file_put_contents( ‘./123.log‘, "123\\r\\n" , FILE_APPEND );
    
 
    public function test12()
    
        $url = ‘http://127.0.0.1:1001/index/test/test11‘;
        $res = self::asyncRequest($url);
        echo "我没有等a站点返回值,我就执行了";
    
 
    /**
     * php异步请求
     *
     * @param $host string 主机地址
     * @param $path string 路径
     * @param $param array 请求参数
     * @return string
     */
    public static function asyncRequest($url,$post_data=array(),$cookie=array())
    
        $url_arr = parse_url($url);
        $port = isset($url_arr[‘port‘])?$url_arr[‘port‘]:80;
 
        if($url_arr[‘scheme‘] == ‘https‘)
            $url_arr[‘host‘] = ‘ssl://‘.$url_arr[‘host‘];
        
 
        $fp = fsockopen($url_arr[‘host‘],$port,$errno,$errstr,30);
        if(!$fp) return false;
 
        $getPath = isset($url_arr[‘path‘])?$url_arr[‘path‘]:‘/index.php‘;
 
        $getPath .= isset($url_arr[‘query‘])?‘?‘.$url_arr[‘query‘]:‘‘;
 
        $method = ‘GET‘;  //默认get方式
 
        if(!empty($post_data)) $method = ‘POST‘;
 
        $header = "$method  $getPath  HTTP/1.1\\r\\n";
 
        $header .= "Host: ".$url_arr[‘host‘]."\\r\\n";
 
        if(!empty($cookie))  //传递cookie信息
            $_cookie = strval(NULL);
            foreach($cookie AS $k=>$v)
                $_cookie .= $k."=".$v.";";
            
            $cookie_str = "Cookie:".base64_encode($_cookie)."\\r\\n";
            $header .= $cookie_str;
        
 
        if(!empty($post_data))  //传递post数据
            $_post = array();
            foreach($post_data AS $_k=>$_v)
                $_post[] = $_k."=".urlencode($_v);
            
 
            $_post = implode(‘&‘, $_post);
 
            $post_str = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8\\r\\n";
 
            $post_str .= "Content-Length: ".strlen($_post)."\\r\\n";  //数据长度
 
            $post_str .= "Connection:Close\\r\\n\\r\\n";
 
            $post_str .= $_post;  //传递post数据
 
            $header .= $post_str;
 
        else
            $header .= "Connection:Close\\r\\n\\r\\n";
        
 
        fwrite($fp, $header);
 
        usleep(1000); // 这一句也是关键,如果没有这延时,可能在nginx服务器上就无法执行成功
 
        fclose($fp);
 
        return true;
    
 

 

 

 

 

转 :  https://www.cnblogs.com/xin-jun/p/10594625.html

 

以上是关于php异步处理的主要内容,如果未能解决你的问题,请参考以下文章

php异步处理

PHP实现异步处理

php异步请求数据(转发请求到别处处理)

php异步任务处理: gearman

PHP. 02®. Ajax异步处理常见的响应状态XMLHttpRequest对象及APIajax的get/post方法

异步任务推送的实践