PHP code example of verseles / flyclone
1. Go to this page and download the library: Download verseles/flyclone library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
verseles / flyclone example snippets
use Verseles\Flyclone\Providers\LocalProvider;
use Verseles\Flyclone\Providers\S3Provider;
use Verseles\Flyclone\Rclone;
$local = new LocalProvider('local_disk');
$s3 = new S3Provider('archive_bucket', [
'access_key_id' => 'YOUR_KEY',
'secret_access_key' => 'YOUR_SECRET',
'region' => 'us-east-1',
]);
$rclone = new Rclone($local, $s3);
$result = $rclone->copy('/var/backups', 'my-bucket/backups');
if ($result->success) {
echo "Transferred {$result->stats->bytes} bytes at {$result->stats->speed_human}";
}
$files = (new Rclone($local))->ls('/var/backups');
$rclone = new Rclone($sourceProvider, $destProvider);
$rclone->copy('/source/dir', '/dest/dir');
$rclone->copyto('/source/file.txt', '/dest/file.txt');
$rclone->move('/source/dir', '/dest/dir');
$rclone->moveto('/source/file.txt', '/dest/file.txt');
$rclone->sync('/source/dir', '/dest/dir');
$rclone->delete('/path/to/delete');
$rclone = new Rclone($s3);
$rclone->upload_file('/tmp/report.pdf', 'bucket/reports/report.pdf');
$download = $rclone->download_to_local('bucket/reports/report.pdf');
echo $download->local_path;
use Verseles\Flyclone\Providers\SFtpProvider;
$sftp = new SFtpProvider('deploy', [
'host' => 'sftp.example.com',
'user' => 'deploy',
'private_key' => $privateKeyPem,
'key_use_agent' => false,
]);
use Verseles\Flyclone\Providers\CryptProvider;
use Verseles\Flyclone\Providers\S3Provider;
use Verseles\Flyclone\Rclone;
$s3 = new S3Provider('raw_archive', [
'access_key_id' => 'YOUR_KEY',
'secret_access_key' => 'YOUR_SECRET',
'region' => 'us-east-1',
]);
$encrypted = new CryptProvider('encrypted_archive', [
'remote' => $s3,
'remote_path' => 'encrypted-prefix',
'password' => Rclone::obscure('my-secret-password'),
'password2' => Rclone::obscure('my-salt'),
]);
(new Rclone($encrypted))->copy('/local/sensitive-data', '/');
use Verseles\Flyclone\Providers\LocalProvider;
use Verseles\Flyclone\Providers\S3Provider;
use Verseles\Flyclone\Providers\UnionProvider;
use Verseles\Flyclone\Rclone;
$cache = new LocalProvider('cache', ['root' => '/tmp/cache']);
$archive = new S3Provider('archive', [/* config */]);
$union = new UnionProvider('combined', [
'upstream_providers' => [$cache, $archive],
'action_policy' => 'all',
'create_policy' => 'ff',
]);
$files = (new Rclone($union))->ls('/');
Rclone::setBIN('/custom/path/to/rclone');
Rclone::setFlags(['checksum' => true]);
Rclone::setEnvs(['RCLONE_BUFFER_SIZE' => '64M']);
Rclone::setTimeout(300);
Rclone::setIdleTimeout(120);
$rclone = (new Rclone($source, $dest))
->withFlags(['checksum' => true])
->withEnvs(['RCLONE_BUFFER_SIZE' => '64M'])
->withTimeout(300)
->withIdleTimeout(120);
use Verseles\Flyclone\FilterBuilder;
$filter = FilterBuilder::create()
->extensions(['jpg', 'png', 'gif'])
->minSize('100K')
->maxSize('50M')
->exclude('**/thumbnails/**');
$rclone->withFilter($filter)->copy('/source', '/dest');
use Verseles\Flyclone\RetryHandler;
$handler = RetryHandler::create()
->maxAttempts(5)
->baseDelay(500)
->multiplier(2.0)
->maxDelay(30000)
->onRetry(fn (int $attempt, Throwable $e) => logger("Retry {$attempt}: {$e->getMessage()}"));
$progress = function (object $progress): void {
echo $progress->percentage . "%\n";
};
$rclone->withRetry($handler)
->dryRun(false)
->copy('/source', '/dest', onProgress: $progress);
use Verseles\Flyclone\Exception\DirectoryNotFoundException;
use Verseles\Flyclone\Exception\FileNotFoundException;
use Verseles\Flyclone\Exception\TemporaryErrorException;
try {
$rclone->copy('/source', '/dest');
} catch (FileNotFoundException|DirectoryNotFoundException $e) {
// Permanent user/input error.
} catch (TemporaryErrorException $e) {
if ($e->isRetryable()) {
// Retry may succeed.
}
$context = $e->getContext();
}
use Verseles\Flyclone\Logger;
Logger::setDebugMode(true);
$rclone->copy('/source', '/dest');
echo $rclone->getLastCommand();
$envs = $rclone->getLastEnvs(); // Secrets are redacted.
$logs = Logger::getLogs();
$remotes = Rclone::listRemotes();
$config = Rclone::configDump();
$md5 = $rclone->md5sum('/path');
$sha1 = $rclone->sha1sum('/path');
$health = $rclone->healthCheck('/');