PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.3.0
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.3.0
4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / Filesystem / FileObject.php
wp-staging / Framework / Filesystem Last commit date
Filters 1 year ago Scanning 5 years ago AbstractFileObject.php 1 year ago AbstractFilesystemScanner.php 1 year ago DebugLogReader.php 2 years ago DirectoryListing.php 2 years ago DiskWriteCheck.php 1 year ago FileObject.php 1 year ago Filesystem.php 1 year ago FilesystemExceptions.php 5 years ago FilesystemScanner.php 10 months ago FilesystemScannerDto.php 1 year ago FilterableDirectoryIterator.php 1 year ago LogCleanup.php 2 years ago LogFiles.php 1 year ago MissingFileException.php 3 years ago OPcache.php 2 years ago PartIdentifier.php 11 months ago PathChecker.php 2 years ago PathIdentifier.php 1 year ago Permissions.php 1 year ago WpUploadsFolderSymlinker.php 4 years ago
FileObject.php
91 lines
1 <?php
2
3 namespace WPStaging\Framework\Filesystem;
4
5 use WPStaging\Core\WPStaging;
6 use WPStaging\Framework\Job\Exception\DiskNotWritableException;
7
8 /**
9 * Class FileObject
10 *
11 * For making codebase memory efficient and making sure on Windows OS, we don't run into permission issue due to file lock,
12 * after working on the instance of this class, assign null to it.
13 */
14 class FileObject extends AbstractFileObject
15 {
16 const AVERAGE_LINE_LENGTH = 4096;
17
18 /**
19 * @throws DiskNotWritableException
20 * @throws FilesystemExceptions
21 */
22 public function __construct($fullPath, $openMode = self::MODE_READ)
23 {
24 $fullPath = untrailingslashit($fullPath);
25
26 if (empty($fullPath)) {
27 throw new DiskNotWritableException("Empty path given. Please contact support@wp-staging.com");
28 }
29
30 if (!file_exists($fullPath)) {
31 WPStaging::make(Filesystem::class)->mkdir(dirname($fullPath), true);
32 }
33
34 try {
35 parent::__construct($fullPath, $openMode);
36 } catch (\Exception $e) {
37 // If this fails, it will throw an exception.
38 WPStaging::make(DiskWriteCheck::class)->testDiskIsWriteable();
39
40 // If it didn't fail due to disk write check, re-throw
41 throw $e;
42 }
43 }
44
45 /**
46 * @param string $str
47 * @param int|null $length
48 * @return false|int False on error, number of bytes written on success
49 */
50 public function fwriteSafe(string $str, $length = null)
51 {
52 // Not sure if we need mbstring_binary_safe_encoding. If not, delete it as we already open file with binary mode.
53 mbstring_binary_safe_encoding();
54
55 $strLen = strlen($str);
56 $writtenBytes = $length !== null ? $this->fwrite($str, $length) : $this->fwrite($str);
57 reset_mbstring_encoding();
58
59 if ($strLen !== $writtenBytes) {
60 return false;
61 }
62
63 return $writtenBytes;
64 }
65
66 /**
67 * @param int $lines
68 * @return array
69 *
70 * @throws Exception
71 * @todo DRY /Framework/Utils/Cache/BufferedCache.php
72 */
73 public function readBottomLines(int $lines): array
74 {
75 $this->seek(PHP_INT_MAX);
76 $lastLine = $this->key();
77 $offset = $lastLine - $lines;
78 if ($offset < 0) {
79 $offset = 0;
80 }
81
82 $allLines = new \LimitIterator($this, $offset, $lastLine);
83 return array_reverse(array_values(iterator_to_array($allLines)));
84 }
85
86 protected function isWindowsOs(): bool
87 {
88 return WPStaging::isWindowsOs();
89 }
90 }
91