PHP将所有文件从Amazon S3复制到本地服务器。
PHP将所有文件从Amazon S3复制到本地服务器。
我在Amazon S3上存储了超过1000个图像,现在我想将它们转移到我的本地主机服务器上。这些图像在文件夹中,并采用以下结构...
User01 User01/old/ User01/old/01.jpg User01/old/02.jpg User01/old/03.jpg User01/new/ User01/new/01.jpg User01/new/02.jpg User01/new/03.jpg
....
User02 User02/old/ User02/old/01.jpg User02/old/02.jpg User02/old/03.jpg User02/new/ User02/new/01.jpg User02/new/02.jpg User02/new/03.jpg
.....
User03 User03/old/ User03/old/01.jpg User03/old/02.jpg User03/old/03.jpg User03/new/ User03/new/01.jpg User03/new/02.jpg User03/new/03.jpg
我正在使用此php代码获取目录结构
$bucketName = 'my-bucket'; $fullURL = 'http://s3-eu-west-1.amazonaws.com/'.$bucketName.'/'; mkdir('temp'); $s3 = new S3(AWS_ACCESS_KEY, AWS_SECRET_KEY); if (($contents = $s3->getBucket($bucketName)) !== false) { foreach ($contents as $object) { // print_r($object); echo ' '; echo $fullURL.$object['name']; $source = $fullURL.$object['name']; $destination = '/temp/'.$object['name']; copy($source, $destination); } }
文件列表正确回显,但是当我尝试复制每个目录中的文件时,会出现错误,例如:
PHP警告:复制(/temp/zulu/archive/2014-03-17_21-04-40/picture02.jpg):无法打开流
如何复制S3中的所有文件而不丢失文件结构?
我知道我可以使用Amazon SDK for PHP,但是我的主机不希望我安装它,除非我升级到非常昂贵的VPS。
更新1
mkdir('temp/'); $s3 = new S3(AWS_ACCESS_KEY, AWS_SECRET_KEY); if (($contents = $s3->getBucket($bucketName)) !== false) { foreach ($contents as $object) { // print_r($object); echo ' '; //echo $fullURL.$object['name']; $dst_dir = substr($object['name'], 0, strrpos($object['name'], '/')); echo $dst_dir; mkdir('temp/'.$dst_dir); } }
admin 更改状态以发布 2023年5月22日
尝试使用这段代码。\n
$dst_name = trim($object['name'], '/'); $dst_dir = substr($dst_name, 0, strrpos($dst_name, '/')); $dst_file = trim(substr($dst_name, (int)strrpos($dst_name, '/')), '/'); if(strrpos($dst_file, '.') === false) { if (!file_exists('temp/'.$dst_dir.'/'.$dst_file)) { //mkdir('temp/'.$dst_dir.'/'.$dst_file, 0777, true); echo 'Directory "temp/'.$dst_dir.'/'.$dst_file.'" created.'; } } else { //copy($source, 'temp/'.$dst_dir.'/'.$dst_file); echo 'File "temp/'.$dst_dir.'/'.$dst_file.'" copied.'; }
\n它不能正确处理反斜杠、目录名称中的句点或没有扩展名的文件名。