2013-04-27 13 views
6

Ich habe die letzten Stunden nach Tutorials für die Implementierung von Dateiuploads auf Amazon S3 mit PHP verbracht. Ich habe die neueste Version von Donovan Schönknechts S3-Klasse auf meinen Server hochgeladen (als S3.php) und ich versuche den folgenden Code zu verwenden, um die Upload-Fähigkeit zu testen. Ich weiß, dass dieser Code funktioniert, weil ich zahlreiche Beispiele in Aktion gesehen habe.Verwenden von PHP zum Hochladen auf 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 

); 

?> 

Ich bekomme einen Fehler 500 Server Fehler, wenn ich versuche, diese Seite zu laden. Darüber hinaus hat mir jedes andere seriöse Tutorial dieser Art den gleichen Fehler 500 gegeben.

Ich habe überprüft, dass mein Schlüssel und geheimer Schlüssel gültig sind, indem Sie mit Cyberduck zu S3 verbinden.

Hat jemand eine Ahnung, was ich falsch machen könnte?

Danke,

Sean

+1

500 Fehler ist wahrscheinlich ein Fehler in Ihrem p PS-Code Aktivieren Sie display_errors oder überprüfen Sie Ihre Protokolle, um die Fehlermeldung anzuzeigen. – datasage

Antwort

8

Wie es sich herausstellt, fehlte mir die cURL-Erweiterung für PHP und dies verursachte ein Problem, da die S3-Klasse, die ich verwendete, die Verwendung von cURL erforderte. Alles funktioniert jetzt.

0

Ich bin mit S3 API nicht vertraut, aber ich benutzte es als Speicher mit https://github.com/KnpLabs/Gaufrette. Gaufrette ist eine Bibliothek, die eine ziemlich schöne Abstraktionsebene über S3 und anderen Dateidiensten/-systemen bietet.

8

Sie sollten auch den offiziellen AWS SDK for PHP verwenden. Beispiele für die Verwendung von S3 mit dem SDK finden Sie in ihrer S3 user guide.

+0

Das offizielle AWS SDK für PHP funktioniert nur mit Composer und es gibt keinen ZIP-Datei-Download mehr. Ich kann Composer nicht auf einer Shared-Hosting-Plattform für einige meiner Websites verwenden. – andrebruton

+6

In [jeder Veröffentlichung] (https://github.com/aws/aws-sdk-php/releases) ist eine Zip- und Phar-Datei enthalten, die die gesamten Closure-Abhängigkeiten enthält, sodass Composer nicht benötigt wird. –

+1

Das README und das Benutzerhandbuch des SDKs zeigen beide, wo die Zip heruntergeladen werden kann (http://docs.aws.amazon.com/aws-sdk-php/guide/latest/installation.html).Gibt es einen besonderen Grund, dass das SDK nur mit Composer funktioniert? –

0

verwenden eine zum Hochladen von Bildern ein Formular, und es funktioniert gut für mich mit Sie versuchen, es mit Ihrem Code verwenden, können

$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

Hier ist Beispielcode zum Hochladen von Bildern auf 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

Sie können, indem Sie folgende Komponist Befehl neueste Version von Amazon PHP SDK herunterladen

composer require aws/aws-sdk-php 

Weitere Konfiguration für Schritt Datei auf Amazon S3 sind folgende

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

Get Schritt zum Hochladen Details von hier Amazon S3 File Upload Using PHP

Verwandte Themen