在 PHP 中使用 S3 和云存储:AWS SDK for PHP

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 PHP 中使用 S3 和云存储:AWS SDK for PHP



现代 Web 应用程序越来越频繁地使用云存储来存储文件、图像、备份和其他内容。Amazon S3(Simple Storage Service)是最流行的对象存储服务之一,它提供可扩展、安全且高性能的存储。在本文中,我们将介绍如何使用官方的 AWS SDK for PHP 在 PHP 中操作 S3 和云存储。



什么是 AWS SDK for PHP?



AWS SDK for PHP 是 Amazon 提供的官方库,允许您从 PHP 应用程序与 AWS 服务(包括 S3)进行交互。它提供了便捷的面向对象接口、自动的请求签名管理、错误处理以及对所有现代 PHP 版本(7.2+)的支持。



安装 AWS SDK



通过 Composer 进行安装。在项目根目录下执行以下命令:



composer require aws/aws-sdk-php


安装后,在您的 PHP 文件中引入 Composer 的自动加载:



require 'vendor/autoload.php';


配置 S3 连接



要使用 S3,您需要 Access Key ID 和 Secret Access Key,这些可以在 AWS IAM 控制台中获取。您还需要指定存储桶所在的区域(例如 us-east-1 或 eu-central-1)。



S3 客户端的基本配置示例:



use Aws\\S3\\S3Client;

$s3Client = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1', 'credentials' => [ 'key' => '您的_ACCESS_KEY', 'secret' => '您的_SECRET_KEY', ],]);


对于生产环境,建议使用环境变量或 AWS 配置文件,以避免将密钥硬编码在代码中:



putenv('AWS_ACCESS_KEY_ID=您的_ACCESS_KEY');putenv('AWS_SECRET_ACCESS_KEY=您的_SECRET_KEY');putenv('AWS_DEFAULT_REGION=us-east-1');


PHP 中 S3 的基本操作



1. 创建存储桶 (Bucket)



存储桶是存放对象(文件)的容器。存储桶名称必须是全局唯一的:



try {    $result = $s3Client->createBucket([        'Bucket' => 'my-unique-bucket-name',    ]);    echo "存储桶已创建: " . $result['Location'];} catch (Aws\\Exception\\AwsException $e) {    echo "错误: " . $e->getMessage();}


2. 上传文件 (PutObject)



从本地文件系统上传文件到 S3:



try {    $result = $s3Client->putObject([        'Bucket' => 'my-unique-bucket-name',        'Key'    => 'images/photo.jpg',         // 对象在存储桶中的路径        'SourceFile' => '/local/path/to/photo.jpg', // 本地文件        'ACL'    => 'public-read',               // 访问权限    ]);    echo "文件已上传。URL: " . $result['ObjectURL'];} catch (Aws\\Exception\\AwsException $e) {    echo "上传错误: " . $e->getMessage();}


您也可以使用 Body 参数直接从字符串上传数据:



$result = $s3Client->putObject([    'Bucket' => 'my-unique-bucket-name',    'Key'    => 'data.txt',    'Body'   => '文件内容',]);


3. 下载文件 (GetObject)



可以从 S3 下载文件到本地文件或变量中:



// 下载到文件$result = $s3Client->getObject([    'Bucket' => 'my-unique-bucket-name',    'Key'    => 'images/photo.jpg',    'SaveAs' => '/local/path/to/downloaded_photo.jpg',]);

// 下载到变量$result = $s3Client->getObject([ 'Bucket' => 'my-unique-bucket-name', 'Key' => 'data.txt',]);$content = $result['Body']->getContents();echo $content;


4. 删除文件 (DeleteObject)



try {    $                    

推荐