ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
CurlMultiRequest.php
Go to the documentation of this file.
1<?php
2
44{
45 private $_requests = array();
46 private $_sent = false;
47
48 /*********************************************************
49 * Add Requests
50 *********************************************************/
51
64 public function addRequest (CAS_Request_RequestInterface $request)
65 {
66 if ($this->_sent) {
68 'Request has already been sent cannot '.__METHOD__
69 );
70 }
71 if (!$request instanceof CAS_Request_CurlRequest) {
73 'As a CAS_Request_CurlMultiRequest, I can only work with CAS_Request_CurlRequest objects.'
74 );
75 }
76
77 $this->_requests[] = $request;
78 }
79
85 public function getNumRequests()
86 {
87 if ($this->_sent) {
89 'Request has already been sent cannot '.__METHOD__
90 );
91 }
92 return count($this->_requests);
93 }
94
95 /*********************************************************
96 * 2. Send the Request
97 *********************************************************/
98
106 public function send ()
107 {
108 if ($this->_sent) {
110 'Request has already been sent cannot send again.'
111 );
112 }
113 if (!count($this->_requests)) {
115 'At least one request must be added via addRequest() before the multi-request can be sent.'
116 );
117 }
118
119 $this->_sent = true;
120
121 // Initialize our handles and configure all requests.
122 $handles = array();
123 $multiHandle = curl_multi_init();
124 foreach ($this->_requests as $i => $request) {
125 $handle = $request->initAndConfigure();
126 curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
127 $handles[$i] = $handle;
128 curl_multi_add_handle($multiHandle, $handle);
129 }
130
131 // Execute the requests in parallel.
132 do {
133 curl_multi_exec($multiHandle, $running);
134 } while ($running > 0);
135
136 // Populate all of the responses or errors back into the request objects.
137 foreach ($this->_requests as $i => $request) {
138 $buf = curl_multi_getcontent($handles[$i]);
139 $request->_storeResponseBody($buf);
140 curl_multi_remove_handle($multiHandle, $handles[$i]);
141 curl_close($handles[$i]);
142 }
143
144 curl_multi_close($multiHandle);
145 }
146}
An exception for terminatinating execution or to throw for unit testing.
Exception that denotes invalid arguments were passed.
This class defines Exceptions that should be thrown when the sequence of operations is invalid.
This interface defines a class library for performing multiple web requests in batches.
send()
Perform the request.
addRequest(CAS_Request_RequestInterface $request)
Add a new Request to this batch.
getNumRequests()
Retrieve the number of requests added to this batch.
Provides support for performing web-requests via curl.
Definition: CurlRequest.php:43
This interface defines a class library for performing multiple web requests in batches.
This interface defines a class library for performing web requests.