尝试创建S3客户端时,我遇到了AWS SKD for PHP的问题。
我的PHP脚本尝试按如下方式创建S3客户端:
$client = new \Aws\S3\S3Client([
'profile' => 'default'
'region' => 'eu-west-1',
'version' => '2006-03-01',
]);
这应该从/Users/username/.aws/credentials
读取我的凭据文件。
从命令行运行我的PHP脚本工作
当我通过本地apache webserver和浏览器从PHP应用程序中运行PHP脚本时, 失败。我收到的错误是
Cannot read credentials from /.aws/credentials
请注意,它试图从我的根目录读取,而不是我的用户目录。
通过Google搜索此问题,多个帖子(如this one)表明AWS SDK使用$HOME
变量。为了测试这个我:
printenv
,返回HOME=/Users/username
getenv('HOME')
HOME=/Users/username
getenv('HOME')
和print $_SERVER['HOME']
- 无输出 我认为解决方案必须是将$HOME
传递到我的apache设置中 - 我将如何实现这一目标?
答案 0 :(得分:2)
我遇到了同样的问题,但在Linux上 - Ubuntu。我希望这些步骤可以在OSX上复制。
我在Apache vhost的SetEnv指令中添加了我的$ HOME变量的值,如下所示:
SetEnv HOME "/home/ubuntu"
在你的情况下应该是:
SetEnv HOME "/Users/username"
然后重新加载apache:
sudo service apache2 reload
在此更改之后,SDK正在查找正确文件中的凭据,但Apache没有访问权限的权限。我收到了错误"无法从/home/ubuntu/.aws/credentials"中读取凭据。 所以,我更改了〜/ .aws文件夹的所有权和权限,如下所示:
sudo chown ubuntu:www-data -R ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials
www-data是我的Apache进程的用户。
在OSX上,Apache的用户将是" _www",因此如果您没有为Apache设置权限,请执行以下操作:
sudo chown username:_www -R ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials