簡體   English   中英

PHP將所有文件從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM