Flysystem क्या है और इसकी आवश्यकता क्यों है?
Flysystem PHP के लिए एक शक्तिशाली लाइब्रेरी है जो विभिन्न फ़ाइल सिस्टमों के साथ काम करने के लिए एक समान, एकीकृत इंटरफ़ेस प्रदान करती है। Frank de Jonge द्वारा विकसित, यह एक मूलभूत समस्या का समाधान करती है: वास्तविक प्रोजेक्ट्स में, कोड अक्सर किसी विशिष्ट फ़ाइल सिस्टम (लोकल डिस्क, FTP, Amazon S3, Dropbox आदि) से कसकर जुड़ा होता है। यदि कल फ़ाइलों को लोकल सर्वर से क्लाउड स्टोरेज पर ले जाना पड़े, तो कोड का एक बड़ा हिस्सा फिर से लिखना होगा।
Flysystem इस जटिलता को एब्सट्रैक्ट करता है। आप एक बार कोड लिखते हैं, एक समान API का उपयोग करते हैं, और एप्लिकेशन के बिज़नेस लॉजिक को बदले बिना फ़ाइल सिस्टम का "एडॉप्टर" (ड्राइवर) बदल सकते हैं। यह आपके कोड को बनाता है:
- लचीला — स्टोरेज के बीच आसानी से स्विच कर सकते हैं।
- परीक्षण योग्य — टेस्ट में "फ़ेक" फ़ाइल सिस्टम का उपयोग कर सकते हैं।
- पोर्टेबल — कोड विभिन्न वातावरणों पर समान रूप से काम करता है।
यह लाइब्रेरी Laravel (स्टोरेज डिस्क के आधार के रूप में), Symfony, Drupal और कई अन्य प्रसिद्ध प्रोजेक्ट्स में उपयोग की जाती है। Flysystem दर्जनों एडॉप्टर सपोर्ट करता है: Local, FTP/SFTP, Amazon S3, Google Cloud Storage, Azure Blob Storage, WebDAV, Dropbox और यहां तक कि एन्क्रिप्टेड और Zip आर्काइव भी।
इंस्टॉलेशन
Flysystem Composer के माध्यम से इंस्टॉल होता है। लोकल फ़ाइल सिस्टम के साथ बुनियादी काम के लिए दो पैकेज पर्याप्त हैं:
composer require league/flysystem
composer require league/flysystem-local
महत्वपूर्ण: संस्करण 3.x से, Flysystem अलग-अलग आर्किटेक्चर का उपयोग करता है। मुख्य पैकेज league/flysystem में केवल इंटरफ़ेस और बेस क्लासेस हैं। एडॉप्टर (ड्राइवर) अलग से इंस्टॉल किए जाते हैं। इससे आप केवल वही इंस्टॉल कर सकते हैं जो वास्तव में आवश्यक है।
अन्य फ़ाइल सिस्टम के लिए:
composer require league/flysystem-ftp— FTP/SFTP के लिएcomposer require league/flysystem-aws-s3-v3— Amazon S3 के लिएcomposer require league/flysystem-google-cloud-storage— Google Cloud के लिएcomposer require league/flysystem-memory— टेस्ट के लिए (वर्चुअल in-memory फ़ाइल सिस्टम)
त्वरित शुरुआत
एक सरल उदाहरण बनाते हैं: लोकल डिस्क पर फ़ाइल लिखना, पढ़ना और हटाना।
<?php
require 'vendor/autoload.php';
use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
// 1. लोकल फ़ाइल सिस्टम के लिए एडॉप्टर बनाएं
// रूट डायरेक्टरी निर्दिष्ट करें जहाँ फ़ाइलें स्टोर होंगी
$adapter = new LocalFilesystemAdapter(__DIR__ . '/storage');
// 2. Filesystem का इंस्टेंस बनाएं
$filesystem = new Filesystem($adapter);
// 3. फ़ाइल लिखें
$filesystem->write('hello.txt', 'नमस्ते, दुनिया!');
// 4. फ़ाइल पढ़ें
$content = $filesystem->read('hello.txt');
echo $content; // आउटपुट: नमस्ते, दुनिया!
// 5. जाँचें कि फ़ाइल मौजूद है या नहीं
if ($filesystem->fileExists('hello.txt')) {
echo "फ़ाइल मौजूद है!";
}
// 6. फ़ाइल हटाएं
$filesystem->delete('hello.txt');
// 7. जाँचें कि फ़ाइल अब मौजूद नहीं है
echo $filesystem->fileExists('hello.txt') ? 'हाँ' : 'नहीं'; // आउटपुट: नहीं
?>
ध्यान दें: हम file_put_contents(), fopen() या अन्य नेटिव PHP फ़ंक्शन का उपयोग नहीं कर रहे हैं। सारा कोड एक समान Filesystem इंटरफ़ेस के माध्यम से काम करता है।
मुख्य तरीके/फ़ंक्शन
Flysystem के प्रमुख तरीकों पर नज़र डालते हैं। सभी उदाहरण मानते हैं कि आपने पहले ही $filesystem ऑब्जेक्ट बना लिया है।
1. write() — नई फ़ाइल लिखना
क्या करता है: एक नई फ़ाइल बनाता है या मौजूदा फ़ाइल को ओवरराइट करता है।
पैरामीटर:
string $path— फ़ाइल का पथstring|resource $contents— फ़ाइल की सामग्री (स्ट्रिंग या रिसोर्स)array $config— वैकल्पिक सेटिंग्स (उदाहरण के लिए)
पुस्तकालय में भी
Go (Golang) के लिए डिपेंडेंसी इंजेक्शन कंटेनर — wire, dig, fx
C++ में परीक्षण: फ्रेमवर्क और टूल्स का अवलोकन (Google Test, Catch2, doctest)
Kotlin पर GraphQL: सर्वर-साइड डेवलपमेंट के लिए लाइब्रेरी और टूल्स का अवलोकन
जावास्क्रिप्ट (Node.js) के लिए ORM: Sequelize, TypeORM, Prisma की तुलना
Gradle Kotlin DSL: Kotlin में पूर्ण गाइड उदाहरण सहित