[英]PHP Amazon S3 - Bulk Copy whole files and their contents from hosted server to Amazon S3
[英]PHP Copy all files from Amazon S3 to Local Server
我在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 '<br/>';
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 '<br/>';
//echo $fullURL.$object['name'];
$dst_dir = substr($object['name'], 0, strrpos($object['name'], '/'));
echo $dst_dir;
mkdir('temp/'.$dst_dir);
}
}
尝试这段代码。
$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.<br />';
}
} else {
//copy($source, 'temp/'.$dst_dir.'/'.$dst_file);
echo 'File "temp/'.$dst_dir.'/'.$dst_file.'" copied.<br />';
}
如果没有正确的扩展名,它将无法处理反斜杠,目录名或文件名中的句点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.