• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

php异步处理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
<?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;
    }

}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ThinkPHP提示验证码输入错误发布时间:2022-07-10
下一篇:
修改linux时区时间和php时区发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap