skip to Main Content

I am using AWS CLI version 2. I am using centos > Nginx > php 7.1, Following command works fine when I directly run on command line.

aws s3 cp files/abc.pdf s3://bucketname/

but when I run same command from index.php file using following code

echo exec("aws s3 cp files/abc.pdf s3://bucketname/ 2>&1");

then it gives error

upload failed: Unable to locate credentials

2

Answers


  1. @Jass Add your credentials in "~/.aws/credentials" or "~/.aws/config" and make it [default] or else use profile_name incase you have multiple accounts.
    Also verify, if you are using keys as Environment variables by export, then it will work for that terminal only. So try to execute the php from same terminal where you exported the keys or add it in ~/.aws/credentials.

    Login or Signup to reply.
  2. I tried this and it worked for me and I believe should work for you as well. In your PHP code (index.php), try exporting the credential file location like below

    echo exec("export AWS_SHARED_CREDENTIALS_FILE=/<path_to_aws_folder>/.credentials; aws s3 cp files/abc.pdf s3://bucketname/ 2>&1");

    When you run from your command-line the AWS CLI picks up the credentials from your home directory i.e. ~/.aws/credentials (this is default). When the index.php is being executed it is looking for the above file in its home directory which appears is not the same as your home directory and hence cannot find the credentials. With the above change you are explicitly pointing it to your AWS credentials.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search