2013-04-27 9 views
6

Spędziłem ostatnie kilka godzin po tutoriali do implementacji przesyłania plików do Amazon S3 przy użyciu php. Przesłałem najnowszą wersję klasy S3 Donovana Schönknechta do mojego serwera (jako S3.php) i próbuję użyć następującego kodu do przetestowania możliwości przesyłania. Wiem, że ten kod zadziała, ponieważ widziałem wiele przykładów w akcji.Używanie PHP do przesłania do Amazon 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 

); 

?> 

Występuje błąd błędu 500 serwera podczas próby załadowania tej strony. Co więcej, każdy inny sprawdzony samouczek tego typu dał mi ten sam błąd 500.

Sprawdziłem, czy mój klucz i tajny klucz są prawidłowe, łącząc się z S3 z Cyberduck.

Czy ktoś ma pojęcia, co mógłbym robić niepoprawnie?

Dzięki,

Sean

+1

500 błąd prawdopodobnie jest błędem w twoim p kod hp. Włącz display_errors lub sprawdź logi, aby wyświetlić komunikat o błędzie. – datasage

Odpowiedz

8

Jak się okazało, brakowało mi rozszerzenia cURL dla PHP i powodowało to problem, ponieważ klasa S3, z której korzystałem, wymagała użycia cURL. Wszystko działa teraz.

0

nie jestem zaznajomiony z S3 API, ale użyłem go jako magazynu z https://github.com/KnpLabs/Gaufrette. Gaufrette to biblioteka zapewniająca ładną warstwę abstrakcji powyżej S3 i innych usług/systemów plików.

8

Powinieneś także rozważyć użycie oficjalnego AWS SDK for PHP. Przykłady używania S3 z SDK można znaleźć w ich S3 user guide.

+0

Oficjalne SDK AWS for PHP działa tylko z kompozytorem i nie ma już pobierania pliku ZIP. Nie mogę używać kompozytora na wspólnej platformie hostingowej dla niektórych moich stron. – andrebruton

+6

Zip i phar są zawarte w [każdym wydaniu] (https://github.com/aws/aws-sdk-php/releases), który zawiera wszystkie zależności zamknięcia, takie, że Composer nie jest wymagany. –

+1

README SDK i podręcznik użytkownika zarówno [pokaż, gdzie pobrać zip] (http://docs.aws.amazon.com/aws-sdk-php/guide/latest/installation.html).Czy jest jakiś szczególny powód, dla którego SDK działał tylko z Composer? –

0

użyć tego jeden do przesyłania zdjęć za pomocą formularza i to działa dobrze dla mnie może spróbować użyć go z kodem

$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

Oto przykładowy kod do przesyłania obrazów na Amazon 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

Można pobrać najnowszą wersję Amazon PHP SDK uruchamiając następujące polecenia kompozytora

composer require aws/aws-sdk-php 

Dalsza konfiguracja przesłać plik na Amazon S3 naśladują

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

krok po kroku szczegóły stąd Amazon S3 File Upload Using PHP