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