从php执行AWS CLI命令导致无法找到凭据

Aja*_*ang 9 php amazon-s3 amazon-web-services aws-cli

我试图使用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");
Run Code Online (Sandbox Code Playgroud)

文件未被复制,echo的输出如下

"无法找到凭据已完成1个部分,其中包含...文件"

注1:我已经使用aws configure命令设置了凭据

注意2:如果我直接从终端运行完全相同的命令,它工作正常.

任何的想法?

spc*_*Lrg 7

这对我有用:

<?php

    putenv('AWS_DEFAULT_REGION=your-region');
    putenv('AWS_ACCESS_KEY_ID=YOURACCESSKEYID');
    putenv('AWS_SECRET_ACCESS_KEY=YOURSECRETACCESSKEY');

    $output = shell_exec('aws s3 cp ./file.txt s3://MYBUCKETID/ 2>&1');
    echo "<pre>$output</pre>";

?>

Run Code Online (Sandbox Code Playgroud)

  • 也为我工作过。我猜 putenv 在 php 执行期间添加了一个环境变量会话,因此“shell_exec”在查找环境变量时没有任何问题 (2认同)

Son*_*van 0

看起来像是配置文件的权限/位置问题。

使用 AWS CLI 设置的凭证写入当前用户路径中的特殊文件中。我猜 PHP 是在其他权限下执行的(不是作为同一用户)。我建议您将配置保存在单独的文件中,并以这种方式传递到 CLI 。您还需要确保特定的环境变量在 PHP shell_exec 中可用。