PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 3.9.4
WP STAGING – WordPress Backup, Restore, Migration & Clone v3.9.4
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 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 FilterableDirectoryIterator.php 2 years ago LogCleanup.php 2 years ago LogFiles.php 2 years ago MissingFileException.php 3 years ago OPcache.php 2 years ago PartIdentifier.php 1 year 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