annotate vendor/guzzlehttp/psr7/src/StreamWrapper.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
rev   line source
Chris@0 1 <?php
Chris@0 2 namespace GuzzleHttp\Psr7;
Chris@0 3
Chris@0 4 use Psr\Http\Message\StreamInterface;
Chris@0 5
Chris@0 6 /**
Chris@0 7 * Converts Guzzle streams into PHP stream resources.
Chris@0 8 */
Chris@0 9 class StreamWrapper
Chris@0 10 {
Chris@0 11 /** @var resource */
Chris@0 12 public $context;
Chris@0 13
Chris@0 14 /** @var StreamInterface */
Chris@0 15 private $stream;
Chris@0 16
Chris@0 17 /** @var string r, r+, or w */
Chris@0 18 private $mode;
Chris@0 19
Chris@0 20 /**
Chris@0 21 * Returns a resource representing the stream.
Chris@0 22 *
Chris@0 23 * @param StreamInterface $stream The stream to get a resource for
Chris@0 24 *
Chris@0 25 * @return resource
Chris@0 26 * @throws \InvalidArgumentException if stream is not readable or writable
Chris@0 27 */
Chris@0 28 public static function getResource(StreamInterface $stream)
Chris@0 29 {
Chris@0 30 self::register();
Chris@0 31
Chris@0 32 if ($stream->isReadable()) {
Chris@0 33 $mode = $stream->isWritable() ? 'r+' : 'r';
Chris@0 34 } elseif ($stream->isWritable()) {
Chris@0 35 $mode = 'w';
Chris@0 36 } else {
Chris@0 37 throw new \InvalidArgumentException('The stream must be readable, '
Chris@0 38 . 'writable, or both.');
Chris@0 39 }
Chris@0 40
Chris@0 41 return fopen('guzzle://stream', $mode, null, stream_context_create([
Chris@0 42 'guzzle' => ['stream' => $stream]
Chris@0 43 ]));
Chris@0 44 }
Chris@0 45
Chris@0 46 /**
Chris@0 47 * Registers the stream wrapper if needed
Chris@0 48 */
Chris@0 49 public static function register()
Chris@0 50 {
Chris@0 51 if (!in_array('guzzle', stream_get_wrappers())) {
Chris@0 52 stream_wrapper_register('guzzle', __CLASS__);
Chris@0 53 }
Chris@0 54 }
Chris@0 55
Chris@0 56 public function stream_open($path, $mode, $options, &$opened_path)
Chris@0 57 {
Chris@0 58 $options = stream_context_get_options($this->context);
Chris@0 59
Chris@0 60 if (!isset($options['guzzle']['stream'])) {
Chris@0 61 return false;
Chris@0 62 }
Chris@0 63
Chris@0 64 $this->mode = $mode;
Chris@0 65 $this->stream = $options['guzzle']['stream'];
Chris@0 66
Chris@0 67 return true;
Chris@0 68 }
Chris@0 69
Chris@0 70 public function stream_read($count)
Chris@0 71 {
Chris@0 72 return $this->stream->read($count);
Chris@0 73 }
Chris@0 74
Chris@0 75 public function stream_write($data)
Chris@0 76 {
Chris@0 77 return (int) $this->stream->write($data);
Chris@0 78 }
Chris@0 79
Chris@0 80 public function stream_tell()
Chris@0 81 {
Chris@0 82 return $this->stream->tell();
Chris@0 83 }
Chris@0 84
Chris@0 85 public function stream_eof()
Chris@0 86 {
Chris@0 87 return $this->stream->eof();
Chris@0 88 }
Chris@0 89
Chris@0 90 public function stream_seek($offset, $whence)
Chris@0 91 {
Chris@0 92 $this->stream->seek($offset, $whence);
Chris@0 93
Chris@0 94 return true;
Chris@0 95 }
Chris@0 96
Chris@0 97 public function stream_stat()
Chris@0 98 {
Chris@0 99 static $modeMap = [
Chris@0 100 'r' => 33060,
Chris@0 101 'r+' => 33206,
Chris@0 102 'w' => 33188
Chris@0 103 ];
Chris@0 104
Chris@0 105 return [
Chris@0 106 'dev' => 0,
Chris@0 107 'ino' => 0,
Chris@0 108 'mode' => $modeMap[$this->mode],
Chris@0 109 'nlink' => 0,
Chris@0 110 'uid' => 0,
Chris@0 111 'gid' => 0,
Chris@0 112 'rdev' => 0,
Chris@0 113 'size' => $this->stream->getSize() ?: 0,
Chris@0 114 'atime' => 0,
Chris@0 115 'mtime' => 0,
Chris@0 116 'ctime' => 0,
Chris@0 117 'blksize' => 0,
Chris@0 118 'blocks' => 0
Chris@0 119 ];
Chris@0 120 }
Chris@0 121 }