我使用的是 AWS CLI 版本 2。我使用的是 centos > Nginx > php 7.1,当我直接在命令行上运行时,以下命令可以正常工作。
aws s3 cp files/abc.pdf s3://bucketname/
但是当我使用以下代码从 index.php 文件运行相同的命令时
echo exec("aws s3 cp files/abc.pdf s3://bucketname/ 2>&1");
然后报错
<块引用>上传失败:无法找到凭据
答案 0 :(得分:0)
@Jass 在“~/.aws/credentials”或“~/.aws/config”中添加您的凭据并使其成为[default],否则使用 profile_name 以防万一多个帐户。 还要验证,如果您通过 export 将密钥用作环境变量,那么它仅适用于该终端。因此,请尝试从导出密钥的同一终端执行 php 或将其添加到 ~/.aws/credentials 中。
答案 1 :(得分:0)
我试过这个,它对我有用,我相信也应该对你有用。在您的 PHP 代码 (index.php) 中,尝试导出凭证文件位置,如下所示
echo exec("export AWS_SHARED_CREDENTIALS_FILE=/<path_to_aws_folder>/.credentials; aws s3 cp files/abc.pdf s3://bucketname/ 2>&1");
当您从命令行运行时,AWS CLI 会从您的主目录中获取凭证,即 ~/.aws/credentials
(这是默认值)。当执行 index.php
时,它会在其主目录中查找上述文件,该文件与您的主目录不同,因此无法找到凭据。通过上述更改,您明确将其指向您的 AWS 凭证。