2012-01-26 19 views
3

curl_multiを使用して各プロセスの応答時間を記録できますか?ここで私が現在使っているコードは、各プロセスの応答時間を記録する方法がわかりません。助けてくれてありがとう!PHPを使用した個々の応答時間curl_multi

do 
{ 
    $execReturnValue = curl_multi_exec($mh, $runningHandles); 
} while ($execReturnValue == CURLM_CALL_MULTI_PERFORM); 

// Loop and continue processing the request 
while ($runningHandles && $execReturnValue == CURLM_OK) 
{ 
    // Wait forever for network 
    $numberReady = curl_multi_select($mh); 
    if ($numberReady != -1) 
    { 
     // Pull in any new data, or at least handle timeouts 
     do  
     { 
      $execReturnValue = curl_multi_exec($mh, $runningHandles); 
     } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM); 
    } 
}  
//End Run 
//Get Data and Close 
foreach($ping as $cid=>$p) 
{ 
    $curlError = curl_error($c[$cid]); 
    if($curlError == "") 
    { 
     $curl_data[$cid] = curl_multi_getcontent($c[$cid]); 
    } 
    else 
    { 
     //email me! 
    }   
curl_multi_remove_handle($mh,$c[$cid]); 
curl_close($c[$cid]); 
} 
curl_multi_close($mh); 
+0

[ 'curl_getinfo'または' curl_multi_info_read'個々の要求の期間] [1] [1]:http://stackoverflow.com/a/4313332/89771 –

答えて

1

使用のmicrotime()あなたのforloopの開始時刻を取得し、あなたのコードの末尾に時間を取得した時刻から終了時刻を減算する最後に()のmicrotimeを使用します最初は違いを得るために。それはあなたのコードが実行された時間です。

EDIT:

curl_setopt($ch, CURLOPT_WRITEFUNCTION, ‘read_body’);//sets callback 

http://www.php.net/manual/en/function.curl-setopt.php

curl_multiは、並行してプロセスを起動します。したがって私の以前の提案はうまくいかないでしょう。解決策:コールバックを追加してください!すべてのプロセスが開始され、プロセスのIDとチェックインされた時間をコールバックレコードで取得します。残念ながら、これらのプロセスはすべて、そのコールバックを制御するために戦います。私は、fork()を使って新しいプロセスを作成するという解決策を見つけました。これは、ちょうど戻ってプログレスバーを取得するために仕事のかなり多くになっていますが、ここで興味を持っている場合、PHPのフォーク()へのリンクです:あなたが知る必要がある場合 http://php.net/manual/en/function.pcntl-fork.php

+0

私はそれが私のスクリプトを実行するのにかかった全体の時間を与えるだろうと思います。私は各ハンドルの実行にどれくらいの時間がかかるかを探しています。それが可能ならば。 –

+0

OKええ、もう少し調査をしました。カールハンドルのコールバックを設定することは可能です。私は編集を加えました。 – jakx