基本AWS S3 PHP设置

基本AWS S3 PHP设置,php,amazon-web-services,amazon-s3,amazon,Php,Amazon Web Services,Amazon S3,Amazon,我已经尝试了一段时间,只设置一个上传表单的基本PHP实现来上传到Amazon的S3服务,但我无法让任何东西正常工作 通过阅读他们的文档,他们的例子看起来都不一样提供凭据和上载文件的正确方法是什么? 在他们的github回购协议上,它说: // Require the Composer autoloader. require 'vendor/autoload.php'; use Aws\S3\S3Client; // Instantiate an Amazon S3 client. $s3 =

我已经尝试了一段时间,只设置一个上传表单的基本PHP实现来上传到Amazon的S3服务,但我无法让任何东西正常工作

通过阅读他们的文档,他们的例子看起来都不一样提供凭据和上载文件的正确方法是什么?

在他们的github回购协议上,它说:

// Require the Composer autoloader.
require 'vendor/autoload.php';

use Aws\S3\S3Client;

// Instantiate an Amazon S3 client.
$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-west-2'
]);

try {
    $s3->putObject([
        'Bucket' => 'my-bucket',
        'Key'    => 'my-object',
        'Body'   => fopen('/path/to/file', 'r'),
        'ACL'    => 'public-read',
    ]);
} catch (Aws\Exception\S3Exception $e) {
    echo "There was an error uploading the file.\n";
}
关于这一点,他们说:

use Aws\S3\S3Client;

$client = S3Client::factory(array(
    'profile' => '<profile in your aws credentials file>'
));

// Upload an object by streaming the contents of a file
// $pathToFile should be absolute path to a file on disk
$result = $client->putObject(array(
    'Bucket'     => $bucket,
    'Key'        => 'data_from_file.txt',
    'SourceFile' => $pathToFile,
    'Metadata'   => array(
        'Foo' => 'abc',
        'Baz' => '123'
    )
));

// We can poll the object until it is accessible
$client->waitUntil('ObjectExists', array(
    'Bucket' => $this->bucket,
    'Key'    => 'data_from_file.txt'
));
使用Aws\S3\S3客户端;
$client=S3Client::工厂(数组(
“配置文件”=>“
));
//通过流式传输文件内容上载对象
//$pathToFile应该是磁盘上文件的绝对路径
$result=$client->putObject(数组)(
“Bucket”=>$Bucket,
'Key'=>'来自文件.txt'的数据',
“SourceFile”=>$pathToFile,
“元数据”=>数组(
“Foo”=>“abc”,
‘Baz’=>‘123’
)
));
//我们可以轮询该对象,直到它可访问为止
$client->waitill('ObjectExists',数组(
“Bucket”=>this->Bucket,
'Key'=>'来自文件.txt的数据'
));

最近能够做到这一点的任何人都能对此处的设置有所了解吗?

您链接到的文档中的关键是这句话:

您可以像前面的示例一样提供凭证配置文件, 直接指定访问密钥(通过密钥和密码),或您可以 如果您正在使用AWS,请选择忽略任何凭据信息 EC2实例的身份和访问管理(IAM)角色

因此,如果您是从EC2实例运行此操作,只需忽略任何凭据,它就会从与该实例关联的角色获取权限

如果没有在AWS中运行,则需要为运行代码的用户创建~/.AWS/config,并创建一个类似

[profile profile_name]
aws_access_key_id = key
aws_secret_access_key = secret
region = us-east-1
那你就做:

$client = S3Client::factory(array(
  'profile' => 'profile_name'
));

您链接到的文档中的关键是这句话:

您可以像前面的示例一样提供凭证配置文件, 直接指定访问密钥(通过密钥和密码),或您可以 如果您正在使用AWS,请选择忽略任何凭据信息 EC2实例的身份和访问管理(IAM)角色

因此,如果您是从EC2实例运行此操作,只需忽略任何凭据,它就会从与该实例关联的角色获取权限

如果没有在AWS中运行,则需要为运行代码的用户创建~/.AWS/config,并创建一个类似

[profile profile_name]
aws_access_key_id = key
aws_secret_access_key = secret
region = us-east-1
那你就做:

$client = S3Client::factory(array(
  'profile' => 'profile_name'
));

我最终通过使用嵌入的凭据使其工作

<?php

date_default_timezone_set("America/Denver");

require "./aws/aws-autoloader.php";

use Aws\S3\S3Client;

$s3Client = S3Client::factory(array(
    'credentials' => array(
        'key'    => 'key',
        'secret' => 'secret',
    ),
    "region" => "us-east-1",
    "version" => "latest"
));

?>

我最终通过使用嵌入的凭据使它工作起来

<?php

date_default_timezone_set("America/Denver");

require "./aws/aws-autoloader.php";

use Aws\S3\S3Client;

$s3Client = S3Client::factory(array(
    'credentials' => array(
        'key'    => 'key',
        'secret' => 'secret',
    ),
    "region" => "us-east-1",
    "version" => "latest"
));

?>


您是否有任何错误?我一直使用此指南。还要确保安装了cURL扩展。是否有任何错误?我一直使用本指南。还要确保安装了cURL扩展插件。