12

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");

ファイルはコピーされず、エコーからの出力は次のとおりです

「資格情報が見つかりません 1 つのパーツを完了しましたが、残りのファイルは ... です」

注 1: aws configure コマンドを使用して資格情報を既に設定しています

注 2: まったく同じコマンドを端末から直接実行すると、正常に動作します。

何か案が?

4

6 に答える 6

3

これは私のために働いた:

<?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>";

?>

于 2020-02-06T16:05:59.273 に答える
2

AWS CLI は ~/.aws/config で認証情報を設定し、aws php SDK は ~/.aws/credentials で認証情報を探します。

そう:

cd ~/.aws
mv config credentials

私にとって同じ問題だと思うものを解決しました。

于 2014-09-27T19:30:43.923 に答える
0

user1464317 から拡張するには:

この問題は Yosemite と Mavericks に存在することがわかりました。Mavericks の AWS CLI は、「~/.aws/config」でアクセス許可を検索します。Yosemite は「~/.aws/credentials」で検索します。

cron を使用している場合は、次のように crontab -e で環境変数を設定できます。

# Mavericks
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/config"

# Yosemite
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/credentials"

または、user1464317 が暗示しているように、ファイルを移動します。

mv config credentials
于 2014-12-17T16:34:34.510 に答える
0

構成ファイルの権限/場所の問題のようです。

AWS CLI を使用して設定された認証情報は、現在のユーザーのパスにある特別なファイルに書き込まれます。PHPは(同じユーザーとしてではなく)他の権限で実行されていると思います。構成を別のファイルに保存し、この方法で CLI に渡すことをお勧めします。また、特定の環境変数が PHP shell_exec 内で使用可能であることを確認する必要があります。

于 2014-02-22T15:24:22.987 に答える