使用PHP上传到亚马逊S3

问题描述:

我已经花了最近几个小时以下的教程来实现使用PHP将文件上传到Amazon S3。我将DonovanSchönknecht的S3类的最新版本上传到了我的服务器(作为S3.php),我试图使用下面的代码来测试上传功能。我知道这段代码会起作用,因为我已经看到了很多例子。使用PHP上传到亚马逊S3

<?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.

我通过连接到S3与Cyber​​duck证实我的密钥和密钥是有效的。

有没有人有线索,我可能会做错吗?

感谢,

肖恩

+1

500错误可能是您的p错误hp代码。打开display_errors或检查日志以查看错误消息。 – datasage 2013-04-27 20:29:26

事实证明,我错过了PHP的cURL扩展,这导致了一个问题,因为我使用的S3类需要使用cURL。现在所有人都在工作。

我不熟悉的S3 API,但我用它作为https://github.com/KnpLabs/Gaufrette存储。 Gaufrette是一个提供S3和其他文件服务/系统上的相当不错的抽象层的库。

您还应该考虑使用官方AWS SDK for PHP。在SDK中使用S3的示例可以在其S3 user guide中找到。

+0

适用于PHP的官方AWS开发工具包仅适用于作曲家,并且不再有ZIP文件下载。我无法在我的某些网站的共享主机平台上使用作曲家。 – andrebruton 2014-12-27 13:12:59

+6

[每个发行版](https://github.com/aws/aws-sdk-php/releases)都包含zip和phar,其中包含整个闭包依存关系,因此Composer不是必需的。 – 2014-12-30 18:25:59

+1

SDK的自述文件和用户指南[显示从哪里下载zip](http://docs.aws.amazon.com/aws-sdk-php/guide/latest/installation.html)。是否有一些特定的原因,但SDK只适用于Composer? – 2014-12-30 18:29:17

使用这一个使用表单上传图片,它的工作对我罚款 您可以尝试使用它与你的代码

$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'; 
    } 

我从来没有发现一个更新脚本亚马逊最新的SDK。我自己做的。它作为一个php命令行解释器脚本来炒作。试试看:

https://github.com/arizawan/aiss3clientphp

下面是示例代码能够在亚马逊S3上传图片。

// 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."; 
    } 
} 

您可以通过运行以下作曲家命令下载最新的亚马逊PHP SDK版本

composer require aws/aws-sdk-php 

而且配置上载在亚马逊S3文件中以下

// 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(); 
} 

获取一步一步来自这里的详细信息Amazon S3 File Upload Using PHP