我在尝试创建 S3 客户端时遇到了适用于 PHP 的 AWS SKD 问题。
我的 PHP 脚本尝试创建 S3 客户端,如下所示:
$client = new AwsS3S3Client([
'profile' => 'default'
'region' => 'eu-west-1',
'version' => '2006-03-01',
]);
这应该从/Users/username/.aws/credentials
读取我的凭据文件。
当我从命令行运行我的 PHP 脚本时它可以工作
当我通过本地 apache 网络服务器和浏览器从 PHP 应用程序中运行我的 PHP 脚本时,它会失败。
我收到的错误是
Cannot read credentials from /.aws/credentials
请注意,它正在尝试从我的根目录读取,而不是从我的用户目录读取。
在谷歌上搜索了这个问题后,一些帖子(如这篇)表明 AWS 开发工具包使用了$HOME
变量。为了测试这一点,我:
- 在我的终端中运行
printenv
,返回HOME=/Users/username
- 从返回
HOME=/Users/username
的命令行在 PHP 脚本中运行getenv('HOME')
- 通过 Apache 和浏览器在 PHP 脚本中运行
getenv('HOME')
和print $_SERVER['HOME']
-没有输出
我认为解决方案必须是将$HOME
传递到我的 apache 设置中 - 我将如何实现这一目标?
我遇到了同样的问题,但在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 -R ubuntu:www-data ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials
其中 www-data 是我的 Apache 进程的用户。
在OSX上,Apache的用户将是"_www",因此如果您尚未为Apache设置权限,请执行以下操作:
sudo chown -R username:_www ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials