WEB技术之后端技术

php 触发脚本不等待返回的方法之curl

PHPer 2023-11-08 83 0 0
如果希望php访问一下网址,但不需要返回结果,如:需要执行很长时间的页面,不用等待返回结果,只需要执行了就可以了,办法之一: 使用CURL需要设置CUROPT_TIMEOUT为1(最小为1)。也就是说,客户端至少必须等待1秒钟。
public function set_cache_log(){ $host = "https://****.com.cn/index.php?s=/moudle/controller/function/id/12"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $host); cu
立即注册

更新于:2023-11-08 17:43:12
    您需要登录后才可以评论。 立即注册

    PHP使用curl实现毫秒级等待的伪异步请求

    场景描述

    在开发中会遇到这样的场景:需要做一个处理,而这个处理需要花费一定的时间,并且这个处理的结果并不是需要及时的得到结果。那么我们就可能会想到使用异步处理,来大大缩短整个流程所需要的时间。而PHP没有很好的异步支持,那么就会想到使用CURL来请求并主动断开链接,不去等待请求结果的返回来实现伪异步。

    场景升级

    这样处理也会出现一个问题,那么我们就不得不接受要花费一定的时间在请求上。这个时间是无法省去的,那么就只能是这个时间越短越好(其实不是越短越好,因为如果时间太短链接还没有请求到就主动断开了)。而之前版本中CUROPT_TIMEOUT最小设置为1。也就是说,客户端至少必须等待1秒钟。这时候我们迫切需要使用毫秒级的等待,然后断开。为整个流程节省更多的时间!

    代码实现

    /**
         * PHP发送异步请求 毫秒级
         * @author Barry
         * @date 2017-10-24
         * @param string $url 请求地址
         * @param array $param 请求参数
         * @param string $httpMethod 请求方法GET或者POST
         * @param array $header
         * @return array
         */
        static public function makeAsyncRequest($url, $param, $httpMethod = 'GET', $header=[]) {
            $oCurl = curl_init();
            if (stripos($url, "https://") !== FALSE) {
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
            }
            if ($httpMethod == 'GET') {
                curl_setopt($oCurl, CURLOPT_URL, $url . "?" . http_build_query($param));
                curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
            } else {
                curl_setopt($oCurl, CURLOPT_URL, $url);
                curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($oCurl, CURLOPT_POST, 1);
                curl_setopt($oCurl, CURLOPT_POSTFIELDS, http_build_query($param));
            }
    
            if (!empty($header)) {
                $headers = [];
                foreach ($header as $k=>$v){
                    $headers[] = $k.":".$v;
                }
                curl_setopt($oCurl, CURLOPT_HTTPHEADER, $headers);
            }
            curl_setopt($oCurl, CURLOPT_NOSIGNAL, 1);//必须加,否则在CentOS环境下面设置毫秒级会报错
            curl_setopt($oCurl, CURLOPT_TIMEOUT_MS, 30);//设置cURL允许执行的最长毫秒数
    
            $sContent = curl_exec($oCurl);
    //        print_r($sContent);exit;
    //        $aStatus = curl_getinfo($oCurl);
            curl_close($oCurl);
            return json_decode($sContent, true);
        }
    

    CentOS下设置毫秒级会报错Bug

    为什么在CentOS服务器下要增加这一行:...

    立即注册
    更新于:2023-11-08 17:44:41
    相关内容

    PHP Trait 使用指南

    curl超时的设置

    PHP向js传数组

    php中动态输出变量内容,查看进程状态的方法

    PHP与APP

    PHP是否可以应用于App开发

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    人气美女女优百度指数排行榜(波多野结衣,苍井空,三上悠亚,深田咏美,桥本有菜,北条...

    最强人造人深田咏美,业界的社交女王

    人生起起落落的三上悠亚,成名前的清纯风,怎么搭配出来的?

    业内第一大长腿,桥本有菜的腿究竟有多长

    波多野结衣,岛国业界著作最多的超级劳模

    日本AV界NO.1,苍井空是多少宅男的疯狂?

    美女女优视频混剪 This Girl-Laza Morgan

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享