编辑:问题解决了(感谢this post)!我只需要安装curl:
sudo apt-get install php5-curl
我正在开发一种工具,可以从浏览器上传AWS S3存储桶中的图像。我正在使用亚马逊提供的PHP SDK。 我尝试了documentation中提供的代码,但它不适用于我:
use Aws\S3\S3Client;
$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';
// $filepath should be absolute path to a file on disk
$filepath = '*** Your File Path ***';
// Instantiate the client.
$s3 = S3Client::factory();
// Upload a file.
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $keyname,
'SourceFile' => $filepath,
'ContentType' => 'text/plain',
'ACL' => 'public-read',
'StorageClass' => 'REDUCED_REDUNDANCY',
'Metadata' => array(
'param1' => 'value 1',
'param2' => 'value 2'
)
));
echo $result['ObjectURL'];
即使我只保留这两行:
use Aws\S3\S3Client;
$s3 = S3Client::factory();
......我收到了这些错误:
注意:使用未定义的常量CURLE_COULDNT_RESOLVE_HOST - 假设 'CURLE_COULDNT_RESOLVE_HOST'中 第244行的phar:///var/www/aws.phar/Aws/S3/S3Client.php
注意:使用未定义的常量CURLE_COULDNT_CONNECT - 假设 'CURLE_COULDNT_CONNECT'中 第244行的phar:///var/www/aws.phar/Aws/S3/S3Client.php
注意:使用未定义的常量CURLE_PARTIAL_FILE - 假设 phar:///var/www/aws.phar/Aws/S3/S3Client.php中的'CURLE_PARTIAL_FILE' 在第244行
注意:使用未定义的常量CURLE_WRITE_ERROR - 假设 phar:///var/www/aws.phar/Aws/S3/S3Client.php上的'CURLE_WRITE_ERROR' 第244行
注意:使用未定义的常量CURLE_READ_ERROR - 假设 phar:///var/www/aws.phar/Aws/S3/S3Client.php上的'CURLE_READ_ERROR' 第244行
注意:使用未定义的常量CURLE_OPERATION_TIMEOUTED - 假设 'CURLE_OPERATION_TIMEOUTED'中 第244行的phar:///var/www/aws.phar/Aws/S3/S3Client.php
注意:使用未定义的常量CURLE_SSL_CONNECT_ERROR - 假设 'CURLE_SSL_CONNECT_ERROR'中 第244行的phar:///var/www/aws.phar/Aws/S3/S3Client.php
注意:使用未定义的常量CURLE_HTTP_PORT_FAILED - 假设 'CURLE_HTTP_PORT_FAILED'中 第244行的phar:///var/www/aws.phar/Aws/S3/S3Client.php
注意:使用未定义的常量CURLE_GOT_NOTHING - 假设 phar:///var/www/aws.phar/Aws/S3/S3Client.php上的'CURLE_GOT_NOTHING' 第244行
注意:使用未定义的常量CURLE_SEND_ERROR - 假设 phar:///var/www/aws.phar/Aws/S3/S3Client.php上的'CURLE_SEND_ERROR' 第244行
注意:使用未定义的常量CURLE_RECV_ERROR - 假设 phar:///var/www/aws.phar/Aws/S3/S3Client.php上的'CURLE_RECV_ERROR' 第244行
致命错误:未捕获的异常 'Guzzle \ Common \ Exception \ RuntimeException',带有消息'The PHP cURL 必须安装扩展才能使用Guzzle。在 phar:///var/www/aws.phar/Guzzle/Http/Client.php:72堆栈跟踪:#0 PHAR:///var/www/aws.phar/Aws/Common/Client/AbstractClient.php(79): 狂饮\ HTTP \客户端 - > __构建体( 'https://s3.amaz ...', 对象(Guzzle \ Common \ Collection))#1 PHAR:///var/www/aws.phar/Aws/Common/Client/ClientBuilder.php(249): AWS \共同\客户\ AbstractClient-> __构建体(对象(AWS \共同\凭证\ RefreshableInstanceProfileCredentials), 对象(Aws \ S3 \ S3Signature),对象(Guzzle \ Common \ Collection))#2 PHAR:///var/www/aws.phar/Aws/S3/S3Client.php(207): Aws \ Common \ Client \ ClientBuilder-> build()#3 /var/www/response.php(30): 抛出Aws \ S3 \ S3Client :: factory()#4 {main} 第72行的phar:///var/www/aws.phar/Guzzle/Http/Client.php
答案 0 :(得分:0)
刚刚在我的本地机器上安装了aws php sdk,没有任何aws注册, 经过几次尝试得到这个工作代码:
use Aws\S3\S3Client;
$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';
// $filepath should be absolute path to a file on disk
$filepath = '*** Your File Path ***';
// Instantiate the client.
$s3 = S3Client::factory();
try{
// Upload a file.
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $keyname,
'SourceFile' => $filepath,
'ContentType' => 'text/plain',
'ACL' => 'public-read',
'StorageClass' => 'REDUCED_REDUNDANCY',
'Metadata' => array(
'param1' => 'value 1',
'param2' => 'value 2'
)
));
echo $result['ObjectURL'];
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}
此代码返回aws异常消息:
您必须为Body或SourceFile参数指定非空值。
如果我将$filepath
更改为任何实际文件的路径,则此代码输出:
从实例配置文件元数据服务器检索凭据时出错。当您未在Amazon EC2内部运行时,您必须在"密钥"中提供您的AWS访问密钥ID和秘密访问密钥。和#34;秘密"创建客户端或提供实例化的Aws \ Common \ Credentials \ CredentialsInterface对象时的选项。 ([curl] 28:5000毫秒后连接超时[url] http://XXX.xxx.xxx.xxx/latest/meta-data/iam/security-credentials/)
所以,如果有任何问题,非常受欢迎,但它必须有效。
顺便说一句,如果我从代码中删除catch
部分,我会在破坏的页面上从php获取相同的错误消息。
希望这可以帮助你。