現在起きていること
タイトルの通り、下記のエラーが表示。
string(798) "Error executing "PutObject" on "https://s3.リージョン.amazonaws.com/%2A%2A%2A%20バケット名%20%2A%2A%2A/s3/sample.png"; AWS HTTP error: Client error: PUT https://s3.リージョン.amazonaws.com/%2A%2A%2A%20バケット名%20%2A%2A%2A/s3/sample.png
resulted in a 400 Bad Request
response: InvalidBucketNameThe specified bucket is not valid.< (truncated...) InvalidBucketName (client): The specified bucket is not valid. - InvalidBucketNameThe specified bucket is not valid.*** バケット名 ***518DE16D49E9F219fY+flLyc7w+Tg4X+XnwzmEoZg7NFppfEUPikYbGm01vj5DSQRu6zHtWway//MnHy6dUgtqmYB2I=" NULL
コード
php
1<?php 2require_once "./../vendor/autoload.php"; 3 4use Aws\S3\S3Client; 5use Aws\Exception\AwsException; 6use Aws\S3\Exception\S3Exception; 7 8$bucket = '--- バケット名 ---'; 9$key = '--- mykey ---'; 10$secret = '--- mysecret ---'; 11 12$s3 = new S3Client([ 13 'version' => 'latest', 14 'cledentials' => [ 15 'key' => $key, 16 'secret' => $secret 17 ], 18 'region' => 'リージョン', 19]); 20 21$file = $_FILES['img']['tmp_name']; 22if (!is_uploaded_file($file)) { 23 return; 24} 25 26try { 27 $result = $s3->putObject([ 28 'Bucket' => $bucket, 29 'Key' => 's3/sample.png', 30 'Body' => 'pivate-read', 31 'ContentType' => mime_content_type($file) 32 ]); 33} catch(S3Exception $e) { 34 var_dump($e -> getMessage()); 35} 36 37var_dump($result);
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>test</title> 7</head> 8<body> 9 <form action="s3.php" method="POST" enctype="multipart/form-data"> 10 <input type="file" name="img"> 11 <button type="submit">アップロード</button> 12</form> 13 14</body> 15</html> 16
したいこと
エラーを解決し、S3に画像をアップロードしたい。
試したこと
バケット名の確認→問題なし
環境
macOS Mojave 10.14.6
Visual Studio Code 1.48.2
PHP 7.1.33
追記
別途、環境変数設定した上でgetenv関数で値を指定し、再度読み込んだら下記のエラーが発生しました。
PHP Fatal error: Uncaught Aws\Exception\CredentialsException: Error retrieving credentials from the instance profile metadata service. (cURL error 28: Connection timed out after 1000 milliseconds (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)) in /app/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php:240
まだ解決はできておりません。引き続き調べます。
追記
修正後のコード
php
1<?php 2require_once "./../vendor/autoload.php"; 3 4use Aws\S3\S3Client; 5use Aws\Exception\AwsException; 6use Aws\S3\Exception\S3Exception; 7 8$bucket = getenv('S3_BUCKET_KEY'); 9$key = getenv('S3_ACCESS_KEY'); 10$secret = getenv('S3_SECRET_KEY'); 11 12$s3 = new S3Client([ 13 'version' => 'latest', 14 'region' => getenv('S3_REGION'), 15 'cledentials' => [ 16 'key' => $key, 17 'secret' => $secret 18 ] 19]); 20 21if (!is_uploaded_file($_FILES['img']['tmp_name'])) { 22 return; 23} 24 25$file = fopen($_FILES['img']['tmp_name'], 'rb'); 26try { 27 $result = $s3->putObject([ 28 'ACL' => 'public-read', 29 'Bucket' => $bucket, 30 'Key' => 'sample.jpg', 31 'Body' => $file, 32 'ContentType' => mime_content_type($_FILES['img']['tmp_name']) 33 ]); 34} catch (S3Exception $e) { 35 var_dump($e->getMessage()); 36} 37 38var_dump($result); 39
回答1件
あなたの回答
tips
プレビュー