PHPを使ってS3にファイルをアップロードし、公開(パブリックアクセス可能)にする方法を紹介します。
AWSSDK for PHPを使用する方法が一般的です。
事前準備
- AWSSDK for PHPをインストール
sh composer require aws/aws-sdk-php
- IAMユーザーの作成 & 設定
- AWSマネジメントコンソールで IAM ユーザーを作成
AmazonS3FullAccess
または適切なポリシーを付与- アクセスキーID & シークレットアクセスキーを取得
S3にアップロードし、パブリックアクセスを設定
1. PHPスクリプト
<?phprequire'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; // AWS認証情報$bucketName='your-bucket-name'; $region='us-east-1'; // 適切なリージョンを指定$accessKey='YOUR_ACCESS_KEY'; $secretKey='YOUR_SECRET_KEY'; // S3クライアントの作成$s3=new S3Client(['region'=>$region, 'version'=>'latest', 'credentials'=>['key'=>$accessKey, 'secret'=>$secretKey, ], ]); // アップロードするファイル$filePath='path/to/local/file.jpg'; $keyName='uploads/file.jpg'; // S3上のファイル名try{// S3にアップロード(公開アクセス付き)$result=$s3->putObject(['Bucket'=>$bucketName, 'Key'=>$keyName, 'SourceFile'=>$filePath, 'ACL'=>'public-read', // 公開アクセス]); // アップロード成功時のURLを取得echo"File uploaded successfully. URL: ".$result['ObjectURL']."\n"; }catch(AwsException $e){echo"Upload failed: ".$e->getMessage()."\n"; }
ポイント
✅ ACL => 'public-read'
を指定することで、自動的にパブリックアクセス可能なファイルとしてアップロードされる
✅ ObjectURL
を取得して、アップロードしたファイルのURLを表示
✅ Key
で S3 上のフォルダ階層を設定できる(例:uploads/file.jpg
)
✅ .env
や AWS IAMロールを使って、アクセスキー
や シークレットキー
を環境変数化するのがセキュリティ的に推奨
アップロードしたファイルのURL
アップロードが成功すると、以下のようなURLでアクセス可能になります。
https://your-bucket-name.s3.amazonaws.com/uploads/file.jpg
または、リージョンが us-east-1
以外の場合:
https://your-bucket-name.s3.your-region.amazonaws.com/uploads/file.jpg
セキュリティ対策
- バケットポリシーで
s3:PutObject
を制限(特定のIAMユーザーのみに許可) - CloudFront を経由してアクセス(S3を直接公開せず、安全にファイルを配信)
- アクセスキーの管理(環境変数または
.env
に保存し、ソースコードに含めない)
これで、PHPからS3にファイルをアップロードし、公開する方法が実装できます! 🎉