首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:与亚马逊S3同步数据

PHP:与亚马逊S3同步数据
EN

Stack Overflow用户
提问于 2014-04-02 09:32:51
回答 1查看 1K关注 0票数 1

虽然与s3client PHP同步目录的工作非常完美

代码语言:javascript
复制
$s3client->uploadDirectory('/local/directory', 'my-bucket');

我仍然需要删除删除的s3cmd特性来删除桶中存在的不匹配文件,而不是源目录中的文件。

参考文献:http://blogs.aws.amazon.com/php/post/Tx2W9JAA7RXVOXA/Syncing-Data-with-Amazon-S3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-08 22:06:31

  1. 列出现有文件及其md5sum值
  2. 获取所有s3对象
  3. 比较不同的md5s和传输
  4. 删除任何“剩余”文件(--删除-删除)文件 函数syncS3($bucket,$prefix,$targetDir) { if (!is_dir($targetDir)) { mkdir($targetDir,0755,true);} $localFileM5Sums = getMd5ForFilesInDir($targetDir);$s3Objects =$this->s3 s3Client>listObjects(‘Bucket’=> $bucket,‘前缀’=> $prefix);foreach ($s3 s3Objects‘contents’as $contents) { $s3Key =$contents‘’Key;如果(substr($s3Key,-1,1) == '/') { //是“目录”,则继续;// $saveAs = $targetDir。DIRECTORY_SEPARATOR。$s3Key;if (isset($localFileM5Sums$saveAs)) { //如果我们有本地副本$localMd5 = $localFileM5Sums$saveAs;unset($localFileM5Sums$saveAs);//删除,这样以后如果($localMd5 === trim($$localFileM5Sums$saveAs内容‘’ETag‘,’)){ //和md5sumMatches继续,我们就不会尝试删除它;//不要传输} //传输它如果(!is_dir(dirname( $saveAs ){ mkdir(dirname($saveAs),0755,true);} $this->s3Client->getObject( 'Bucket‘=> $bucket,'Key’=> $s3Key,'SaveAs‘=> $saveAs );} //删除任何丢失的文件foreach ($localFileM5Sums as $fileName => $md5sum) { unlink($fileName);}函数getMd5ForFilesInDir($targetDir) { $iterator =新RecursiveIteratorIterator(新的RecursiveDirectoryIterator($targetDir));$files = [];foreach ($iterator as $file) { if (!$file->isDir()) $file->getPathname()= md5_file($file->getPathname());}Re返回$files;}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22807202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档