PluginProbe
AutomatorWP – No-Code Workflow Automation, Integration & Webhooks Plugin, now with AI / 6.0.4
AutomatorWP – No-Code Workflow Automation, Integration & Webhooks Plugin, now with AI v6.0.4
6.0.4 6.0.3 6.0.2 6.0.1 6.0.0 5.8.6 5.8.5 5.8.4 5.8.3 5.8.2 5.8.1 5.8.0 5.7.9.2 5.7.9.1 5.7.8 5.7.9 5.7.6 5.7.7 5.7.5 5.7.4 5.7.3 5.7.2 5.7.1 trunk 5.6.0 All 35 releases
← All changes | integrations/mailchimp/vendor/guzzlehttp/psr7/src/StreamWrapper.php +207 -0 5.7.2 → 6.0.4 View file →
@@ -1,0 +1,207 @@
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 +}