」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 S3 配置適用於 PHP 的 AWS 開發工具包

使用 S3 配置適用於 PHP 的 AWS 開發工具包

發佈於2024-11-08
瀏覽:199

Amazon Web Services (AWS) 是一个强大的平台,为开发人员和企业提供广泛的服务。在这些服务中,Amazon Simple Storage Service (S3) 是最受欢迎且使用最广泛的服务之一。要以编程方式与 S3 交互,您可以使用适用于 PHP 的 AWS 开发工具包。在本文中,我们将指导您完成使用 S3 配置适用于 PHP 的 AWS 开发工具包的过程。

Configuring AWS SDK for PHP with S3

先决条件

在我们开始之前,请确保您具备以下条件:

  • AWS 账户
  • AWS 访问密钥 ID 和秘密访问密钥
  • PHP 5.6 或更高版本
  • 已安装作曲家

安装

要安装适用于 PHP 的 AWS 开发工具包,您可以使用 Composer。在终端中运行以下命令:

composer require aws/aws-sdk-php

此命令将在您的项目中安装最新版本的适用于 PHP 的 AWS 开发工具包。

配置

安装 SDK 后,您需要使用您的 AWS 访问密钥 ID 和秘密访问密钥对其进行配置。您可以通过创建配置文件或设置环境变量来完成此操作。

配置文件

在项目中创建一个名为config.php的新文件,并添加以下代码:

 'us-east-1',
    'version' => 'latest',
    'credentials' => [
        'key' => 'YOUR_ACCESS_KEY_ID',
        'secret' => 'YOUR_SECRET_ACCESS_KEY',
    ]
]);

$s3Client = $sdk->createS3();

将 YOUR_ACCESS_KEY_ID 和 YOUR_SECRET_ACCESS_KEY 替换为您的实际 AWS 访问密钥 ID 和秘密访问密钥。

环境变量

或者,您可以将 AWS Access Key ID 和 Secret Access Key 设置为环境变量:

export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY

然后,创建S3客户端如下:

 'us-east-1',
    'version' => 'latest',
]);

$s3Client = $sdk->createS3();

准备好了解有关 AWS 和 PHP 的更多信息了吗?查看我们关于 AWS 配置 SSO 和修复 laravel 权限被拒绝错误的其他文章。

用法

既然您已经使用 S3 配置了适用于 PHP 的 AWS 开发工具包,您可以开始使用它与 S3 存储桶进行交互。以下是如何列出帐户中所有存储桶的示例:

$buckets = $s3Client->listBuckets();
foreach ($buckets['Buckets'] as $bucket) {
    echo $bucket['Name'] . PHP_EOL;
}

当然,这里有一些将适用于 PHP 的 AWS 开发工具包与 S3 结合使用的其他示例和最佳实践。

上传文件

要将文件上传到 S3 存储桶,您可以使用 putObject 方法。这是一个例子:

$bucketName = 'my-bucket';
$keyName = 'my-file.txt';
$filePath = '/path/to/my-file.txt';

$result = $s3Client->putObject([
    'Bucket' => $bucketName,
    'Key' => $keyName,
    'SourceFile' => $filePath,
]);

echo $result['ObjectURL'] . PHP_EOL;

此代码会将位于 /path/to/my-file.txt 的文件上传到 my-bucket 存储桶,并打印上传文件的 URL。

下载文件

要从 S3 存储桶下载文件,您可以使用 getObject 方法。这是一个例子:

$bucketName = 'my-bucket';
$keyName = 'my-file.txt';
$filePath = '/path/to/downloaded-file.txt';

$result = $s3Client->getObject([
    'Bucket' => $bucketName,
    'Key' => $keyName,
    'SaveAs' => $filePath,
]);

echo $result['ContentLength'] . ' bytes downloaded.' . PHP_EOL;

此代码将从 my-bucket 存储桶中下载带有 my-file.txt 密钥的文件并将其保存到 /path/to/downloaded-file.txt。

列出对象

要列出 S3 存储桶中的对象,您可以使用 listObjects 方法。这是一个例子:

$bucketName = 'my-bucket';

$result = $s3Client->listObjects([
    'Bucket' => $bucketName,
]);

foreach ($result['Contents'] as $object) {
    echo $object['Key'] . PHP_EOL;
}

此代码将列出 my-bucket 存储桶中的所有对象并打印它们的密钥。

最佳实践 - AWS 开发工具包 PHP S3

以下是将适用于 PHP 的 AWS 开发工具包与 S3 结合使用时需要记住的一些最佳实践:

  • 使用 IAM 角色和策略来管理对 S3 资源的访问。
  • 使用版本控制来保留对象的多个版本并防止意外删除。
  • 使用生命周期策略自动管理对象的存储和保留。
  • 使用传输加速来提高上传和下载的性能。
  • 使用服务器端加密来保护您的静态数据。
  • 使用事件通知根据 S3 对象的更改触发操作。

当然,这里有一些有关在 Laravel 中将适用于 PHP 的 AWS 开发工具包与 S3 结合使用的其他提示。

将适用于 PHP 的 AWS 开发工具包与 Laravel 结合使用

