PHP如何批量快速检测在线图片是否存在

该代码示例展示了如何使用PHP的curl_multi_add_handle()函数和cURL多处理器来同时检查多个图片URL的存在性,通过HTTP/2优化请求并减少SSL验证以提高效率。函数遍历URL列表,创建cURL句柄,执行请求并根据响应码判断图片是否存在。
摘要由CSDN通过智能技术生成

为了快速的判断图片是否存在,一个一个的访问效率太低,可以通过curl_multi_add_handle()函数将多个 cURL 句柄添加多个 URL,然后使用 cURL 多处理器执行它们,这样就可以提高检测效率了。

以下是实现代码:


//批量快速检测在线图片是否存在
function checkImages($urls) {
    $mh = curl_multi_init();
    $handles = array();
    $results = array();

    // 遍历 URL 列表,为每个 URL 创建一个 cURL 句柄
    foreach ($urls as $url) {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2); // 使用 HTTP/2
        if (strpos($url, "https://") === 0) { // 判断是否为 HTTPS,如果是,则禁用 SSL 验证
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }
        curl_multi_add_handle($mh, $ch);
        $handles[] = $ch;
    }

    // 执行 cURL 句柄,直到所有句柄都执行完毕
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while ($running > 0);

    // 从每个 cURL 句柄中读取结果,保存到结果数组中
    foreach ($handles as $i => $ch) {
        $url = $urls[$i];
        $info = curl_getinfo($ch);
        $code = $info['http_code'];
        if ($code == 200) {
            $results[$url] = true;
        } else {
            $results[$url] = false;
        }
        curl_multi_remove_handle($mh, $ch);
        curl_close($ch);
    }

    curl_multi_close($mh);

    return $results;
}


$urls = array(
    'http://example.com/image1.jpg',
    'http://example.com/image2.jpg',
    'http://example.com/image3.jpg',
);

$results = checkImages($urls);

foreach ($results as $url => $code) {
    if ($code == 200) {
        echo "$url exists.<br>";
    } else {
        echo "$url does not exist.<br>";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值