PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / vendor / wp-php-toolkit / filesystem / class-inmemoryfilesystem.php
jetpack / vendor / wp-php-toolkit / filesystem Last commit date
ByteStream 6 days ago Layer 6 days ago Mixin 6 days ago Path 6 days ago Visitor 6 days ago LICENSE.md 6 days ago README.md 6 days ago class-filesystemexception.php 6 days ago class-inmemoryfilesystem.php 6 days ago class-localfilesystem.php 6 days ago class-sqlitefilesystem.php 6 days ago class-uploadedfilesystem.php 6 days ago composer.json 6 days ago functions.php 6 days ago interface-filesystem.php 6 days ago
class-inmemoryfilesystem.php
207 lines
1 <?php
2
3 namespace WordPress\Filesystem;
4
5 use WordPress\ByteStream\MemoryPipe;
6 use WordPress\ByteStream\ReadStream\ByteReadStream;
7 use WordPress\Filesystem\Layer\ChrootLayer;
8 use WordPress\Filesystem\Mixin\Interfaces\InternalizedWriteStream;
9
10 /**
11 * Represents an in-memory filesystem.
12 */
13 class InMemoryFilesystem implements Filesystem, InternalizedWriteStream {
14
15 use Mixin\InternalizeWriteStream;
16 use Mixin\GetContentsViaReadStream;
17 use Mixin\MkdirRecursive;
18 use Mixin\CopyRecursiveViaStreaming;
19
20 private $last_write_stream_id = 0;
21 private $write_streams = array();
22 private $files = array();
23
24 public static function create() {
25 return new ChrootLayer(
26 new InMemoryFilesystem(),
27 '/'
28 );
29 }
30
31 private function __construct() {
32 $this->files['/'] = array(
33 'type' => 'dir',
34 'contents' => array(),
35 );
36 }
37
38 protected function get_root(): string {
39 return '/';
40 }
41
42 public function ls( $dir = '/' ) {
43 if ( ! isset( $this->files[ $dir ] ) || 'dir' !== $this->files[ $dir ]['type'] ) {
44 throw new FilesystemException(
45 sprintf( 'Directory not found: %s', $dir )
46 );
47 }
48
49 return array_keys( $this->files[ $dir ]['contents'] );
50 }
51
52 public function is_dir( $path ) {
53 return isset( $this->files[ $path ] ) && 'dir' === $this->files[ $path ]['type'];
54 }
55
56 public function is_file( $path ) {
57 return isset( $this->files[ $path ] ) && 'file' === $this->files[ $path ]['type'];
58 }
59
60 public function exists( $path ) {
61 return isset( $this->files[ $path ] );
62 }
63
64 public function open_read_stream( $path ): ByteReadStream {
65 if ( ! $this->is_file( $path ) ) {
66 throw new FilesystemException(
67 sprintf( 'File not found: %s', $path )
68 );
69 }
70
71 return new MemoryPipe( $this->files[ $path ]['contents'] );
72 }
73
74 public function rename( $old_path, $new_path, $options = array() ) {
75 if ( ! $this->exists( $old_path ) ) {
76 throw new FilesystemException(
77 sprintf( 'File not found: %s', $old_path )
78 );
79 }
80
81 $parent = wp_unix_dirname( $new_path );
82 if ( ! $this->is_dir( $parent ) ) {
83 throw new FilesystemException(
84 sprintf( 'Parent directory not found: %s', $parent )
85 );
86 }
87
88 $this->files[ $new_path ] = $this->files[ $old_path ];
89 unset( $this->files[ $old_path ] );
90
91 return true;
92 }
93
94 public function mkdir_single( $path, $options = array() ) {
95 if ( $this->exists( $path ) ) {
96 throw new FilesystemException(
97 sprintf( 'Directory already exists: %s', $path )
98 );
99 }
100
101 $parent = wp_unix_dirname( $path );
102 if ( ! $this->is_dir( $parent ) ) {
103 throw new FilesystemException(
104 sprintf( 'Parent directory not found: %s', $parent )
105 );
106 }
107
108 $this->files[ $path ] = array(
109 'type' => 'dir',
110 'contents' => array(),
111 );
112 $this->files[ $parent ]['contents'][ basename( $path ) ] = true;
113
114 return true;
115 }
116
117 public function rm( $path ) {
118 if ( ! $this->is_file( $path ) ) {
119 throw new FilesystemException(
120 sprintf( 'File not found: %s', $path )
121 );
122 }
123
124 $parent = wp_unix_dirname( $path );
125 unset( $this->files[ $parent ]['contents'][ basename( $path ) ] );
126 unset( $this->files[ $path ] );
127
128 return true;
129 }
130
131 public function rmdir( $path, $options = array() ) {
132 $recursive = $options['recursive'] ?? false;
133 if ( ! $this->is_dir( $path ) ) {
134 throw new FilesystemException(
135 sprintf( 'Directory not found: %s', $path )
136 );
137 }
138
139 if ( $recursive ) {
140 $path = rtrim( $path, '/' );
141 foreach ( $this->ls( $path ) as $child ) {
142 if ( $this->is_dir( $path . '/' . $child ) ) {
143 $this->rmdir( $path . '/' . $child, $options );
144 } else {
145 $this->rm( $path . '/' . $child );
146 }
147 }
148 }
149
150 $parent = wp_unix_dirname( $path );
151 unset( $this->files[ $parent ]['contents'][ basename( $path ) ] );
152 unset( $this->files[ $path ] );
153
154 return true;
155 }
156
157 public function put_contents( $path, $data, $options = array() ) {
158 $parent = wp_unix_dirname( $path );
159 if ( ! $this->is_dir( $parent ) ) {
160 throw new FilesystemException(
161 sprintf( 'Parent directory not found: %s', $parent )
162 );
163 }
164
165 $this->files[ $path ] = array(
166 'type' => 'file',
167 'contents' => $data,
168 );
169 $this->files[ $parent ]['contents'][ basename( $path ) ] = true;
170
171 return true;
172 }
173
174 protected function write_stream_internal_open( string $path ): int {
175 $this->put_contents( $path, '' );
176 $stream_id = $this->last_write_stream_id++;
177 $this->write_streams[ $stream_id ] = $path;
178
179 return $stream_id;
180 }
181
182 public function write_stream_append_bytes( int $stream_id, $data ): bool {
183 if ( ! isset( $this->write_streams[ $stream_id ] ) ) {
184 throw new FilesystemException(
185 sprintf( 'Cannot append bytes to a write stream that is not open' )
186 );
187 }
188 $path = $this->write_streams[ $stream_id ];
189 $this->files[ $path ]['contents'] .= $data;
190
191 return true;
192 }
193
194 public function write_stream_close( int $stream_id ): void {
195 if ( ! isset( $this->write_streams[ $stream_id ] ) ) {
196 throw new FilesystemException(
197 sprintf( 'Cannot close a write stream that is not open' )
198 );
199 }
200 unset( $this->write_streams[ $stream_id ] );
201 }
202
203 public function get_meta(): array {
204 return array();
205 }
206 }
207