当存在单个超时时,curl_multi_exec会终止整个进程

时间:2012-09-11 13:50:48

标签: php curl

我正在使用curl_multi以类似于此的滚动卷曲脚本发送电子邮件,但我添加了10秒的curlopt_timeout和20秒的curlopt_connecttimeout http://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/

在测试时,我分别使用timeout_ms和connecttimeout_ms将超时时间减少到1ms,只是为了看看它是如何处理超时的。但超时会终止整个卷曲过程。有没有办法继续使用其他线程即使一次超出? 感谢。

-devo

1 个答案:

答案 0 :(得分:0)

https://github.com/krakjoe/pthreads

<?php
class Possibilities extends Thread {
    public function __construct($url){
        $this->url = $url;
    }

    public function run(){
        /*
        * Or use curl, this is quicker to make an example ...
        */
        return file_get_contents($this->url);
    }
}
$threads = array();
$urls = get_my_urls_from_somewhere();
foreach($urls as $index => $url){
    $threads[$index]=new Possibilities($url);
    $threads[$index]->start();
}
foreach($threads as $index => $thread ){
    if( ( $response = $threads[$index]->join() ) ){
        /** good, got a response */
    } else { /** we do not care **/ }
}
?>

我的猜测是,你正在使用curl multi,因为它是同时执行发送电子邮件的代码的唯一选项...如果是这种情况,我不建议你使用类似上面的代码,我建议您将调用直接调用mail(),因为到目前为止这将更快,更有效。

但是现在你知道了,你可以在PHP中进行操作..享受:)