xobotyi/rsync

php 的 rsync 封装库

资助包维护!
Patreon

v1.0.3 2018-07-20 09:13 UTC

This package is auto-updated.

Last update: 2024-09-22 01:26:25 UTC


README

License PHP 7 ready Build Status Codacy Grade Scrutinizer Code Quality Codacy Coverage Latest Stable Version Total Downloads

关于

Rsync 是一个纯 PHP 7.1+ 的无依赖封装库,用于 rsync 客户端。它为您提供了一个简单的方法,可以从 PHP 中抽象地控制命令行 rsync。库使用 PSR-4 自动加载标准,并且总是有 100% 的测试覆盖率。
关于 rsync,无需过多介绍,除了 PHP 没有任何更快或同等内置的方式将文件上传到远程服务器。

库支持 rsync 客户端版本 3.1.2 中实现的众多选项和参数。

为什么选择 Rsync?

  1. 它体积小,且完全覆盖测试
  2. 它有良好的文档
  3. 我正在吃自己的甜点=)
  4. 支持 rsync 和 ssh 的众多参数和选项
  5. 易于使用
  6. 在 Windows 上运行(当然,如果您已安装了 Windows 的 ssh 和 rsync 客户端)

要求

  • PHP 7.1+
  • PHP 配置 variables_order 必须包含 E,例如:variables_order=EGPCS
    否则,您将需要手动指定 rsync 和 ssh 二进制的绝对路径(至少在 Windows 上)
  • rsync 客户端 3.1.2+

安装

使用 composer 安装

composer require xobotyi/rsync

文档

代码有良好的文档,方法描述请参阅源代码。

使用

最简单

use xobotyi\rsync\Rsync;

$rsync = new Rsync();
$rsync->sync('/path/to/source', '/path/to/destination');

如果您需要 SSH

use xobotyi\rsync\Rsync;
use xobotyi\rsync\SSH;

$rsync = new Rsync([
                       Rsync::CONF_CWD        => __DIR__,
                       Rsync::CONF_EXECUTABLE => '/even/alternative/executable/rsync.exe',
                       Rsync::CONF_SSH        => [
                           SSH::CONF_EXECUTABLE => '/even/alternative/executable/ssh.exe',
                           SSH::CONF_OPTIONS    => [
                               SSH::OPT_OPTION              => ['BatchMode=yes', 'StrictHostKeyChecking=no'],
                               SSH::OPT_IDENTIFICATION_FILE => './path/to/ident',
                               SSH::OPT_PORT                => 2222,
                           ],
                       ],
                   ]);
$rsync->sync('./relative/path/to/source', 'user@some.remote.lan:/abs/path/to/destination');
echo './relative/path/to/source ' . ($rsync->getExitCode() === 0 ? 'successfully synchronized with remote.' : 'not synchronised due to errors.') . "\n";

$rsync->setExecutable('ssh')
      ->setOption(SSH::OPT_OPTION, false)// 'false' value turns off the options
      ->setOptions([
                       SSH::OPT_IDENTIFICATION_FILE => './new/path/to/ident',
                       SSH::OPT_PORT                => 22,
                   ]);
$rsync->sync('/new/path/to/source', 'user@some.remote.lan:/abs/path/to/destination');
echo '/new/path/to/source ' . ($rsync->getExitCode() === 0 ? 'successfully synchronized with remote.' : 'not synchronised due to errors.') . "\n";