php - 如果执行时间过长则跳转到 foreach 的下一个成员

php - Jump to next member of foreach if takes to long time to execute

我有这个用于检查 url 的代码:

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);
}

问题是如何为每个成员设置超时? 我的意思是,如果检查成员花费的时间超过 2ms,则跳转到下一个成员。

如果您使用的 PHP 版本比 5.2.3 更新,您可以使用 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。在我的代码中,我将 200 毫秒设置为超时,但您可以使用这个数字。