public function execute()
    {

        $master = curl_multi_init();

        // start the first batch of requests
        $firstBatch = $this->getNextPendingRequests($this->getSimultaneousLimit());

        // what a silly "error"
        if (count($firstBatch) == 0) {
            return;
        }

        foreach ($firstBatch as $request) {
            // setup the curl request, queue it up, and put it in the active array
            $ch      = curl_init();
            $options = $this->prepareRequestOptions($request);
            curl_setopt_array($ch, $options);
            curl_multi_add_handle($master, $ch);
            $this->activeRequests[(string)$ch] = $request;
        }

        do {

            while (($execrun = curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM) {
                ;
            }

            if ($execrun != CURLM_OK) {
                // todo: throw exception
                break;
            }

            // a request was just completed -- find out which one
            while ($transfer = curl_multi_info_read($master)) {

                // get the request object back and put the curl response into it
                $key     = (string)$transfer['handle'];
                $request = $this->activeRequests[$key];
                $request->setResponseText(curl_multi_getcontent($transfer['handle']));
                $request->setResponseErrno(curl_errno($transfer['handle']));
                $request->setResponseError(curl_error($transfer['handle']));
                $request->setResponseInfo(curl_getinfo($transfer['handle']));

                // if there is a callback, run it
                if (is_callable($this->callback)) {
                    $callback = $this->callback;
                    $callback($request, $this);
                }

                // remove the request from the list of active requests
                unset($this->activeRequests[$key]);

                // move the request to the completed set
                $this->completedRequests[] = $request;

                // start a new request (it's important to do this before removing the old one)
                if ($nextRequest = $this->getNextPendingRequest()) {
                    // setup the curl request, queue it up, and put it in the active array
                    $ch      = curl_init();
                    $options = $this->prepareRequestOptions($nextRequest);
                    curl_setopt_array($ch, $options);
                    curl_multi_add_handle($master, $ch);
                    $this->activeRequests[(string)$ch] = $nextRequest;
                }

                // remove the curl handle that just completed
                curl_multi_remove_handle($master, $transfer['handle']);

            }

            if ($running) {
                curl_multi_select($master, $this->timeout);
            }

            // keep the loop going as long as multi_exec says it is running
        } while ($running);

        curl_multi_close($master);
    }
public function execute()
    {

        $master = curl_multi_init();

        // start the first batch of requests
        $firstBatch = $this->getNextPendingRequests($this->getSimultaneousLimit());

        // what a silly "error"
        if (count($firstBatch) == 0) {
            return;
        }

        foreach ($firstBatch as $request) {
            // setup the curl request, queue it up, and put it in the active array
            $ch      = curl_init();
            $options = $this->prepareRequestOptions($request);
            curl_setopt_array($ch, $options);
            curl_multi_add_handle($master, $ch);
            $this->activeRequests[(string)$ch] = $request;
        }

        do {

            while (($execrun = curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM) {
                ;
            }

            if ($execrun != CURLM_OK) {
                // todo: throw exception
                break;
            }

            // a request was just completed -- find out which one
            while ($transfer = curl_multi_info_read($master)) {

                // get the request object back and put the curl response into it
                $key     = (string)$transfer['handle'];
                $request = $this->activeRequests[$key];
                $request->setResponseText(curl_multi_getcontent($transfer['handle']));
                $request->setResponseErrno(curl_errno($transfer['handle']));
                $request->setResponseError(curl_error($transfer['handle']));
                $request->setResponseInfo(curl_getinfo($transfer['handle']));

                // if there is a callback, run it
                if (is_callable($this->callback)) {
                    $callback = $this->callback;
                    $callback($request, $this);
                }

                // remove the request from the list of active requests
                unset($this->activeRequests[$key]);

                // move the request to the completed set
                $this->completedRequests[] = $request;

                // start a new request (it's important to do this before removing the old one)
                if ($nextRequest = $this->getNextPendingRequest()) {
                    // setup the curl request, queue it up, and put it in the active array
                    $ch      = curl_init();
                    $options = $this->prepareRequestOptions($nextRequest);
                    curl_setopt_array($ch, $options);
                    curl_multi_add_handle($master, $ch);
                    $this->activeRequests[(string)$ch] = $nextRequest;
                }

                // remove the curl handle that just completed
                curl_multi_remove_handle($master, $transfer['handle']);

            }

            if ($running) {
                curl_multi_select($master, $this->timeout);
            }

            // keep the loop going as long as multi_exec says it is running
        } while ($running);

        curl_multi_close($master);
    }
public function execute ( ) { $ master = curl_multi_init ( ) ; // start the first batch of requests $ firstBatch = $ this -> getNextPendingRequests ( $ this -> getSimultaneousLimit ( ) ) ; // what a silly "error" if ( count ( $ firstBatch ) == 0 ) { return ; } foreach ( $ firstBatch as $ request ) { // setup the curl request, queue it up, and put it in the active array $ ch = curl_init ( ) ; $ options = $ this -> prepareRequestOptions ( $ request ) ; curl_setopt_array ( $ ch , $ options ) ; curl_multi_add_handle ( $ master , $ ch ) ; $ this -> activeRequests [ ( string ) $ ch ] = $ request ; } do { while ( ( $ execrun = curl_multi_exec ( $ master , $ running ) ) == CURLM_CALL_MULTI_PERFORM ) { ; } if ( $ execrun != CURLM_OK ) { // todo: throw exception break ; } // a request was just completed -- find out which one while ( $ transfer = curl_multi_info_read ( $ master ) ) { // get the request object back and put the curl response into it $ key = ( string ) $ transfer [ 'handle' ] ; $ request = $ this -> activeRequests [ $ key ] ; $ request -> setResponseText ( curl_multi_getcontent ( $ transfer [ 'handle' ] ) ) ; $ request -> setResponseErrno ( curl_errno ( $ transfer [ 'handle' ] ) ) ; $ request -> setResponseError ( curl_error ( $ transfer [ 'handle' ] ) ) ; $ request -> setResponseInfo ( curl_getinfo ( $ transfer [ 'handle' ] ) ) ; // if there is a callback, run it if ( is_callable ( $ this -> callback ) ) { $ callback = $ this -> callback ; $ callback ( $ request , $ this ) ; } // remove the request from the list of active requests unset ( $ this -> activeRequests [ $ key ] ) ; // move the request to the completed set $ this -> completedRequests [ ] = $ request ; // start a new request (it's important to do this before removing the old one) if ( $ nextRequest = $ this -> getNextPendingRequest ( ) ) { // setup the curl request, queue it up, and put it in the active array $ ch = curl_init ( ) ; $ options = $ this -> prepareRequestOptions ( $ nextRequest ) ; curl_setopt_array ( $ ch , $ options ) ; curl_multi_add_handle ( $ master , $ ch ) ; $ this -> activeRequests [ ( string ) $ ch ] = $ nextRequest ; } // remove the curl handle that just completed curl_multi_remove_handle ( $ master , $ transfer [ 'handle' ] ) ; } if ( $ running ) { curl_multi_select ( $ master , $ this -> timeout ) ; } // keep the loop going as long as multi_exec says it is running } while ( $ running ) ; curl_multi_close ( $ master ) ; }
Run all queued requests

@return void
Run all queued requests