使用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与Cyberduck证实我的密钥和密钥是有效的。
有没有人有线索,我可能会做错吗?
感谢,
肖恩
事实证明,我错过了PHP的cURL扩展,这导致了一个问题,因为我使用的S3类需要使用cURL。现在所有人都在工作。
您还应该考虑使用官方AWS SDK for PHP。在SDK中使用S3的示例可以在其S3 user guide中找到。
适用于PHP的官方AWS开发工具包仅适用于作曲家,并且不再有ZIP文件下载。我无法在我的某些网站的共享主机平台上使用作曲家。 – andrebruton 2014-12-27 13:12:59
[每个发行版](https://github.com/aws/aws-sdk-php/releases)都包含zip和phar,其中包含整个闭包依存关系,因此Composer不是必需的。 – 2014-12-30 18:25:59
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';
}
下面是示例代码能够在亚马逊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
500错误可能是您的p错误hp代码。打开display_errors或检查日志以查看错误消息。 – datasage 2013-04-27 20:29:26