Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Core.php

Zuletzt modifiziert: 09.10.2024, 12:56 - Dateigröße: 10.76 KiB


001  <?php
002  namespace GuzzleHttp\Ring;
003   
004  use GuzzleHttp\Stream\StreamInterface;
005  use GuzzleHttp\Ring\Future\FutureArrayInterface;
006  use GuzzleHttp\Ring\Future\FutureArray;
007   
008  /**
009   * Provides core functionality of Ring handlers and middleware.
010   */
011  class Core
012  {
013      /**
014       * Returns a function that calls all of the provided functions, in order,
015       * passing the arguments provided to the composed function to each function.
016       *
017       * @param callable[] $functions Array of functions to proxy to.
018       *
019       * @return callable
020       */
021      public static function callArray(array $functions)
022      {
023          return function () use ($functions) {
024              $args = func_get_args();
025              foreach ($functions as $fn) {
026                  call_user_func_array($fn, $args);
027              }
028          };
029      }
030   
031      /**
032       * Gets an array of header line values from a message for a specific header
033       *
034       * This method searches through the "headers" key of a message for a header
035       * using a case-insensitive search.
036       *
037       * @param array  $message Request or response hash.
038       * @param string $header  Header to retrieve
039       *
040       * @return array
041       */
042      public static function headerLines($message, $header)
043      {
044          $result = [];
045   
046          if (!empty($message['headers'])) {
047              foreach ($message['headers'] as $name => $value) {
048                  if (!strcasecmp($name, $header)) {
049                      $result = array_merge($result, $value);
050                  }
051              }
052          }
053   
054          return $result;
055      }
056   
057      /**
058       * Gets a header value from a message as a string or null
059       *
060       * This method searches through the "headers" key of a message for a header
061       * using a case-insensitive search. The lines of the header are imploded
062       * using commas into a single string return value.
063       *
064       * @param array  $message Request or response hash.
065       * @param string $header  Header to retrieve
066       *
067       * @return string|null Returns the header string if found, or null if not.
068       */
069      public static function header($message, $header)
070      {
071          $match = self::headerLines($message, $header);
072          return $match ? implode(', ', $match) : null;
073      }
074   
075      /**
076       * Returns the first header value from a message as a string or null. If
077       * a header line contains multiple values separated by a comma, then this
078       * function will return the first value in the list.
079       *
080       * @param array  $message Request or response hash.
081       * @param string $header  Header to retrieve
082       *
083       * @return string|null Returns the value as a string if found.
084       */
085      public static function firstHeader($message, $header)
086      {
087          if (!empty($message['headers'])) {
088              foreach ($message['headers'] as $name => $value) {
089                  if (!strcasecmp($name, $header)) {
090                      // Return the match itself if it is a single value.
091                      $pos = strpos($value[0], ',');
092                      return $pos ? substr($value[0], 0, $pos) : $value[0];
093                  }
094              }
095          }
096   
097          return null;
098      }
099   
100      /**
101       * Returns true if a message has the provided case-insensitive header.
102       *
103       * @param array  $message Request or response hash.
104       * @param string $header  Header to check
105       *
106       * @return bool
107       */
108      public static function hasHeader($message, $header)
109      {
110          if (!empty($message['headers'])) {
111              foreach ($message['headers'] as $name => $value) {
112                  if (!strcasecmp($name, $header)) {
113                      return true;
114                  }
115              }
116          }
117   
118          return false;
119      }
120   
121      /**
122       * Parses an array of header lines into an associative array of headers.
123       *
124       * @param array $lines Header lines array of strings in the following
125       *                     format: "Name: Value"
126       * @return array
127       */
128      public static function headersFromLines($lines)
129      {
130          $headers = [];
131   
132          foreach ($lines as $line) {
133              $parts = explode(':', $line, 2);
134              $headers[trim($parts[0])][] = isset($parts[1])
135                  ? trim($parts[1])
136                  : null;
137          }
138   
139          return $headers;
140      }
141   
142      /**
143       * Removes a header from a message using a case-insensitive comparison.
144       *
145       * @param array  $message Message that contains 'headers'
146       * @param string $header  Header to remove
147       *
148       * @return array
149       */
150      public static function removeHeader(array $message, $header)
151      {
152          if (isset($message['headers'])) {
153              foreach (array_keys($message['headers']) as $key) {
154                  if (!strcasecmp($header, $key)) {
155                      unset($message['headers'][$key]);
156                  }
157              }
158          }
159   
160          return $message;
161      }
162   
163      /**
164       * Replaces any existing case insensitive headers with the given value.
165       *
166       * @param array  $message Message that contains 'headers'
167       * @param string $header  Header to set.
168       * @param array  $value   Value to set.
169       *
170       * @return array
171       */
172      public static function setHeader(array $message, $header, array $value)
173      {
174          $message = self::removeHeader($message, $header);
175          $message['headers'][$header] = $value;
176   
177          return $message;
178      }
179   
180      /**
181       * Creates a URL string from a request.
182       *
183       * If the "url" key is present on the request, it is returned, otherwise
184       * the url is built up based on the scheme, host, uri, and query_string
185       * request values.
186       *
187       * @param array $request Request to get the URL from
188       *
189       * @return string Returns the request URL as a string.
190       * @throws \InvalidArgumentException if no Host header is present.
191       */
192      public static function url(array $request)
193      {
194          if (isset($request['url'])) {
195              return $request['url'];
196          }
197   
198          $uri = (isset($request['scheme'])
199                  ? $request['scheme'] : 'http') . '://';
200   
201          if ($host = self::header($request, 'host')) {
202              $uri .= $host;
203          } else {
204              throw new \InvalidArgumentException('No Host header was provided');
205          }
206   
207          if (isset($request['uri'])) {
208              $uri .= $request['uri'];
209          }
210   
211          if (isset($request['query_string'])) {
212              $uri .= '?' . $request['query_string'];
213          }
214   
215          return $uri;
216      }
217   
218      /**
219       * Reads the body of a message into a string.
220       *
221       * @param array|FutureArrayInterface $message Array containing a "body" key
222       *
223       * @return null|string Returns the body as a string or null if not set.
224       * @throws \InvalidArgumentException if a request body is invalid.
225       */
226      public static function body($message)
227      {
228          if (!isset($message['body'])) {
229              return null;
230          }
231   
232          if ($message['body'] instanceof StreamInterface) {
233              return (string) $message['body'];
234          }
235   
236          switch (gettype($message['body'])) {
237              case 'string':
238                  return $message['body'];
239              case 'resource':
240                  return stream_get_contents($message['body']);
241              case 'object':
242                  if ($message['body'] instanceof \Iterator) {
243                      return implode('', iterator_to_array($message['body']));
244                  } elseif (method_exists($message['body'], '__toString')) {
245                      return (string) $message['body'];
246                  }
247              default:
248                  throw new \InvalidArgumentException('Invalid request body: '
249                      . self::describeType($message['body']));
250          }
251      }
252   
253      /**
254       * Rewind the body of the provided message if possible.
255       *
256       * @param array $message Message that contains a 'body' field.
257       *
258       * @return bool Returns true on success, false on failure
259       */
260      public static function rewindBody($message)
261      {
262          if ($message['body'] instanceof StreamInterface) {
263              return $message['body']->seek(0);
264          }
265   
266          if ($message['body'] instanceof \Generator) {
267              return false;
268          }
269   
270          if ($message['body'] instanceof \Iterator) {
271              $message['body']->rewind();
272              return true;
273          }
274   
275          if (is_resource($message['body'])) {
276              return rewind($message['body']);
277          }
278   
279          return is_string($message['body'])
280              || (is_object($message['body'])
281                  && method_exists($message['body'], '__toString'));
282      }
283   
284      /**
285       * Debug function used to describe the provided value type and class.
286       *
287       * @param mixed $input
288       *
289       * @return string Returns a string containing the type of the variable and
290       *                if a class is provided, the class name.
291       */
292      public static function describeType($input)
293      {
294          switch (gettype($input)) {
295              case 'object':
296                  return 'object(' . get_class($input) . ')';
297              case 'array':
298                  return 'array(' . count($input) . ')';
299              default:
300                  ob_start();
301                  var_dump($input);
302                  // normalize float vs double
303                  return str_replace('double(', 'float(', rtrim(ob_get_clean()));
304          }
305      }
306   
307      /**
308       * Sleep for the specified amount of time specified in the request's
309       * ['client']['delay'] option if present.
310       *
311       * This function should only be used when a non-blocking sleep is not
312       * possible.
313       *
314       * @param array $request Request to sleep
315       */
316      public static function doSleep(array $request)
317      {
318          if (isset($request['client']['delay'])) {
319              usleep($request['client']['delay'] * 1000);
320          }
321      }
322   
323      /**
324       * Returns a proxied future that modifies the dereferenced value of another
325       * future using a promise.
326       *
327       * @param FutureArrayInterface $future      Future to wrap with a new future
328       * @param callable    $onFulfilled Invoked when the future fulfilled
329       * @param callable    $onRejected  Invoked when the future rejected
330       * @param callable    $onProgress  Invoked when the future progresses
331       *
332       * @return FutureArray
333       */
334      public static function proxy(
335          FutureArrayInterface $future,
336          callable $onFulfilled = null,
337          callable $onRejected = null,
338          callable $onProgress = null
339      ) {
340          return new FutureArray(
341              $future->then($onFulfilled, $onRejected, $onProgress),
342              [$future, 'wait'],
343              [$future, 'cancel']
344          );
345      }
346   
347      /**
348       * Returns a debug stream based on the provided variable.
349       *
350       * @param mixed $value Optional value
351       *
352       * @return resource
353       */
354      public static function getDebugResource($value = null)
355      {
356          if (is_resource($value)) {
357              return $value;
358          } elseif (defined('STDOUT')) {
359              return STDOUT;
360          } else {
361              return fopen('php://output', 'w');
362          }
363      }
364  }
365