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

PumpStream.php

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


 001  <?php
 002  namespace GuzzleHttp\Stream;
 003   
 004  use GuzzleHttp\Stream\Exception\CannotAttachException;
 005   
 006  /**
 007   * Provides a read only stream that pumps data from a PHP callable.
 008   *
 009   * When invoking the provided callable, the PumpStream will pass the amount of
 010   * data requested to read to the callable. The callable can choose to ignore
 011   * this value and return fewer or more bytes than requested. Any extra data
 012   * returned by the provided callable is buffered internally until drained using
 013   * the read() function of the PumpStream. The provided callable MUST return
 014   * false when there is no more data to read.
 015   */
 016  class PumpStream implements StreamInterface
 017  {
 018      /** @var callable */
 019      private $source;
 020   
 021      /** @var int */
 022      private $size;
 023   
 024      /** @var int */
 025      private $tellPos = 0;
 026   
 027      /** @var array */
 028      private $metadata;
 029   
 030      /** @var BufferStream */
 031      private $buffer;
 032   
 033      /**
 034       * @param callable $source Source of the stream data. The callable MAY
 035       *                         accept an integer argument used to control the
 036       *                         amount of data to return. The callable MUST
 037       *                         return a string when called, or false on error
 038       *                         or EOF.
 039       * @param array $options   Stream options:
 040       *                         - metadata: Hash of metadata to use with stream.
 041       *                         - size: Size of the stream, if known.
 042       */
 043      public function __construct(callable $source, array $options = [])
 044      {
 045          $this->source = $source;
 046          $this->size = isset($options['size']) ? $options['size'] : null;
 047          $this->metadata = isset($options['metadata']) ? $options['metadata'] : [];
 048          $this->buffer = new BufferStream();
 049      }
 050   
 051      public function __toString()
 052      {
 053          return Utils::copyToString($this);
 054      }
 055   
 056      public function close()
 057      {
 058          $this->detach();
 059      }
 060   
 061      public function detach()
 062      {
 063          $this->tellPos = false;
 064          $this->source = null;
 065      }
 066   
 067      public function attach($stream)
 068      {
 069          throw new CannotAttachException();
 070      }
 071   
 072      public function getSize()
 073      {
 074          return $this->size;
 075      }
 076   
 077      public function tell()
 078      {
 079          return $this->tellPos;
 080      }
 081   
 082      public function eof()
 083      {
 084          return !$this->source;
 085      }
 086   
 087      public function isSeekable()
 088      {
 089          return false;
 090      }
 091   
 092      public function seek($offset, $whence = SEEK_SET)
 093      {
 094          return false;
 095      }
 096   
 097      public function isWritable()
 098      {
 099          return false;
 100      }
 101   
 102      public function write($string)
 103      {
 104          return false;
 105      }
 106   
 107      public function isReadable()
 108      {
 109          return true;
 110      }
 111   
 112      public function read($length)
 113      {
 114          $data = $this->buffer->read($length);
 115          $readLen = strlen($data);
 116          $this->tellPos += $readLen;
 117          $remaining = $length - $readLen;
 118   
 119          if ($remaining) {
 120              $this->pump($remaining);
 121              $data .= $this->buffer->read($remaining);
 122              $this->tellPos += strlen($data) - $readLen;
 123          }
 124   
 125          return $data;
 126      }
 127   
 128      public function getContents()
 129      {
 130          $result = '';
 131          while (!$this->eof()) {
 132              $result .= $this->read(1000000);
 133          }
 134   
 135          return $result;
 136      }
 137   
 138      public function getMetadata($key = null)
 139      {
 140          if (!$key) {
 141              return $this->metadata;
 142          }
 143   
 144          return isset($this->metadata[$key]) ? $this->metadata[$key] : null;
 145      }
 146   
 147      private function pump($length)
 148      {
 149          if ($this->source) {
 150              do {
 151                  $data = call_user_func($this->source, $length);
 152                  if ($data === false || $data === null) {
 153                      $this->source = null;
 154                      return;
 155                  }
 156                  $this->buffer->write($data);
 157                  $length -= strlen($data);
 158              } while ($length > 0);
 159          }
 160      }
 161  }
 162