Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
1 / 1 |
| FileMode | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
| isDefined | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 | |||
| 1 | <?php |
| 2 | |
| 3 | declare(strict_types=1); |
| 4 | |
| 5 | namespace pvc\storage\filesys; |
| 6 | |
| 7 | use ReflectionClass; |
| 8 | |
| 9 | class FileMode |
| 10 | { |
| 11 | /** |
| 12 | * Open for reading only; place the file pointer at the beginning of the file. |
| 13 | */ |
| 14 | const READ = 'r'; |
| 15 | |
| 16 | /** |
| 17 | * Open for reading and writing; place the file pointer at the beginning of the file. |
| 18 | */ |
| 19 | const READ_WRITE = 'r+'; |
| 20 | |
| 21 | /** |
| 22 | * Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. |
| 23 | * If the file does not exist, attempt to create it. |
| 24 | */ |
| 25 | const WRITE = 'w'; |
| 26 | |
| 27 | /** |
| 28 | * Open for reading and writing; otherwise it has the same behavior as 'w'. |
| 29 | */ |
| 30 | const WRITE_WRITE = 'w+'; |
| 31 | |
| 32 | /** |
| 33 | * Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to |
| 34 | * create it. In this mode, fseek() has no effect, writes are always appended. |
| 35 | */ |
| 36 | const APPEND = 'a'; |
| 37 | |
| 38 | /** |
| 39 | * Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, |
| 40 | * attempt to create it. In this mode, fseek() only affects the reading position, writes are always appended. |
| 41 | */ |
| 42 | const APPEND_READ = 'a+'; |
| 43 | |
| 44 | /** |
| 45 | * Create and open for writing only; place the file pointer at the beginning of the file. If the file already |
| 46 | * exists, the fopen() call will fail by returning false and generating an error of level E_WARNING. If the file |
| 47 | * does not exist, attempt to create it. This is equivalent to specifying O_EXCL|O_CREAT flags for the underlying |
| 48 | * open(2) system call. |
| 49 | */ |
| 50 | const CREATE_WRITE_NO_OVERWRITE = 'x'; |
| 51 | |
| 52 | /** |
| 53 | * Create and open for reading and writing; otherwise it has the same behavior as 'x'. |
| 54 | */ |
| 55 | const CREATE_READ_WRITE_NO_OVERWRITE = 'x+'; |
| 56 | |
| 57 | /** |
| 58 | * Open the file for writing only. If the file does not exist, it is created. If it exists, it is neither |
| 59 | * truncated (as opposed to 'w'), nor the call to this function fails (as is the const with 'x'). The file |
| 60 | * pointer is positioned on the beginning of the file. This may be useful if it's desired to get an advisory |
| 61 | * lock (see flock()) before attempting to modify the file, as using 'w' could truncate the file before the |
| 62 | * lock was obtained (if truncation is desired, ftruncate() can be used after the lock is requested). |
| 63 | */ |
| 64 | const CREATE_WRITE_NO_TRUNCATE = 'c'; |
| 65 | |
| 66 | /** |
| 67 | * Open the file for reading and writing; otherwise it has the same behavior as 'c'. |
| 68 | */ |
| 69 | const CREATE_READ_WRITE_NO_TRUNCATE = 'c+'; |
| 70 | |
| 71 | /** |
| 72 | * Set close-on-exec flag on the opened file descriptor. Only available in PHP compiled on POSIX.1-2008 |
| 73 | * conforming systems. |
| 74 | */ |
| 75 | const CLOSE_ON_EXECUTE = 'e'; |
| 76 | |
| 77 | public static function isDefined(string $mode): bool |
| 78 | { |
| 79 | $reflection = new ReflectionClass(__CLASS__); |
| 80 | $constants = $reflection->getConstants(); |
| 81 | return in_array($mode, $constants); |
| 82 | } |
| 83 | } |