PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.2
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.2
16.1 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 / bytestream / class-filereadwritestream.php
jetpack / vendor / wp-php-toolkit / bytestream Last commit date
ByteTransformer 1 week ago ReadStream 1 week ago WriteStream 1 week ago LICENSE.md 1 week ago README.md 1 week ago class-bytepipe.php 1 week ago class-bytestreamexception.php 1 week ago class-filereadwritestream.php 1 week ago class-memorypipe.php 1 week ago class-notenoughdataexception.php 1 week ago composer.json 1 week ago
class-filereadwritestream.php
93 lines
1 <?php
2
3 namespace WordPress\ByteStream;
4
5 use WordPress\ByteStream\ReadStream\BaseByteReadStream;
6
7 class FileReadWriteStream extends BaseByteReadStream implements BytePipe {
8
9 /** @var resource|null */
10 private $file_pointer;
11
12 private $is_write_closed = false;
13
14 public static function from_path( string $path, bool $truncate = false ): self {
15 $mode = $truncate ? 'w+b' : 'a+b';
16 $file_pointer = fopen( $path, $mode );
17 if ( ! $file_pointer ) {
18 throw new ByteStreamException( esc_html( "Cannot open $path" ) );
19 }
20
21 return new self( $file_pointer, filesize( $path ) );
22 }
23
24 public static function from_resource( $file_pointer ): self {
25 if ( ! is_resource( $file_pointer ) ) {
26 throw new ByteStreamException( 'Invalid resource' );
27 }
28
29 return new self( $file_pointer, fstat( $file_pointer )['size'] );
30 }
31
32 public function __construct( $file_pointer, $expected_length = null ) {
33 $this->file_pointer = $file_pointer;
34 $this->expected_length = $expected_length;
35 }
36
37 protected function internal_pull( $n ): string {
38 return fread( $this->file_pointer, $n );
39 }
40
41 protected function internal_reached_end_of_data(): bool {
42 return ! is_resource( $this->file_pointer ) || feof( $this->file_pointer );
43 }
44
45 protected function seek_outside_of_buffer( int $target_offset ): void {
46 $this->buffer = '';
47 $this->bytes_already_forgotten = $target_offset;
48 $this->offset_in_current_buffer = 0;
49 if ( 0 !== fseek( $this->file_pointer, $target_offset ) ) {
50 throw new ByteStreamException( 'fseek() failed' );
51 }
52 }
53
54 public function append_bytes( string $bytes ): void {
55 if ( $this->is_write_closed ) {
56 throw new ByteStreamException( 'Cannot append after close_writing()' );
57 }
58 if ( '' === $bytes ) {
59 return;
60 }
61
62 $offset_before_append = ftell( $this->file_pointer );
63 fseek( $this->file_pointer, 0, SEEK_END );
64
65 $len = fwrite( $this->file_pointer, $bytes );
66 if ( false === $len || strlen( $bytes ) !== $len ) {
67 throw new ByteStreamException( 'fwrite() failed' );
68 }
69 fflush( $this->file_pointer ); // ensures visibility for concurrent readers.
70
71 // Rewind to the starting offset so we don't affect the reading position.
72 fseek( $this->file_pointer, $offset_before_append );
73
74 $this->expected_length += strlen( $bytes );
75 }
76
77 public function close_writing(): void {
78 $this->is_write_closed = true;
79 $this->maybe_close_file_pointer();
80 }
81
82 protected function internal_close_reading(): void {
83 $this->maybe_close_file_pointer();
84 }
85
86 private function maybe_close_file_pointer(): void {
87 if ( $this->is_read_closed && $this->is_write_closed && $this->file_pointer ) {
88 fclose( $this->file_pointer );
89 $this->file_pointer = null;
90 }
91 }
92 }
93