Php 无法从OSX本地环境上的/.aws/credentials-apache vs命令行读取凭据

Php 无法从OSX本地环境上的/.aws/credentials-apache vs命令行读取凭据,php,macos,apache,aws-sdk,Php,Macos,Apache,Aws Sdk,在尝试创建S3客户端时,我遇到了AWS SKD for PHP的问题 我的PHP脚本尝试创建S3客户端,如下所示: $client = new \Aws\S3\S3Client([ 'profile' => 'default' 'region' => 'eu-west-1', 'version' => '2006-03-01', ]); SetEnv HOME "/home/ubuntu" sudo chown -R ubuntu:www-data

在尝试创建S3客户端时,我遇到了AWS SKD for PHP的问题

我的PHP脚本尝试创建S3客户端,如下所示:

$client = new \Aws\S3\S3Client([
    'profile' => 'default'
    'region'  => 'eu-west-1',
    'version' => '2006-03-01',
]);
SetEnv HOME "/home/ubuntu"
sudo chown -R ubuntu:www-data ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials
这应该从
/Users/username/.aws/credentials
读取我的凭证文件

当我从命令行运行我的PHP脚本时,会起作用

当我通过本地apache Web服务器和浏览器在PHP应用程序中运行PHP脚本时,会失败

我收到的错误是

Cannot read credentials from /.aws/credentials
请注意,它试图从我的根目录而不是用户目录中读取

谷歌搜索了这个问题后,有几篇文章(如)指出AWS SDK使用了
$HOME
变量。要测试这一点,请执行以下操作:

  • 在我的终端中运行
    printenv
    ,返回
    HOME=/Users/username
  • 从返回
    HOME=/Users/username
  • 通过Apache和浏览器在PHP脚本中运行
    getenv('HOME')
    print$\u服务器['HOME']
    无输出

我认为解决方案必须是将
$HOME
传递到我的apache设置中-我该如何实现这一点?

我也有同样的问题,但在Linux-Ubuntu上。我希望这些步骤可以在OSX上复制

我在Apache vhost中的SetEnv指令中添加了$HOME变量的值,如下所示:

$client = new \Aws\S3\S3Client([
    'profile' => 'default'
    'region'  => 'eu-west-1',
    'version' => '2006-03-01',
]);
SetEnv HOME "/home/ubuntu"
sudo chown -R ubuntu:www-data ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials
在您的情况下,它应该是:

SetEnv HOME "/Users/username"
然后重新加载apache:

sudo service apache2 reload
更改后,SDK在正确的文件中查找凭据,但Apache没有访问该文件的权限。我收到一个错误“无法从/home/ubuntu/.aws/credentials读取凭据”。 因此,我更改了~/.aws文件夹的所有权和权限,如下所示:

$client = new \Aws\S3\S3Client([
    'profile' => 'default'
    'region'  => 'eu-west-1',
    'version' => '2006-03-01',
]);
SetEnv HOME "/home/ubuntu"
sudo chown -R ubuntu:www-data ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials
其中www数据是我的Apache进程的用户

在OSX上,Apache的用户将是“_www”,因此如果您尚未设置Apache的权限,请执行以下操作:

sudo chown -R username:_www ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials

太棒了,文件权限部分非常重要!您对该命令有一个问题,当我试图将
-R
放在
~/.aws
之前并运行它时,我得到了一个错误:
chown:-R:没有这样的文件或目录
-R
选项后,我发现应该在
chown
之后调用它,因此正确的命令应该是sudo chown-R username:_www ~/.aws
-其他一切正常。非常感谢。