پلتفرم PHP
(PHP Platform)اتصال به ذخیرهسازی ابری
بدون شک اتصال برنامه به یک ذخیرهسازی ابری مطمئن برای نگهداری و ارائه فایلهای استاتیک وبسایت یا دادههای آپلود شده توسط کاربران، باعث اطمینان خاطر صاحبان کسب و کار و بهبود عملکرد برنامه میشود.
فهرست عناوین:
- نصب AWS SDK
- تنظیم کلیدها
- دریافت لیست باکتها توسط AWS SDK
- آپلود فایل توسط AWS SDK
- حذف فایل توسط AWS SDK
- دانلود فایل توسط AWS SDK
- دریافت لینک موقت فایل توسط AWS SDK
در صورتی که تمایلی به خواندن آموزش متنی ندارید میتوانید ویدیوی آموزشی زیر را مشاهده کنید.
نصب AWS SDK
از آنجا که ذخیرهسازی ابری لیارا یک سرویس Object storage سازگار با پروتکل S3 است، شما میتوانید با استفاده از AWS SDK، در زبانها و فریمورکهای مختلفی این فضای ذخیرهسازی را مدیریت کنید. حال برای اتصال به ذخیرهسازی ابری در PHP باید با اجرای دستور زیر، پکیج aws-sdk را نصب کنید.
composer require aws/aws-sdk-php
تنظیم کلیدها
در مرحلهی بعد، بهمنظور امنیت و کنترل راحتتر مقادیر باید مشخصات فضای ذخیرهسازی ابری اعم از کلیدها و آدرس اتصال به این سرویس را در بخش متغیرهای برنامه تنظیم کنید.
LIARA_ENDPOINT=https://<Liara Bucket Endpoint>
LIARA_BUCKET_NAME=<Bucket Name>
LIARA_ACCESS_KEY=<Access Key>
LIARA_SECRET_KEY=<Secret Key>
همچنین اگر باکت شما خصوصی باشد، برای دسترسی به باکت، نیاز به کلید دسترسی دارید. برای ساخت کلید، به صفحه ذخیرهسازی ابری بروید و طبق عکسها کلید خود را بسازید.
به قسمت کلیدها رفته:
یک کلید جدید بسازید.
کلید های ساخته شده را کپی کنید. توجه داشته باشید که SECRET_KEY تنها یک بار نمایش داده میشود و پس از آن باید کلید را درجایی مطمئن ذخیره کنید.
دریافت لیست باکتها توسط AWS SDK
نمونه کد برای دریافت لیست باکتهای ایجاد شده:
<?php
// Require the Composer autoloader.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
// Instantiate an S3 client.
$client = new S3Client([
'region' => 'us-east-1',
'version' => '2006-03-01',
'endpoint' => LIARA_ENDPOINT,
'credentials' => [
'key' => LIARA_ACCESS_KEY,
'secret' => LIARA_SECRET_KEY
],
]);
$result = $client->listBuckets([/* ... */]);
$promise = $client->listBucketsAsync([/* ... */]);
print_r($result);
print_r($promise);
آپلود فایل توسط AWS SDK
نمونه کد برای آپلود فایل در باکتهای ایجاد شده:
<?php
namespace AppController;
class DotEnvEnvironment
{
public function load($path): void
{
$lines = file($path . '/.env');
foreach ($lines as $line) {
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
putenv(sprintf('%s=%s', $key, $value));
$_ENV[$key] = $value;
$_SERVER[$key] = $value;
}
}
}
require 'vendor/autoload.php';
use AwsS3S3Client;
use AwsExceptionAwsException;
(new DotEnvEnvironment)->load(__DIR__);
// Setting Env Variables
$accessKey = getenv("LIARA_ACCESS_KEY");
$secretKey = getenv("LIARA_SECRET_KEY");
$endpoint = getenv("LIARA_ENDPOINT");
$bucketName = getenv("LIARA_BUCKET_NAME");
// making connection using s3
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'endpoint' => $endpoint,
'credentials' => [
'key' => $accessKey,
'secret' => $secretKey,
],
]);
try {
// name of the file:
$fileName = 'liara-poster.png';
// uploading file to the bucket:
$result = $s3->putObject([
'Bucket' => $bucketName,
'Key' => $fileName,
'Body' => file_get_contents($fileName),
'ACL' => 'public-read',
]);
echo "File uploaded successfully.
";
} catch (AwsException $e) {
echo $e->getMessage() . "
";
}
حذف فایل توسط AWS SDK
نمونه کد برای حذف فایل در باکتهای ایجاد شده:
<?php
namespace AppController;
class DotEnvEnvironment
{
public function load($path): void
{
$lines = file($path . '/.env');
foreach ($lines as $line) {
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
putenv(sprintf('%s=%s', $key, $value));
$_ENV[$key] = $value;
$_SERVER[$key] = $value;
}
}
}
require 'vendor/autoload.php';
use AwsS3S3Client;
use AwsExceptionAwsException;
(new DotEnvEnvironment)->load(__DIR__);
// Setting Env Variables
$accessKey = getenv("LIARA_ACCESS_KEY");
$secretKey = getenv("LIARA_SECRET_KEY");
$endpoint = getenv("LIARA_ENDPOINT");
$bucketName = getenv("LIARA_BUCKET_NAME");
// making connection using s3
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'endpoint' => $endpoint,
'credentials' => [
'key' => $accessKey,
'secret' => $secretKey,
],
]);
try {
// name of the file:
$fileNameToDelete = 'example.txt';
// deleting the file:
$result = $s3->deleteObject([
'Bucket' => $bucketName,
'Key' => $fileNameToDelete,
]);
echo "File '$fileNameToDelete' deleted successfully.
";
} catch (AwsException $e) {
echo $e->getMessage() . "
";
}
دانلود فایل توسط AWS SDK
نمونه کد برای دانلود فایل در باکتهای ایجاد شده:
<?php
namespace AppController;
class DotEnvEnvironment
{
public function load($path): void
{
$lines = file($path . '/.env');
foreach ($lines as $line) {
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
putenv(sprintf('%s=%s', $key, $value));
$_ENV[$key] = $value;
$_SERVER[$key] = $value;
}
}
}
require 'vendor/autoload.php';
use AwsS3S3Client;
use AwsExceptionAwsException;
(new DotEnvEnvironment)->load(__DIR__);
// Setting Env Variables
$accessKey = getenv("LIARA_ACCESS_KEY");
$secretKey = getenv("LIARA_SECRET_KEY");
$endpoint = getenv("LIARA_ENDPOINT");
$bucketName = getenv("LIARA_BUCKET_NAME");
// making connection using s3
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'endpoint' => $endpoint,
'credentials' => [
'key' => $accessKey,
'secret' => $secretKey,
],
]);
try {
// نام فایل مورد نظر برای دانلود
$fileName = 'example.txt';
// مسیر برای ذخیره فایل در دایرکتوری downloads
$downloadPath = __DIR__ . '/downloads/' . $fileName;
// دانلود فایل از سبد
$result = $s3->getObject([
'Bucket' => $bucketName,
'Key' => $fileName,
'SaveAs' => $downloadPath,
]);
echo "File '$fileName' downloaded successfully.
";
} catch (AwsException $e) {
echo $e->getMessage() . "
";
}
دریافت لینک موقت فایل توسط AWS SDK
نمونه کد برای دریافت لینک موقت یکساعته فایلها در باکتهای ایجاد شده:
<?php
namespace AppController;
class DotEnvEnvironment
{
public function load($path): void
{
$lines = file($path . '/.env');
foreach ($lines as $line) {
[$key, $value] = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
putenv(sprintf('%s=%s', $key, $value));
$_ENV[$key] = $value;
$_SERVER[$key] = $value;
}
}
}
require 'vendor/autoload.php';
use AwsS3S3Client;
use AwsExceptionAwsException;
(new DotEnvEnvironment)->load(__DIR__);
// Setting Env Variables
$accessKey = getenv("LIARA_ACCESS_KEY");
$secretKey = getenv("LIARA_SECRET_KEY");
$endpoint = getenv("LIARA_ENDPOINT");
$bucketName = getenv("LIARA_BUCKET_NAME");
// making connection using s3
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'endpoint' => $endpoint,
'credentials' => [
'key' => $accessKey,
'secret' => $secretKey,
],
]);
try {
// لیست کردن فایلهای درون سبد
$result = $s3->listObjectsV2([
'Bucket' => $bucketName
]);
// چک کردن آیا فایلی وجود دارد یا خیر
if (!empty($result['Contents'])) {
foreach ($result['Contents'] as $object) {
$objectKey = $object['Key'];
$command = $s3->getCommand('GetObject', [
'Bucket' => $bucketName,
'Key' => $objectKey
]);
$request = $s3->createPresignedRequest($command, '+1 hour');
// دریافت لینک موقت
$presignedUrl = (string)$request->getUri();
echo "Presigned URL for '$objectKey':
$presignedUrl
";
}
} else {
echo "The bucket is empty.
";
}
} catch (AwsException $e) {
echo $e->getMessage() . "
";
}
شما میتوانید برای کسب اطلاعات بیشتر، مثالها و مستندات این پکیج را مطالعه کنید.
متوجه شدم، برو گام بعدی!