Home > front end >  How to copy files from S3 bucket to S3 bucket in PHP (AWS SDK for PHP)?
How to copy files from S3 bucket to S3 bucket in PHP (AWS SDK for PHP)?

Time:12-08

How to copy files from S3 bucket to S3 bucket directly in PHP (AWS SDK for PHP)? I'm finding examples for Ruby, i.e.: https://stackoverflow.com/a/10418427/2899889 But I can not find a single example for php. Also I could not find methods copy_to() or copy_from() in AWS SDK for PHP - the commands used in Ruby examples?

CodePudding user response:

Refer to the AWS Github for Code Examples.

This is the 1st place you should when you want to learn how to perform tasks using the AWS SDK in a supported programming language.

Here are the PHP code examples for Amazon S3:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/s3

Here is an example of copying objects from aws-doc-sdk-examples/s3-copying-objects.php at main · awsdocs/aws-doc-sdk-examples · GitHub:

<?php
/**
 * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * This file is licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License. A copy of
 * the License is located at
 *
 * http://aws.amazon.com/apache2.0/
 *
 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 * ABOUT THIS PHP SAMPLE: This sample is part of the SDK for PHP Developer Guide topic at
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-examples-creating-buckets.html
 *
 */
 
require 'vendor/autoload.php';

use Aws\S3\S3Client;

$sourceBucket = '*** Your Source Bucket Name ***';
$sourceKeyname = '*** Your Source Object Key ***';
$targetBucket = '*** Your Target Bucket Name ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Copy an object.
$s3->copyObject([
    'Bucket'     => $targetBucket,
    'Key'        => "{$sourceKeyname}-copy",
    'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
]);

// Perform a batch of CopyObject operations.
$batch = array();
for ($i = 1; $i <= 3; $i  ) {
    $batch[] = $s3->getCommand('CopyObject', [
        'Bucket'     => $targetBucket,
        'Key'        => "{targetKeyname}-{$i}",
        'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
    ]);
}
try {
    $results = CommandPool::batch($s3, $batch);
    foreach($results as $result) {
        if ($result instanceof ResultInterface) {
            // Result handling here
        }
        if ($result instanceof AwsException) {
            // AwsException handling here
        }
    }
} catch (\Exception $e) {
    // General error handling here
}
  • Related