PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
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 / WriteStream / class-filewritestream.php
jetpack / vendor / wp-php-toolkit / bytestream / WriteStream Last commit date
class-bytewritestream.php 1 week ago class-filewritestream.php 1 week ago class-transformedwritestream.php 1 week ago
class-filewritestream.php
107 lines
1 <?php
2
3 namespace WordPress\ByteStream\WriteStream;
4
5 use WordPress\ByteStream\ByteStreamException;
6
7 class FileWriteStream implements ByteWriteStream {
8
9 private $file_handle;
10
11 /**
12 * Creates a new instance of FileWriter from a file path with a mode (truncate or append).
13 *
14 * @param string $path Path to the file.
15 * @param string $mode Writing mode: 'truncate' or 'append'.
16 *
17 * @return FileWriteStream
18 * @throws ByteStreamException If the file cannot be opened for writing.
19 */
20 public static function from_path( string $path, string $mode = 'append' ): self {
21 switch ( $mode ) {
22 case 'truncate':
23 $file_mode = 'wb'; // Write mode: truncates the file.
24 break;
25 case 'append':
26 $file_mode = 'ab'; // Append mode: appends to the file.
27 break;
28 default:
29 throw new ByteStreamException( esc_html( "Invalid mode: $mode. Use 'truncate' or 'append'." ) );
30 }
31
32 $file_handle = fopen( $path, $file_mode );
33 if ( false === $file_handle ) {
34 throw new ByteStreamException( esc_html( "Failed to open file at path: $path" ) );
35 }
36
37 return new self( $file_handle );
38 }
39
40 /**
41 * Creates a new instance of FileWriter from an existing file handle.
42 *
43 * @param resource $file_handle A valid file handle.
44 *
45 * @return FileWriteStream
46 * @throws ByteStreamException If the file handle is invalid.
47 */
48 public static function from_resource_handle( $file_handle ): self {
49 return new self( $file_handle );
50 }
51
52 /**
53 * Private constructor to enforce the use of static factory methods.
54 *
55 * @param resource $file_handle A valid file handle.
56 * @throws ByteStreamException If the file handle is invalid.
57 */
58 public function __construct( $file_handle ) {
59 if ( ! is_resource( $file_handle ) || 'stream' !== get_resource_type( $file_handle ) ) {
60 throw new ByteStreamException( 'Invalid file handle provided.' );
61 }
62 $this->file_handle = $file_handle;
63 }
64
65 /**
66 * Appends bytes to the file.
67 *
68 * @param string $bytes The data to write.
69 *
70 * @return void
71 * @throws ByteStreamException If the write operation fails.
72 */
73 public function append_bytes( string $bytes ): void {
74 $result = fwrite( $this->file_handle, $bytes );
75 /**
76 * We cannot just test for `false === $result` if we want to be
77 * compatible with PHP 7.3.
78 *
79 * The `!fwrite()` check is used for PHP 7.3 compatibility.
80 * Between PHP 7.3 and 7.4, this change was made:
81 *
82 * > fread() and fwrite() will now return FALSE if the operation failed. Previously an empty
83 * > string or 0 was returned. EAGAIN/EWOULDBLOCK are not considered failures.
84 *
85 * https://www.php.net/manual/en/migration74.incompatible.php#migration74.incompatible.core.fread-fwrite
86 */
87 if ( ! $result && '' !== $bytes ) {
88 throw new ByteStreamException( 'Failed to write bytes to file.' );
89 }
90 }
91
92 /**
93 * Closes the file handle.
94 *
95 * @return void
96 * @throws ByteStreamException If the file handle is already closed.
97 */
98 public function close_writing(): void {
99 if ( null === $this->file_handle ) {
100 throw new ByteStreamException( 'File handle is already closed.' );
101 }
102
103 fclose( $this->file_handle );
104 $this->file_handle = null;
105 }
106 }
107