php - 如果需要很长时间执行[重复],跳转到foreach的下一个成员

问题描述 投票:1回答:1

这个问题在这里已有答案:

我有这个代码来检查网址:

function check_url($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    $headers = curl_getinfo($ch);
    curl_close($ch);
    return $headers['http_code'];
}

我的阵列:

$urls = array(1,2,3,"AAAA",4,5,6,7,8,9);

(例如AAAA需要200ms而其他需要4s)

这是我的循环

foreach ($urls as $url) {
    check_url("http://www.example.com/" . $url);
}

问题是如何为每个成员设置超时?我的意思是,如果检查成员需要超过2毫秒,请跳转到下一个成员。

php foreach php-curl
1个回答
0
投票

如果您使用的是比5.2.3更新的PHP版本,则可以使用CURLOPT_TIMEOUT_MS curl选项来执行此操作。

所以,实质上:

<?php
function check_url($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
    $data = curl_exec($ch);
    $headers = curl_getinfo($ch);
    curl_close($ch);
    return empty($headers['http_code']) ? 0 : $headers['http_code'];
}

$urls = array('http://www.google.com', 'http://www.tatawilkolak.pl');

foreach ($urls as $url) {
    echo check_url($url) . " ";
}
?>

如果URL超时,则返回的HTTP代码将为0.在我的代码中,我将200ms设置为超时,但您可以使用此数字。

© www.soinside.com 2019 - 2024. All rights reserved.