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) {
109  throw new CAS_OutOfSequenceException(
110  'Request has already been sent cannot send again.'
111  );
112  }
113  if (!count($this->_requests)) {
114  throw new CAS_OutOfSequenceException(
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 }
addRequest(CAS_Request_RequestInterface $request)
Add a new Request to this batch.
getNumRequests()
Retrieve the number of requests added to this batch.
This interface defines a class library for performing multiple web requests in batches.
This interface defines a class library for performing web requests.
Provides support for performing web-requests via curl.
Definition: CurlRequest.php:40
This class defines Exceptions that should be thrown when the sequence of operations is invalid...
Exception that denotes invalid arguments were passed.
Create styles array
The data for the language used.
send()
Perform the request.
This interface defines a class library for performing multiple web requests in batches.