web-dev-qa-db-ja.com

PHPを使用してAmazonS3にアップロードする

Phpを使用してAmazonS3へのファイルアップロードを実装するためのチュートリアルに続いて、ここ数時間を費やしました。 DonovanSchönknechtのS3クラスの最新バージョンを(S3.phpとして)サーバーにアップロードしました。次のコードを使用してアップロード機能をテストしようとしています。多くの例が実際に動作しているのを見てきたので、このコードが機能することはわかっています。

<?php

require('S3.php');

$s3 = new S3('KEY', 'SECRET KEY');

//insert into s3
$new_name = time() . '.txt';

S3::putObject(
'upload-me.txt',
'bucketName',
$new_name,
S3::ACL_PUBLIC_READ,
array(),
array(),
S3::STORAGE_CLASS_RRS

);

?>

このページを読み込もうとすると、エラー500サーバーエラーが発生します。さらに、この性質の他のすべての評判の良いチュートリアルは私に同じエラー500を与えました。

Cyber​​duckでS3に接続して、自分の鍵と秘密鍵が有効であることを確認しました。

誰かが私が間違って何をしている可能性があるかについての手がかりを持っていますか?

ありがとう、

ショーン

6
Sean

結局のところ、PHPのcURL拡張子がありませんでした。これは、使用していたS3クラスでcURLを使用する必要があるため、問題を引き起こしていました。すべてが機能しています。

10
Sean

公式の AWS SDK for PHP の使用も検討する必要があります。 SDKでS3を使用する例は、 S3ユーザーガイド にあります。

9
Jeremy Lindblom

次のPHPコマンドを実行すると、Amazon composer SDKの最新バージョンをダウンロードできます)

composer require aws/aws-sdk-php

Amazons3にファイルをアップロードするための追加の設定は次のとおりです

// Include the SDK using the Composer autoloader
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

// Set Amazon s3 credentials
$client = S3Client::factory(
  array(
    'key'    => "your-key",
    'secret' => "your secret key"
  )
);

try {
  $client->putObject(array(
    'Bucket'=>'your-bucket-name',
    'Key' =>  'your-filepath-in-bucket',
    'SourceFile' => 'source-filename-with-path',
    'StorageClass' => 'REDUCED_REDUNDANCY'
  ));

} catch (S3Exception $e) {
  // Catch an S3 specific exception.
  echo $e->getMessage();
}

ここからステップバイステップの詳細を取得します PHPを使用したAmazon S3ファイルのアップロード

8
Zedd Index

次の例は私のために働いた:

<?php
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$client = S3Client::factory([
    'version' => 'latest',
    'region'  => 'us-west-1',
    'credentials' => [
        'key'    => "<scret-key>",
        'secret' => "<my-secret>"
    ]
 ]);

try {
    $client->putObject([
        'Bucket'     =>'<my-bucket-name>',
        'Key'        => '<file-name>',
        'SourceFile' => '<file-path-on-server>',    // like /var/www/vhosts/mysite/file.csv
        'ACL'        => 'public-read',
    ]);
} catch (S3Exception $e) {
    // Catch an S3 specific exception.
    echo $e->getMessage();
}

セキュリティ資格情報の取得:

リージョンコードの取得

1
Arvind Bhardwaj

アマゾンの最新のSDKで更新されたスクリプトは見つかりませんでした。私は自分でそれを作りました。これは、phpコマンドラインインタープリタースクリプトとして機能します。試してみる :

https://github.com/arizawan/aiss3clientphp

1
RainWalker

これは、AmazonS3に画像をアップロードするためのサンプルコードです。

// Bucket Name
$bucket="BucketName";
if (!class_exists('S3'))require_once('S3.php');

    //AWS access info
    if (!defined('awsAccessKey')) define('awsAccessKey', 'ACCESS_KEY');
    if (!defined('awsSecretKey')) define('awsSecretKey', 'ACCESS_Secret_KEY');

    $s3 = new S3(awsAccessKey, awsSecretKey);
    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ);
    if($s3->putObjectFile($tmp, $bucket , $image_name_actual,S3::ACL_PUBLIC_READ) )
    {
        $message = "S3 Upload Successful.";
        $s3file='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name;
        echo "<img src='$s3file'/>";
        echo 'S3 File URL:'.$s3file;
    }
    else{
        $message = "S3 Upload Fail.";
    }
}
0
Fiaz Ahmad

私はS3APIに精通していませんが、 https://github.com/KnpLabs/Gaufrette でストレージとして使用しました。 Gaufretteは、S3やその他のファイルサービス/システムの上にかなり素晴らしい抽象化レイヤーを提供するライブラリです。

0
Ziumin

これを使用してフォームを使用して画像をアップロードすると、正常に機能します。コードで使用してみてください。

$name = $_FILES['photo']['name'];
$size = $_FILES['photo']['size'];
$tmp = $_FILES['photo']['tmp_name'];

//////Upload Process


    // Bucket Name
    $bucket = 'bucket-name';
    require_once('S3.php');

    //AWS access info
    $awsAccessKey = 'awsAccessKey';
    $awsSecretKey = 'awsSecretKey';

    //instantiate the class
    $s3 = new S3($awsAccessKey, $awsSecretKey);

    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ);


    //Rename image name. 
    $actual_image_name = time();

        //Upload to S3
    if($s3->putObjectFile($tmp, $bucket , $actual_image_name, S3::ACL_PUBLIC_READ) )
    {
        $image='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name;
    }else{
        echo 'error uploading to S3 Amazon';
    }
0
Youssef Subehi