2013-04-27 306 views
6

我已經花了最近幾個小時以下的教程來實現使用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

回答

8

事實證明,我錯過了PHP的cURL擴展,這導致了一個問題,因爲我使用的S3類需要使用cURL。現在所有人都在工作。

8

您還應該考慮使用官方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

0

使用這一個使用表單上傳圖片,它的工作對我罰款 您可以嘗試使用它與你的代碼

$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

下面是示例代碼能夠在亞馬遜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."; 
    } 
} 
4

您可以通過運行以下作曲家命令下載最新的亞馬遜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