PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / 3.1.13.4
JetBackup – Backup, Restore & Migrate v3.1.13.4
3.1.22.4 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 / Destination / Vendors / SFTP / ChunkedUpload.php
backup / src / JetBackup / Destination / Vendors / SFTP Last commit date
.htaccess 9 months ago ChunkedDownload.php 9 months ago ChunkedUpload.php 9 months ago DirIterator.php 9 months ago SFTP.php 9 months ago index.html 9 months ago web.config 9 months ago
ChunkedUpload.php
67 lines
1 <?php
2
3 namespace JetBackup\Destination\Vendors\SFTP;
4
5 use JetBackup\Destination\Integration\DestinationChunkedUpload;
6 use JetBackup\Exception\IOException;
7 use phpseclib3\Net\SFTP as lSFTP;
8 use JetBackup\Web\File\FileChunk;
9
10 if (!defined( '__JETBACKUP__')) die('Direct access is not allowed');
11
12 class ChunkedUpload implements DestinationChunkedUpload {
13
14 private SFTP $_connection;
15 private string $_destination;
16 private \stdClass $_data;
17
18 public function __construct(SFTP $connection, $destination) {
19 $this->_connection = $connection;
20 $this->_destination = $destination;
21 $this->_data = new \stdClass();
22 }
23
24 /**
25 * @return object
26 */
27 public function prepare():object { return new \stdClass(); }
28 public function setData(object $data):void {}
29
30 /**
31 * @return int
32 * @throws IOException
33 */
34 public function getOffset():int {
35 return $this->_connection->retries(function() {
36 $stat = $this->_connection->getConnection()->stat($this->_destination);
37 return $stat ? $stat['size'] : 0;
38 }, "Failed fetching upload offset");
39 }
40
41 /**
42 * @param FileChunk $chunk
43 *
44 * @return void
45 * @throws IOException
46 */
47 public function upload(FileChunk $chunk):void {
48 while($data = $chunk->read(1024 * 1024)) {
49 $this->_connection->retries(function() use ($chunk, $data) {
50 $offset = $chunk->getFile()->tell();
51 $this->_connection->getConnection()->put($this->_destination, $data, lSFTP::SOURCE_STRING, $offset);
52 }, "Failed uploading chunk");
53 }
54 }
55
56 /**
57 * @return void
58 */
59 public function finalize():void {}
60
61 /**
62 * @inheritDoc
63 */
64 public function getChunkSize(): ?int {
65 return null;
66 }
67 }