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

PostBody.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 6.09 KiB


 001  <?php
 002  namespace GuzzleHttp\Post;
 003   
 004  use GuzzleHttp\Message\RequestInterface;
 005  use GuzzleHttp\Stream\Exception\CannotAttachException;
 006  use GuzzleHttp\Stream\StreamInterface;
 007  use GuzzleHttp\Stream\Stream;
 008  use GuzzleHttp\Query;
 009   
 010  /**
 011   * Holds POST fields and files and creates a streaming body when read methods
 012   * are called on the object.
 013   */
 014  class PostBody implements PostBodyInterface
 015  {
 016      /** @var StreamInterface */
 017      private $body;
 018   
 019      /** @var callable */
 020      private $aggregator;
 021   
 022      private $fields = [];
 023   
 024      /** @var PostFileInterface[] */
 025      private $files = [];
 026      private $forceMultipart = false;
 027      private $detached = false;
 028   
 029      /**
 030       * Applies request headers to a request based on the POST state
 031       *
 032       * @param RequestInterface $request Request to update
 033       */
 034      public function applyRequestHeaders(RequestInterface $request)
 035      {
 036          if ($this->files || $this->forceMultipart) {
 037              $request->setHeader(
 038                  'Content-Type',
 039                  'multipart/form-data; boundary=' . $this->getBody()->getBoundary()
 040              );
 041          } elseif ($this->fields && !$request->hasHeader('Content-Type')) {
 042              $request->setHeader(
 043                  'Content-Type',
 044                  'application/x-www-form-urlencoded'
 045              );
 046          }
 047   
 048          if ($size = $this->getSize()) {
 049              $request->setHeader('Content-Length', $size);
 050          }
 051      }
 052   
 053      public function forceMultipartUpload($force)
 054      {
 055          $this->forceMultipart = $force;
 056      }
 057   
 058      public function setAggregator(callable $aggregator)
 059      {
 060          $this->aggregator = $aggregator;
 061      }
 062   
 063      public function setField($name, $value)
 064      {
 065          $this->fields[$name] = $value;
 066          $this->mutate();
 067      }
 068   
 069      public function replaceFields(array $fields)
 070      {
 071          $this->fields = $fields;
 072          $this->mutate();
 073      }
 074   
 075      public function getField($name)
 076      {
 077          return isset($this->fields[$name]) ? $this->fields[$name] : null;
 078      }
 079   
 080      public function removeField($name)
 081      {
 082          unset($this->fields[$name]);
 083          $this->mutate();
 084      }
 085   
 086      public function getFields($asString = false)
 087      {
 088          if (!$asString) {
 089              return $this->fields;
 090          }
 091   
 092          $query = new Query($this->fields);
 093          $query->setEncodingType(Query::RFC1738);
 094          $query->setAggregator($this->getAggregator());
 095   
 096          return (string) $query;
 097      }
 098   
 099      public function hasField($name)
 100      {
 101          return isset($this->fields[$name]);
 102      }
 103   
 104      public function getFile($name)
 105      {
 106          foreach ($this->files as $file) {
 107              if ($file->getName() == $name) {
 108                  return $file;
 109              }
 110          }
 111   
 112          return null;
 113      }
 114   
 115      public function getFiles()
 116      {
 117          return $this->files;
 118      }
 119   
 120      public function addFile(PostFileInterface $file)
 121      {
 122          $this->files[] = $file;
 123          $this->mutate();
 124      }
 125   
 126      public function clearFiles()
 127      {
 128          $this->files = [];
 129          $this->mutate();
 130      }
 131   
 132      /**
 133       * Returns the numbers of fields + files
 134       *
 135       * @return int
 136       */
 137      public function count()
 138      {
 139          return count($this->files) + count($this->fields);
 140      }
 141   
 142      public function __toString()
 143      {
 144          return (string) $this->getBody();
 145      }
 146   
 147      public function getContents($maxLength = -1)
 148      {
 149          return $this->getBody()->getContents();
 150      }
 151   
 152      public function close()
 153      {
 154          $this->detach();
 155      }
 156   
 157      public function detach()
 158      {
 159          $this->detached = true;
 160          $this->fields = $this->files = [];
 161   
 162          if ($this->body) {
 163              $this->body->close();
 164              $this->body = null;
 165          }
 166      }
 167   
 168      public function attach($stream)
 169      {
 170          throw new CannotAttachException();
 171      }
 172   
 173      public function eof()
 174      {
 175          return $this->getBody()->eof();
 176      }
 177   
 178      public function tell()
 179      {
 180          return $this->body ? $this->body->tell() : 0;
 181      }
 182   
 183      public function isSeekable()
 184      {
 185          return true;
 186      }
 187   
 188      public function isReadable()
 189      {
 190          return true;
 191      }
 192   
 193      public function isWritable()
 194      {
 195          return false;
 196      }
 197   
 198      public function getSize()
 199      {
 200          return $this->getBody()->getSize();
 201      }
 202   
 203      public function seek($offset, $whence = SEEK_SET)
 204      {
 205          return $this->getBody()->seek($offset, $whence);
 206      }
 207   
 208      public function read($length)
 209      {
 210          return $this->getBody()->read($length);
 211      }
 212   
 213      public function write($string)
 214      {
 215          return false;
 216      }
 217   
 218      public function getMetadata($key = null)
 219      {
 220          return $key ? null : [];
 221      }
 222   
 223      /**
 224       * Return a stream object that is built from the POST fields and files.
 225       *
 226       * If one has already been created, the previously created stream will be
 227       * returned.
 228       */
 229      private function getBody()
 230      {
 231          if ($this->body) {
 232              return $this->body;
 233          } elseif ($this->files || $this->forceMultipart) {
 234              return $this->body = $this->createMultipart();
 235          } elseif ($this->fields) {
 236              return $this->body = $this->createUrlEncoded();
 237          } else {
 238              return $this->body = Stream::factory();
 239          }
 240      }
 241   
 242      /**
 243       * Get the aggregator used to join multi-valued field parameters
 244       *
 245       * @return callable
 246       */
 247      final protected function getAggregator()
 248      {
 249          if (!$this->aggregator) {
 250              $this->aggregator = Query::phpAggregator();
 251          }
 252   
 253          return $this->aggregator;
 254      }
 255   
 256      /**
 257       * Creates a multipart/form-data body stream
 258       *
 259       * @return MultipartBody
 260       */
 261      private function createMultipart()
 262      {
 263          // Flatten the nested query string values using the correct aggregator
 264          return new MultipartBody(
 265              call_user_func($this->getAggregator(), $this->fields),
 266              $this->files
 267          );
 268      }
 269   
 270      /**
 271       * Creates an application/x-www-form-urlencoded stream body
 272       *
 273       * @return StreamInterface
 274       */
 275      private function createUrlEncoded()
 276      {
 277          return Stream::factory($this->getFields(true));
 278      }
 279   
 280      /**
 281       * Get rid of any cached data
 282       */
 283      private function mutate()
 284      {
 285          $this->body = null;
 286      }
 287  }
 288