Laravel 内置了对适用于 PHP 的 AWS 开发工具包的支持,这使得您可以在 Laravel 应用程序中轻松使用 S3。以下是在 Laravel 中使用 SDK 的一些技巧:

  • 通过 Composer 安装适用于 PHP 的 AWS 开发工具包:
composer require aws/aws-sdk-php
  • 在 .env 文件中配置您的 AWS 凭证:
AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_DEFAULT_REGION=your_region
  • 使用 Storage Facade 与 S3 交互:
use Illuminate\Support\Facades\Storage;

// Upload a file
Storage::disk('s3')->put('my-file.txt', file_get_contents('/path/to/my-file.txt'));

// Download a file
Storage::disk('s3')->download('my-file.txt', '/path/to/downloaded-file.txt');

// List the objects in a bucket
$objects = Storage::disk('s3')->listContents('my-bucket');

foreach ($objects as $object) {
    echo $object['path'] . PHP_EOL;
}
  • 使用 Laravel 的 Flysystem 适配器来自定义 Storage Facade 的行为:
use Illuminate\Support\ServiceProvider;
use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
use Aws\S3\S3Client;

class S3ServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('filesystems.disks.s3', function ($app) {
            return new AwsS3V3Adapter(
                new S3Client([
                    'region' => config('filesystems.disks.s3.region'),
                    'version' => 'latest',
                    'credentials' => [
                        'key' => config('filesystems.disks.s3.key'),
                        'secret' => config('filesystems.disks.s3.secret'),
                    ],
                ]),
                config('filesystems.disks.s3.bucket')
            );
        });
    }
}
  • 使用Laravel的队列系统异步执行S3操作:
use Illuminate\Support\Facades\Storage;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class UploadFile implements ShouldQueue
{
    use InteractsWithQueue;

    protected $filePath;

    public function __construct($filePath)
    {
        $this->filePath = $filePath;
    }

    public function handle()
    {
        Storage::disk('s3')->put('my-file.txt', file_get_contents($this->filePath));
    }
}

最佳实践 - AWS 开发工具包 PHP Laravel

以下是在 Laravel 中将适用于 PHP 的 AWS 开发工具包与 S3 结合使用时需要记住的一些最佳实践:

  • 使用 Laravel 对适用于 PHP 的 AWS 开发工具包的内置支持来简化您的代码并减少需要编写的样板代码量。
  • 使用 Laravel 的队列系统异步执行 S3 操作,这可以提高 Laravel 应用程序的性能和可扩展性。
  • 使用 Laravel 的 Flysystem 适配器自定义 Storage Facade 的行为,并将 S3 与其他 Laravel 功能集成,例如 Laravel 的缓存系统。
  • 使用 Laravel 的队列系统异步执行 S3 操作,这可以提高 Laravel 应用程序的性能和可扩展性。
  • 在将敏感数据存储到 S3 之前,使用 Laravel 的加密功能对其进行加密。
  • 使用 Laravel 的日志记录功能来记录将适用于 PHP 的 AWS 开发工具包与 S3 结合使用时发生的任何错误或异常。

结论

在本文中,我们介绍了使用 S3 配置适用于 PHP 的 AWS 开发工具包的基础知识,并提供了一些使用该开发工具包与 S3 的其他示例和最佳实践。我们还提供了一些在 Laravel 中将 SDK 与 S3 结合使用的额外提示。通过遵循这些准则,您可以确保您的 PHP 应用程序安全、高效且可扩展。


想要了解有关 AWS 和 PHP 的更多信息?查看我们关于 DevOps Mind 的其他文章。

版本聲明 本文轉載於:https://dev.to/fernandomullerjr/configuring-aws-sdk-for-php-with-s3-257f?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-05-08
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-05-08
  • 如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    在Visual Studio 2012 儘管已安裝了MySQL Connector v.6.5.4,但無法將MySQL數據庫添加到實體框架的“ DataSource對話框”中。為了解決這一問題,至關重要的是要了解MySQL連接器v.6.5.5及以後的6.6.x版本將提供MySQL的官方Visual...
    程式設計 發佈於2025-05-08
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-05-08
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-05-08
  • 如何使用Java.net.urlConnection和Multipart/form-data編碼使用其他參數上傳文件?
    如何使用Java.net.urlConnection和Multipart/form-data編碼使用其他參數上傳文件?
    使用http request 上傳文件上傳到http server,同時也提交其他參數,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    程式設計 發佈於2025-05-08
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    的綜合集合:在Java中介紹Java的Map.entry和SimpleEntry和SimpleEntry和SimpleEntry和SimpleEntry和SimpleEntry和SimpleEntry和SimpleEntry和SimpleEntry apry and Map。 地圖。它具有兩個通用...
    程式設計 發佈於2025-05-08
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-05-08
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-05-08
  • Java字符串非空且非null的有效檢查方法
    Java字符串非空且非null的有效檢查方法
    檢查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。 isement(Isement() trim whitespace whites...
    程式設計 發佈於2025-05-08
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-05-08
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-05-08
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-05-08
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-05-08
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-05-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3