4

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

1 に答える 1

2

microtime() を使用して forloop の開始時刻を取得し、最後に microtime() を使用してコードの終了時刻を取得し、開始時刻から終了時刻を減算して差を取得します。 . これは、コードの実行にかかった時間です。

編集:

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

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

curl_multi はプロセスを並行して起動します。したがって、私の以前の提案は機能しません。解決策: コールバックを追加してください! これらすべてのプロセスが開始されたときのマイクロタイムを取得し、コールバックにプロセス ID とチェックイン時刻を記録します。残念ながら、これらのプロセスはすべて、そのコールバックの制御をめぐって争うことになります。その解決策は、 fork() を使用して新しいプロセスを作成することだと思います。これはプログレス バーを元に戻すためだけにかなりの作業を行っていますが、興味がある場合は、php fork() へのリンク ( http://php.net/manual/en/function.pcntl-fork) を参照してください。 php

于 2012-01-26T19:00:59.287 に答える