【问题标题】:PHP: How to sync data between s3 buckets using php code without using the CLI .?PHP:如何在不使用 CLI 的情况下使用 php 代码在 s3 存储桶之间同步数据。?
【发布时间】:2014-02-15 12:26:49
【问题描述】:

我似乎无法在 amazon-s3 的 php sdk 中找到同步和复制选项。目前我正在使用 PHP 代码中的 aws s3 cp/sync CLI 命令来实现这一点,这对我来说似乎不是很整洁。有任何想法吗?

【问题讨论】:

    标签: php amazon-s3 amazon sync


    【解决方案1】:

    您可以结合使用 PHP SDK 中的两个功能来做到这一点。

    首先,检查S3Client::uploadDirectory() 方法(请参阅user guide)。您可以像这样上传 while 目录的内容:

    $s3Client->uploadDirectory('/local/directory', 'your-bucket-name');
    

    如果您将它与S3 Stream Wrapper 结合使用,那么您可以指定一个存储桶,而不是使用本地目录作为源。

    $s3Client->registerStreamWrapper();
    $s3Client->uploadDirectory('s3://your-other-bucket-name', 'your-bucket-name');
    

    这非常强大,因为如果您为 Stream Wrapper 使用不同配置的 S3Client 对象而不是使用 uploadDirectory() 的对象,您甚至可以跨区域执行某些操作。

    【讨论】:

    • 非常感谢杰里米。它就像一个魅力。它引起的唯一问题是由于 php.ini 文件中缺少时区信息而导致的致命错误。添加时区信息使其工作。参考:stackoverflow.com/questions/16765158/… 一个问题。它和 CLI 工具一样高效吗?
    • 不确定。我想你必须自己测试一下。
    • 我使用 aws cli 客户端尝试复制超过 500k 个对象。它错过了很多对象,也没有复制 ACL 权限。现在尝试上述方法将报告。
    • @JeremyLindblom,我在使用 uploadDirectory() 和 registerStreamWrapper() 时遇到错误。请在下面查看我的代码 - $s3 = new S3Client(['credentials' => $credentials, 'version' => 'latest','region' => $region,'debug' => false ]); $s3->registerStreamWrapper(); $result = $s3->uploadDirectory("s3://{$source_bucket}/{$key}",$target_bucket);
    • 有一点需要注意,在 PHP SDK 的 v3 中,S3Client::uploadDirectory() 不会智能同步,它会再次上传所有内容。见stackoverflow.com/questions/41960048/…。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多