У меня точно такая же проблема, как Выполнение команды CLI AWS из php приводит к невозможности найти учетные данные
Я сделал:
cd ~/.aws
mv config credentials
Но это не помогло.
Итак, что я сделал, так и config и учетные данные имеют одинаковое содержимое:
[дефолт]aws_access_key_id = AKIAJIPLT472C32RD6AQ
aws_secret_access_key = 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
выход = JSON
регион = ap-юго-восток-1
Код, который я использую в моем файле PHP:
$s3 = system("aws s3 cp /var/www/html/v2/upload/__rmx4hqf.png s3://<bucket>/somefolder 2>&1");
Я думаю, что php
команда не может найти файл учетных данных aws, потому что пользователь, которого вы запустили $ aws configure
отличается от эффективного пользователя PHP. Вы не предоставили достаточно информации о том, как вы запустили команду configure или как выполнялся скрипт php, так что это только мое предположение.
Что произойдет, если вы явно передадите путь к файлу учетных данных через переменную среды AWS_CONFIG_FILE
(например. $s3 = system("AWS_CONFIG_FILE=/path/to/credential aws s3 cp ...
)?
Попробуйте добавить свой регион
$s3 = system("aws s3 cp /var/www/html/v2/upload/__rmx4hqf.png s3://<bucket>/somefolder 2>&1 --region ap-southeast-1");
лайк колчан скажем, apache2 запускается от другого пользователя, а затем от конечного пользователя
вы можете увидеть apache пользователя ENV Vars с помощью команды getenv();
чтобы добавить переменные в apache2 ENV, вам нужно использовать putenv («string»);
Вы должны добавить сертификаты AWS таким образом
putenv('AWS_DEFAULT_REGION=' . $region);
putenv('AWS_ACCESS_KEY_ID=' . $key);
putenv('AWS_SECRET_ACCESS_KEY=' . $secret);e
print_r(getenv());
только это решение работает для меня, когда я пытаюсь запустить aws cli из php файла