PHP में S3 और क्लाउड स्टोरेज के साथ काम करना
Amazon S3 (Simple Storage Service) प्रोटोकॉल के अनुकूल क्लाउड ऑब्जेक्ट स्टोरेज, फ़ाइलों, इमेज, बैकअप और स्टैटिक कंटेंट को स्टोर करने के लिए डी-फैक्टो मानक बन गए हैं। PHP AWS S3, MinIO (self-hosted), DigitalOcean Spaces, Wasabi, Yandex Object Storage और अन्य स्टोरेज के साथ एकीकरण के लिए शक्तिशाली टूल प्रदान करता है। इस लेख में, हम आधिकारिक AWS SDK और वैकल्पिक लाइब्रेरी का उपयोग करके PHP में S3-संगत स्टोरेज के साथ काम करने का विस्तार से अध्ययन करेंगे।
S3 की मुख्य अवधारणाएँ
कोड पर जाने से पहले, S3 की प्रमुख अवधारणाओं को समझना महत्वपूर्ण है:
- बकेट (Bucket) — ऑब्जेक्ट (फ़ाइलों) के लिए कंटेनर। पब्लिक क्लाउड के लिए बकेट का नाम वैश्विक रूप से अद्वितीय होना चाहिए।
- ऑब्जेक्ट (Object) — फ़ाइल और उसके मेटाडेटा। प्रत्येक ऑब्जेक्ट का एक की (Key) होता है — बकेट के अंदर फ़ाइल का पथ।
- रीजन (Region) — स्टोरेज का भौगोलिक स्थान।
- क्रेडेंशियल्स (Credentials) — प्रमाणीकरण के लिए एक्सेस की आईडी (Access Key ID) और सीक्रेट की (Secret Access Key)।
- एंडपॉइंट (Endpoint) — स्टोरेज का URL (AWS के अलावा अन्य S3-संगत सेवाओं के लिए एंडपॉइंट अनिवार्य है)।
PHP के लिए AWS SDK इंस्टॉल करना
S3 के साथ काम करने के लिए आधिकारिक लाइब्रेरी aws/aws-sdk-php है। Composer के माध्यम से इंस्टॉल करें:
composer require aws/aws-sdk-php
MinIO या DigitalOcean Spaces के साथ काम करने के लिए किसी अतिरिक्त डिपेंडेंसी की आवश्यकता नहीं है — SDK कस्टम एंडपॉइंट को सपोर्ट करता है।
S3 क्लाइंट की बेसिक सेटिंग
AWS S3 से कनेक्ट करने के लिए क्लाइंट बनाएँ:
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'credentials' => [
'key' => 'YOUR_ACCESS_KEY',
'secret' => 'YOUR_SECRET_KEY',
],
]);
?>
MinIO (लोकल S3-संगत स्टोरेज) के लिए कॉन्फ़िगरेशन इस प्रकार होगा:
<?php
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'us-east-1', // MinIO रीजन को इग्नोर करता है
'endpoint' => 'http://localhost:9000',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'minioadmin',
'secret' => 'minioadmin',
],
]);
?>
use_path_style_endpoint पैरामीटर पर ध्यान दें — यह MinIO और कुछ गैर-AWS स्टोरेज के लिए आवश्यक है।
बकेट प्रबंधन
बकेट बनाना
<?php
try {
$result = $s3Client->createBucket([
'Bucket' => 'my-php-bucket',
]);
echo "बकेट बन गया: " . $result['Location'];
} catch (AwsException $e) {
echo "त्रुटि: " . $e->getMessage();
}
?>
बकेट की मौजूदगी जाँचना
<?php
$exists = $s3Client->doesBucketExist('my-php-bucket');
if ($exists) {
echo "बकेट मौजूद है";
} else {
echo "बकेट नहीं मिला";
}
?>
सभी बकेट की सूची
<?php
$buckets = $s3Client->listBuckets();
foreach ($buckets['Buckets'] as $bucket) {
echo $bucket['Name'] . " (बनाया गया: " . $bucket['CreationDate'] . ")<br>";
}
?>
S3 में फ़ाइलें अपलोड करना
स्ट्रिंग से अपलोड (टेक्स्ट डेटा)
<?php
try {
$result = $s3Client->putObject([
'Bucket' => 'my-php-bucket',
'Key' => 'hello.txt',
'Body' => 'Hello, S3 from PHP!',
]);
echo "फ़ाइल अपलोड हो गई। URL: " . $result['ObjectURL'];
} catch (AwsException $e) {
echo "अपलोड में त्रुटि: "