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 毫秒设置为超时,但您可以使用这个数字。
我有这个用于检查 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 毫秒设置为超时,但您可以使用这个数字。