我试图使用shell exec从php代码中运行aws s3 cp命令。下面是PHP代码。
echo shell_exec("sudo aws s3 cp s3://<bucket>/somefolder/somefile s3://<bucket>/someotherfolder/somefile --region ap-southeast-1 --acl public-read");
文件没有被复制,echo的输出如下
“无法找到凭据已完成% 1部分,使用...剩余的文件”
注1:我已经使用aws configure命令设置了凭证
注2:如果我直接在终端运行完全相同的命令,它可以正常工作。
你知道吗?
7条答案
按热度按时间ecr0jaav1#
这对我很有效:
wgxvkvu92#
AWS CLI在~/.aws/config中设置凭据,aws php sdk在~/.aws/credentials中查找它们。
所以:
解决了我认为对我来说同样的问题。
twh00eeo3#
在你的终端上,你可以运行:
然后你会被要求4个值:
1.访问密钥ID(访问密钥)-这是两个值中较短的一个。
1.秘密访问密钥
1.默认地区名称(键入“us-east-1”)
1.输出格式(键入'json')
然后
ccrfmcuu4#
看起来像是配置文件的权限/位置问题。
使用AWS CLI设置的凭据写入 * 当前用户的 * 路径中的特殊文件中。PHP我猜是在其他权限下执行的(不是同一个用户)。我建议你应该把配置放在一个单独的文件中,并通过这种方式传递给CLI。您还需要确保特定的环境变量在PHP shell_exec中可用。
xghobddn5#
要从user 1464317扩展,请执行以下操作:
我发现这个问题存在于约塞米蒂vs Mavericks。AWS CLI for Mavericks在“~/.aws/config”中查找权限,而约塞米蒂在“~/.aws/credentials”中查找权限。
如果使用cron,可以在crontab -e中设置环境变量,如下所示:
或者按照user 1464317的提示,移动文件:
kr98yfug6#
要解决此问题,请执行以下步骤:
1.将.aws目录从/home/non-rootUser/.aws复制到/var/www
1.现在将目录更改为/var/www(cd /var/www)
1.更改权限:/www$ sudo chmod -R 755 .aws
1.更改所有权/www$ sudo chown -R $USER:$USER .aws
1.复查
roejwanj7#
我遇到了同样的问题。最后我用这个解决了。
php用户似乎找不到正确的凭证文件。它可以通过设置环境变量来修复。