PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / trunk
JetBackup – Backup, Restore & Migrate vtrunk
3.1.22.3 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.8.1 1.4.9 1.5.0 1.5.1 1.5.1.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.10 1.6.11 1.6.12 1.6.13 1.6.15 1.6.5.1 1.6.8.8 1.6.9 1.6.9.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7.5 2.0.8.7 2.0.9.11 2.0.9.14 2.0.9.15 2.0.9.6 2.0.9.7 2.0.9.9 3.1.10.7 3.1.11.1 3.1.12.3 3.1.13.4 3.1.14.17 3.1.15.4 3.1.16.1 3.1.17.5 3.1.18.10 3.1.18.8 3.1.18.9 3.1.19.8 3.1.20.3 3.1.21.3 3.1.7.9 3.1.9.2 trunk 1.1.90 1.1.91 1.2.0 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2
backup / src / JetBackup / Archive / File / GZFile.php
backup / src / JetBackup / Archive / File Last commit date
.htaccess 1 year ago BZFile.php 1 year ago File.php 1 year ago FileInfo.php 1 day ago GZFile.php 1 year ago RegFile.php 1 day ago index.html 1 year ago web.config 1 year ago
GZFile.php
115 lines
1 <?php
2 /*
3 *
4 * JetBackup @ package
5 * Created By Idan Ben-Ezra
6 *
7 * Copyrights @ JetApps
8 * https://www.jetapps.com
9 *
10 **/
11 namespace JetBackup\Archive\File;
12
13 use JetBackup\Exception\ArchiveException;
14
15 class GZFile extends File {
16
17 private $_fd;
18
19 /**
20 * @throws ArchiveException
21 */
22 public function __construct(string $filename, string $mode) {
23 parent::__construct($filename, $mode);
24
25 if (!($this->_fd = @gzopen($filename, $mode)))
26 throw new ArchiveException('Could not open file: '.$filename);
27 }
28
29 public function truncate($offset): bool {
30 throw new ArchiveException("gzip doesn't support 'truncate'");
31 }
32
33 public function eof(): bool {
34 return gzeof($this->_fd);
35 }
36
37 public function read(int $length) {
38 return gzread($this->_fd, $length);
39 }
40
41 public function write(string $data,$length=null) {
42 return gzwrite($this->_fd, $data, $length);
43 }
44
45 /**
46 * @throws ArchiveException
47 */
48 public function seek(int $offset, int $whence = SEEK_SET): int {
49 throw new ArchiveException("gzip doesn't support 'seek'");
50 }
51
52 public function tell(): int {
53 return gztell($this->_fd);
54 }
55
56 public function flush() : bool {
57 return fflush($this->_fd);
58 }
59
60 public function close(): bool {
61 if(!$this->_fd) return true;
62 $result = gzclose($this->_fd);
63 $this->_fd = null;
64 return $result;
65 }
66
67 /**
68 * @throws ArchiveException
69 */
70 public static function getGzipOriginalSize($filePath) {
71
72
73 // Open the file in binary read mode
74 $file = fopen($filePath, 'rb');
75 if ($file === false) {
76 throw new ArchiveException("Unable to open file: $filePath");
77 }
78
79 // Seek to the end of the file to read the original size
80 fseek($file, -4, SEEK_END);
81 $sizeBytes = fread($file, 4);
82 fclose($file);
83
84 // Convert the size from little-endian to integer
85 return unpack('V', $sizeBytes)[1];
86 }
87
88
89
90 /**
91 * @throws ArchiveException
92 */
93 public static function isGzipFile($filePath): bool {
94 // Check if the file exists and is readable
95 if (!file_exists($filePath) || !is_readable($filePath)) {
96 throw new ArchiveException("File does not exist or is not readable: $filePath");
97 }
98
99 // Open the file in binary read mode
100 $file = fopen($filePath, 'rb');
101 if ($file === false) {
102 throw new ArchiveException("Unable to open file: $filePath");
103 }
104
105 // Read the first three bytes of the file
106 $header = fread($file, 3);
107 fclose($file);
108
109 // Check if the magic number and compression method match the gzip signature
110 // Gzip files start with 1F 8B 08 (hexadecimal)
111 return $header === "\x1F\x8B\x08";
112 }
113
114
115 }