markdown PHP:curl_multi

Posted

tags:

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

# PHP中同时发起多个http请求

```php
function multiCurl($urlArr)
{
    static $mh = null;
    if (empty($mh)) {
        $mh = curl_multi_init();
    }

    $conn = [];
    foreach ($urlArr as $i => $url) {
        $conn[$i] = curl_init($url);
        curl_setopt($conn[$i], CURLOPT_HTTPHEADER, []); // set header
        curl_setopt($conn[$i], CURLOPT_HEADER, 0); // no need header in output
        curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($conn[$i], CURLOPT_TIMEOUT, 15);//
        curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, true);

        curl_multi_add_handle($mh, $conn[$i]);
    }

    do {
        curl_multi_exec($mh, $active);
        if (-1 == curl_multi_select($mh)) {
            usleep(1);
        }
    } while ($active);

    $result = [];
    $fails = [];
    foreach ($urlArr as $i => $url) {
        $ch = $conn[$i];
        $rawData = curl_multi_getcontent($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if ( false===$rawData || 200 != $httpCode ) {
            $fails[] = $url;
        } else {
            $result[$url] = $rawData;
        }

        curl_multi_remove_handle($mh, $ch);
        curl_close($ch);
    }

    if ( !empty($fails) ) {
        $result += multiCurl($fails);
    }

    if ( !empty($mh) ) {
        curl_multi_close($mh);
    }

    return $result;
}
```


![Analytics](https://ga-beacon.appspot.com/UA-40468327-2/php-curl_multi)


以上是关于markdown PHP:curl_multi的主要内容,如果未能解决你的问题,请参考以下文章

浅析php curl_multi_*系列函数进行批量http请求

PHP 使用 curl_* 系列函数和 curl_multi_* 系列函数进行多接口调用时的性能对比

cURL 版本 7.64 上的 curl_multi 出现“无法解析主机”错误

我可以将 curl_multi/multi_socket 与 libevent 一起使用吗

如何在 PHP 中发出异步 HTTP 请求

解析php中curl