【发布时间】:2016-09-17 04:02:44
【问题描述】:
我安装了 AWS PHP SDK 并尝试使用 SES。我的问题是,无论我做什么,它(显然)都在尝试阅读~/.aws/credentials。我目前有这个代码:
$S3_AK = getenv('S3_AK');
$S3_PK = getenv('S3_PK');
$profile = 'default';
$path = '/home/franco/public/site/default.ini';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = SesClient::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => "2010-12-01",
'credentials' => [
'key' => $S3_AK,
'secret' => $S3_PK,
]
));
并且仍然收到“无法从 ~/.aws/credentials 读取凭据”错误(过了一段时间)。
我尝试了 'credentials' => $provider 当然,这是我的想法,但由于它不起作用,我恢复为硬编码的凭据。我已经抛弃了 $S3_AK 和 $S3_PK 并且它们很好,我实际上将它们正确地用于 S3,但是我有 Zend 的包装器。我已经尝试了 ~/.aws/credentials (no ".ini") 以获得相同的结果。两个文件都有 777 权限。
好奇的信息:我必须将内存限制设置为 -1,这样它才能 var_dump 异常。异常的 html 约为 200mb。
我更喜欢使用环境变量,尽管凭证文件很好。我只是不明白为什么它似乎在尝试读取文件,即使我已经硬编码了凭据。
编辑:一位朋友向我展示了this,我删除了配置文件并修改了 try/catch 并注意到客户端似乎已正确创建,错误来自尝试实际发送电子邮件。
【问题讨论】:
-
变量不应该是
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY吗? -
如果我的回答不起作用,不仅要检查文件的权限,还要检查文件的父目录;运行服务器的用户可能无法读取它,因为它无法打开父目录之一。您可以使用
sudo -u www-data stat /home/franco/public/site/default.ini之类的东西进行测试,其中www-data是服务器用户。 -
Frédéric,一个是key id,另一个是access key,我是从环境变量中获取的。尽管如此,问题是它试图读取该文件,即使我明确告诉它凭据。
-
Frédéric,对不起,我想我理解错了。 github.com/aws/aws-sdk-php/blob/master/src/AwsClient.php#L62 说变量是秘密和密钥。
标签: php amazon-web-services zend-framework amazon-ses aws-php-sdk