Я пытаюсь отправить файл .txt
в s3bucket в AWS, но всякий раз, когда я запускаю свой код с помощью mamp, я получаю следующую ошибку:
Ошибка: ошибка при выполнении «PutObject» для «https://dynamics -bucket-qa.s3.eu-west-2.amazonaws.com / folder / Test.txt »; Ошибка HTTP AWS: ошибка cURL 60: проблема с сертификатом SSL: невозможно получить сертификат локального эмитента (см. http://curl.haxx.se/libcurl/c/libcurl-errors.html)
Я поместил файл cacert.pem
, который я скачал из Интернета, в папку extra/ssl
в MAMP, и я также обновил файл php.ini
этим curl.cainfo = "C:\MAMP\bin\php\php7.2.10\extras\ssl\cacert.pem"
После всего этого все равно не работает. Я долго пытался, но мне не удалось это исправить. Я довольно новичок во всем этом.
Я использую PHP версии 7.2.10
<?php
// Run:$ composer require aws/aws-sdk-php
require '../vendor/autoload.php';
use Aws\AwsClient;
use Aws\Exception\AwsException;
// AWS Info
$bucketName = 'dynamics-bucket-qa';
$IAM_KEY = 'XXXXXXXXXXXXXXXXXXXXXXX';
$IAM_SECRET = 'XXXXXXXXXXXXXXXX';
// Connect to AWS
try {
// You may need to change the region. It will say in the URL when the bucket is open
// and on creation.
$s3 = Aws\S3\S3Client::factory(
array(
'credentials' => array(
'key' => $IAM_KEY,
'secret' => $IAM_SECRET
),
'version' => 'latest',
'region' => 'eu-west-2'
)
);
} catch (Exception $e) {
die("Error: " . $e->getMessage());
}
// For this, I would generate a unqiue random string for the key name. But you can do whatever.
$keyName = 'folder/' . basename($_FILES["fileToUpload"]['name']);
$pathInS3 = 'https://s3.eu-west-2.amazonaws.com/' . $bucketName . '/' . $keyName;
// Add it to S3
try {
// Uploaded:
$file = $_FILES["fileToUpload"]['tmp_name'];
$s3->putObject(
array(
'Bucket'=>$bucketName,
'Key' => $keyName,
'SourceFile' => $file,
'StorageClass' => 'REDUCED_REDUNDANCY'
)
);
} catch (S3Exception $e) {
die('Error:' . $e->getMessage());
} catch (Exception $e) {
die('Error:' . $e->getMessage());
}
echo 'Done';
//htdocs composer -v
?>