Blame | Last modification | View Log | RSS feed
<?phpnamespace GuzzleHttp\Psr7;use Psr\Http\Message\StreamInterface;/*** Converts Guzzle streams into PHP stream resources.*/class StreamWrapper{/** @var resource */public $context;/** @var StreamInterface */private $stream;/** @var string r, r+, or w */private $mode;/*** Returns a resource representing the stream.** @param StreamInterface $stream The stream to get a resource for** @return resource* @throws \InvalidArgumentException if stream is not readable or writable*/public static function getResource(StreamInterface $stream){self::register();if ($stream->isReadable()) {$mode = $stream->isWritable() ? 'r+' : 'r';} elseif ($stream->isWritable()) {$mode = 'w';} else {throw new \InvalidArgumentException('The stream must be readable, '. 'writable, or both.');}return fopen('guzzle://stream', $mode, null, stream_context_create(['guzzle' => ['stream' => $stream]]));}/*** Registers the stream wrapper if needed*/public static function register(){if (!in_array('guzzle', stream_get_wrappers())) {stream_wrapper_register('guzzle', __CLASS__);}}public function stream_open($path, $mode, $options, &$opened_path){$options = stream_context_get_options($this->context);if (!isset($options['guzzle']['stream'])) {return false;}$this->mode = $mode;$this->stream = $options['guzzle']['stream'];return true;}public function stream_read($count){return $this->stream->read($count);}public function stream_write($data){return (int) $this->stream->write($data);}public function stream_tell(){return $this->stream->tell();}public function stream_eof(){return $this->stream->eof();}public function stream_seek($offset, $whence){$this->stream->seek($offset, $whence);return true;}public function stream_stat(){static $modeMap = ['r' => 33060,'r+' => 33206,'w' => 33188];return ['dev' => 0,'ino' => 0,'mode' => $modeMap[$this->mode],'nlink' => 0,'uid' => 0,'gid' => 0,'rdev' => 0,'size' => $this->stream->getSize() ?: 0,'atime' => 0,'mtime' => 0,'ctime' => 0,'blksize' => 0,'blocks' => 0];}}