PluginProbe
BerqWP – All-In-One Optimization for Core Web Vitals, Cache, CDN, Images, CSS & JavaScript / 4.1.17
BerqWP – All-In-One Optimization for Core Web Vitals, Cache, CDN, Images, CSS & JavaScript v4.1.17
4.1.19 4.1.18 4.1.17 4.1.16 4.1.15 4.1.14 4.1.13 4.1.12 4.1.11 4.1.10 4.0.30 4.0.29 4.0.28 4.0.27 4.0.26 4.0.24 4.0.25 4.0.23 4.0.22 4.0.21 4.0.19 4.0.18 4.0.17 4.0.16 1.9.3 All 173 releases
searchpro / BerqWP / vendor / guzzlehttp / psr7 / src / StreamWrapper.php

StreamWrapper.php in BerqWP – All-In-One Optimization for Core Web Vitals, Cache, CDN, Images, CSS & JavaScript 4.1.17, at BerqWP/vendor/guzzlehttp/psr7/src/StreamWrapper.php

208 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace GuzzleHttp\Psr7;
6
7 use Psr\Http\Message\StreamInterface;
8
9 /**
10 * Converts Guzzle streams into PHP stream resources.
11 *
12 * @see https://www.php.net/streamwrapper
13 */
14 final class StreamWrapper
15 {
16 /** @var resource */
17 public $context;
18
19 /** @var StreamInterface */
20 private $stream;
21
22 /** @var string r, r+, or w */
23 private $mode;
24
25 /**
26 * Returns a resource representing the stream.
27 *
28 * @param StreamInterface $stream The stream to get a resource for
29 *
30 * @return resource
31 *
32 * @throws \InvalidArgumentException if stream is not readable or writable
33 */
34 public static function getResource(StreamInterface $stream)
35 {
36 self::register();
37
38 if ($stream->isReadable()) {
39 $mode = $stream->isWritable() ? 'r+' : 'r';
40 } elseif ($stream->isWritable()) {
41 $mode = 'w';
42 } else {
43 throw new \InvalidArgumentException('The stream must be readable, '
44 .'writable, or both.');
45 }
46
47 return fopen('guzzle://stream', $mode, false, self::createStreamContext($stream));
48 }
49
50 /**
51 * Creates a stream context that can be used to open a stream as a php stream resource.
52 *
53 * @return resource
54 */
55 public static function createStreamContext(StreamInterface $stream)
56 {
57 return stream_context_create([
58 'guzzle' => ['stream' => $stream],
59 ]);
60 }
61
62 /**
63 * Registers the stream wrapper if needed
64 */
65 public static function register(): void
66 {
67 if (!in_array('guzzle', stream_get_wrappers())) {
68 stream_wrapper_register('guzzle', __CLASS__);
69 }
70 }
71
72 public function stream_open(string $path, string $mode, int $options, ?string &$opened_path = null): bool
73 {
74 $options = stream_context_get_options($this->context);
75
76 if (!isset($options['guzzle']['stream'])) {
77 return false;
78 }
79
80 $this->mode = $mode;
81 $this->stream = $options['guzzle']['stream'];
82
83 return true;
84 }
85
86 public function stream_read(int $count): string
87 {
88 return $this->stream->read($count);
89 }
90
91 public function stream_write(string $data): int
92 {
93 return $this->stream->write($data);
94 }
95
96 public function stream_tell(): int
97 {
98 return $this->stream->tell();
99 }
100
101 public function stream_eof(): bool
102 {
103 return $this->stream->eof();
104 }
105
106 public function stream_seek(int $offset, int $whence): bool
107 {
108 $this->stream->seek($offset, $whence);
109
110 return true;
111 }
112
113 /**
114 * @return resource|false
115 */
116 public function stream_cast(int $cast_as)
117 {
118 $stream = clone $this->stream;
119 $resource = $stream->detach();
120
121 return $resource ?? false;
122 }
123
124 /**
125 * @return array{
126 * dev: int,
127 * ino: int,
128 * mode: int,
129 * nlink: int,
130 * uid: int,
131 * gid: int,
132 * rdev: int,
133 * size: int,
134 * atime: int,
135 * mtime: int,
136 * ctime: int,
137 * blksize: int,
138 * blocks: int
139 * }|false
140 */
141 public function stream_stat()
142 {
143 if ($this->stream->getSize() === null) {
144 return false;
145 }
146
147 static $modeMap = [
148 'r' => 33060,
149 'rb' => 33060,
150 'r+' => 33206,
151 'w' => 33188,
152 'wb' => 33188,
153 ];
154
155 return [
156 'dev' => 0,
157 'ino' => 0,
158 'mode' => $modeMap[$this->mode],
159 'nlink' => 0,
160 'uid' => 0,
161 'gid' => 0,
162 'rdev' => 0,
163 'size' => $this->stream->getSize() ?: 0,
164 'atime' => 0,
165 'mtime' => 0,
166 'ctime' => 0,
167 'blksize' => 0,
168 'blocks' => 0,
169 ];
170 }
171
172 /**
173 * @return array{
174 * dev: int,
175 * ino: int,
176 * mode: int,
177 * nlink: int,
178 * uid: int,
179 * gid: int,
180 * rdev: int,
181 * size: int,
182 * atime: int,
183 * mtime: int,
184 * ctime: int,
185 * blksize: int,
186 * blocks: int
187 * }
188 */
189 public function url_stat(string $path, int $flags): array
190 {
191 return [
192 'dev' => 0,
193 'ino' => 0,
194 'mode' => 0,
195 'nlink' => 0,
196 'uid' => 0,
197 'gid' => 0,
198 'rdev' => 0,
199 'size' => 0,
200 'atime' => 0,
201 'mtime' => 0,
202 'ctime' => 0,
203 'blksize' => 0,
204 'blocks' => 0,
205 ];
206 }
207 }
208