2017-12-19 11 views
1

を実行するのに長い時間を要する場合、私はURLをチェックするため、このコードを持っている:PHP - foreachの次のメンバーへジャンプ

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以上かかる場合、次のメンバにジャンプします。

+0

「次のメンバーにジャンプ」と言うと、実際には長い時間がかかるものをスキップ/キャンセルしますか?それとも、次のものに移動しながらそれをアクティブにしておきたいのですか? –

+3

は、 'CURLOPT_CONNECTTIMEOUT'または' CURLOPT_TIMEOUT' – ArtOsi

+0

'CURLOPT_TIMEOUT'または' CURLOPT_TIMEOUT_MS'を最大実行時間に設定できます。 curlが応答を待っているので、ループが長くかかります。 –

答えて

0

5.2.3より新しいバージョンのPHPを使用している場合は、CURLOPT_TIMEOUT_MSカールオプションを使用してください。

だから、本質的に:URLはtimeout'ed場合

<?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) . " "; 
} 
?> 

は、返されたHTTPコードは、私がタイムアウトとして200msのを設定している私のコードは0になりますが、あなたは、この番号で遊ぶことができます。