Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)
फाइलों को इंटरनेट पर ट्रांसफर करते समय कंप्रेस करने के क्या फायदे हैं। ज्यादातर मामलों में, कंप्रेस फॉर्मेट में सभी फाइलों को मिला कर कुल साइज एक अच्छे मार्जिन से नीचे आ जाता है। इसका मतलब है कि आप अपने कुछ बैंडविड्थ को बचा लेंगे, और यूजर्स को तेज डाउनलोड गति भी मिलेगी। एक बार जब यूज़र किसी फाइल को डाउनलोड कर लेता है, तो वह जब चाहे इसे डीकंप्रेस कर सकते हैं। संक्षेप में, कंप्रेशन आपके लिए और साथ ही साथ आपके विजिटर्स के लिए इंटरनेट पर फाइलों को सर्व करना बहुत आसान बना देता है।
एक फैक्टर जो आपको फाइलों को कंप्रेस करने से रोक सकता है या प्रोसेस को बहुत थका हुआ बना सकता है, वह यह है कि आप इसे मैनुअल रूप से करें। सौभाग्य से, PHP बहुत सारे एक्सटेंशन के साथ आता है जो विशेष रूप से फाइल कंप्रेस और डीकंप्रेस के साथ डील करते हैं। आप PHP में फाइलों को ऑटोमेटिक रूप से कंप्रेस करने के लिए इन एक्सटेंशन में उपलब्ध फंक्शन का उपयोग कर सकते हैं।
यह ट्यूटोरियल आपको सिखाएगा के PHP में ज़िप आर्काइव को या आर्काइव से ज़िप और अनज़िप (कंप्रेस और एक्सट्रेक्ट) फाइलों को कैसे करें। आप यह भी सीखेंगे कि कैसे आर्काइव को पहली बार एक्सट्रैक्ट किए बिना फाइलों को डिलीट करें या उनका नाम बदले।
PHP में इंडिविजुअल फाइल को कंप्रेस करना
PHP ZipArchive
क्लास में बहुत सारे प्रॉपर्टीज और मेथड्स हैं जो आपकी सभी फाइलों को कंप्रेस और डीकंप्रेस करने में आपकी सहायता कर सकते हैं।
इंडिविजुअल फाइलों को कंप्रेस करें
आप एक बार में अपने ज़िप आर्काइव में एक फाइल को जोड़ सकते हैं या एक ही बार में पूरी डायरेक्टरी जोड़ सकते हैं। किसी भी मामले में, पहला कदम एक नया ZipArchive
इंस्टेंस बनाना है और फिर open($filename, [$flags])
मेथड को कॉल करना है। यह मेथड पढ़ने, लिखने, या अन्य मोडिफिकेशंस के लिए एक नया ज़िप आर्काइव खोलेगी। वैकल्पिक $flag
पैरामीटर के लिए चार वैलिड वैल्यू है जो निर्धारित करती हैं कि विभिन्न स्थितियों को कैसे संभालना है।
-
ZipArchive::OVERWRITE
—यह फ्लैग निर्दिष्ट आर्काइव में मौजूद कंटेंट को ओवरराइड कर देगा यदि यह पहले से मौजूद हो। -
ZipArchive::CREATE
—यदि यह फ्लैग पहले से मौजूद नहीं है तो यह एक नया आर्काइव बना देगा -
ZipArchive::EXCL
—यदि आर्काइव पहले से मौजूद है, तो इस फ्लैग में एरर होगा। -
ZipArchive::CHECKCONS
—यह फ्लैग PHP को आर्काइव पर अतिरिक्त स्थिरता की जांच करने और असफल होने पर एरर देने के लिए कहेगा।
आप फाइल को खोलने में फेलियर होने पर रिटर्न किए गए एरर कोड के बारे में जानने के लिए डॉक्यूमेंटेशन में से इस मेथड की जांच कर सकते हैं। यदि ज़िप फाइल को सफलतापूर्वक खोला गया या बनाया गया हो, तो मेथड true
रिटर्न करेगा।
एक बार जब आप आर्काइव को सफलतापूर्वक खोल लेते हैं, तो आप आर्काइव में दिए गए पाथ से किसी भी फाइल को जोड़ने के लिए addFile($filename, $localname, $start, $length)
मेथड का उपयोग कर सकते हैं। $filename
पैरामीटर उस फ़ाइल का पाथ होता है जिसे आप आर्काइव में जोड़ना चाहते हैं। $localname
पैरामीटर का उपयोग आर्काइव में फाइल को स्टोर करने के उद्देश्य से नाम देने के लिए किया जाता है। हर बार जब आप अपने आर्काइव में एक नई फाइल जोड़ना चाहते हैं, तो आप addFile()
को कॉल कर सकते हैं।
आर्काइव में सभी आवश्यक फाइलों को जोड़ने के बाद, आप बस इसे बंद करने और परिवर्तनों को सेव करने के लिए close()
मेथड को कॉल कर सकते हैं।
मान लीजिए कि आपके पास एक वेबसाइट है, जो यूजर्स को उन्हें उपयोग करने के लिए लाइसेंसिंग की जानकारी के साथ अलग-अलग फोंट के लिए फोंट फाइलों को डाउनलोड करने की अनुमति देती है। इस तरह की फाइलें PHP का उपयोग करके ऑटोमेटिक आर्काइव का सही उदाहरण होगी। निम्नलिखित कोड आपको दिखाता है कि वास्तव में ऐसा कैसे कर सकते हैं।
<?php $zip = new ZipArchive(); $zip->open('compressed/font_files.zip', ZipArchive::CREATE); $zip->addFile('fonts/Monoton/Monoton-Regular.ttf', 'Monoton-Regular.ttf'); $zip->addFile('fonts/Monoton/OFL.txt', 'license.txt'); $zip->close(); ?>
हम एक ZipArchive
इंस्टेंस बनाकर शुरू करते हैं और फिर अपने आर्काइव को बनाने के लिए open()
मेथड का उपयोग करते हैं। addFile()
मैथर्ड हमारे वास्तविक .ttf फोन फाइल और .txt लाइसेंस फाइल को कलेक्शन में जोड़ता है।
आप को ध्यान देना चाहिए कि ओरिजिनल फ़ाइलें fonts/Monoton डायरेक्टरी के अंदर थी। हालांकि, PHP कोड इसे सीधे हमारे आर्काइव रूट के अंदर रख देता है। आप डायरेक्टरी स्ट्रक्चर और साथ ही आर्काइव में जाने वाली फाइलों के नाम बदल सकते हैं।
एक डायरेक्टरी से कई फाइल कंप्रेस करना
अपने आर्काइव में अलग-अलग फाइलों को जोड़ना थोड़ी देर के बाद आपको थका सकता है। उदाहरण के लिए, आप किसी डायरेक्टरी में सभी .pdf या .png फाइलों का एक आर्काइव बनाना चाह सकते हैं। addGlob($pattern, $flags, $options)
मेथड इस मामले में बहुत मददगार साबित होगा। इस मेथड का एकमात्र नुकसान यह है कि आप आर्काइव में व्यक्तिगत फाइलों की लोकेशन से नियंत्रण खो देते हैं। हालांकि आप अभी भी $options
पैरामीटर का उपयोग करके आर्काइव के अंदर डायरेक्टरी स्ट्रक्चर को प्रभावित कर सकते हैं। ऑप्शंस एक असोसिएटिव ऐरे के रूप में पास किया जाता है।
-
add_path
—वह वैल्यू जो आपadd_path
को असाइन करते हैं, वह आर्काइव के अंदर फाइल के लोकल पाथ पर प्रीफिक्स होती है। -
remove_path
—आपके द्वाराremove_path
को दी गई वैल्यू का उपयोग अलग-अलग फाइलों के पाथ से मेल खाने वाले प्रीफिक्स को निकालने के लिए किया जाता है जो आर्काइव में जोड़े जाते हैं। -
remove_all_path
—remove_all_path
की वैल्यू कोtrue
पर सेट करने से फाइल का पाथ इसके नाम के अलावा सब कुछ हटा देगा। इस स्थिति में, फाइलों को आर्काइव के रूट पर जोड़ा जाता है।
यह याद रखना महत्वपूर्ण है कि add_path
में निर्दिष्ट की गई वैल्यू को प्रीफिक्स करने से पहले पाथ को हटा दिया जाता है।
निम्नलिखित कोड स्निपेट addGlob()
को बनाएगा और इन सभी ऑप्शंस को स्पष्ट करेगा।
$zip = new ZipArchive(); $zip->open('compressed/user_archive.zip', ZipArchive::CREATE); $options = array('add_path' => 'light_wallpapers/', 'remove_all_path' => TRUE); $zip->addGlob('lights/*.jpg', 0, $options); $options = array('add_path' => 'font_files/', 'remove_all_path' => TRUE); $zip->addGlob('documents/*.ttf', 0, $options); $options = array('add_path' => 'pdf_books/', 'remove_all_path' => TRUE); $zip->addGlob('documents/*.pdf', 0, $options); $options = array('add_path' => 'images/', 'remove_all_path' => TRUE); $zip->addGlob('documents/*.{jpg, png}', GLOB_BRACE, $options); $zip->close();
हमेशा की तरह, हम एक ZipArchive
इंस्टेंस बनाकर शुरू करते हैं और फिर हमारे आर्काइव को बनाने के लिए open()
मेथड का उपयोग करते हैं। हम addGlob()
मेथड को कॉल करने से पहले हर बार $options
ऐरे में add_path
key के लिए अलग-अलग वैल्यू निर्दिष्ट करते हैं। इस तरह, हम एक बार में फाइलों के एक विशिष्ट सेट से निपट सकते हैं और तदनुसार आर्काइव ऑप्शन प्रदान कर सकते हैं।
पहले मामले में, हम lights डायरेक्टरी में सभी .jpg फाइलों पर इटरेट करते हैं और उन्हें आर्काइव में light_wallpapers डायरेक्टरी में रखते हैं। इसी तरह, हम documents डायरेक्टरी में सभी .ttf फाइलों पर इटरेट करते हैं और फिर उन्हें हमारे आर्काइव में font_files नाम के एक फोल्डर के अंदर डालते हैं। अंत में, हम सभी डाक्यूमेंट्स के अंदर .jpg और .png फाइलों में एक बार में इटरेट करते हैं और उन सभी को एक साथ images डायरेक्टरी में डालते हैं।
जैसा कि आप देख सकते हैं $options
पैरामीटर में वैल्यूज आर्काइव के अंदर कंटेंट को व्यवस्थित करने में उपयोगी है।
आर्काइव से कंटेंट को एक्सट्रैक्ट करना
ZipArchive
क्लास में आर्काइव के कंटेंट निकालने के लिए मेथड है, जिसे extractTo($destination, $entires)
कहा जाता है। आप इसका उपयोग या तो आर्काइव के अंदर या कुछ विशिष्ट फाइलों को एक्सट्रैक्ट करने के लिए कर सकते हैं। $entires
के पेरामीटर का उपयोग किसी सिंगल फाइल नाम को निर्दिष्ट करने के लिए किया जा सकता है जिसे एक्सट्रैक्ट किया जाना है, या आप इसका उपयोग फाइलों के एक ऐरे को पास करने के लिए भी कर सकते हैं।
याद रखने के लिए एक महत्वपूर्ण बिंदु यह है कि आपको इसे एक्सट्रैक्ट करने के लिए आर्काइव के अंदर फाइल के उचित पाथ को निर्दिष्ट करने की आवश्यकता है। उदाहरण के लिए, हमने पिछले सेक्शन में AlegreyaSans-Light.ttf नाम का एक फोन फाइल में स्टोर किया। फाइल को font_files नाम की डायरेक्टरी के अंदर आर्काइव में स्टोर किया गया। इसका मतलब यह है कि $entries
पैरामीटर में आपको जिस पाथ को निर्देश करने की आवश्यकता है वह font_files/AlegreyaSans-Light.ttf होगा और केवल AlegreyaSans-Light.ttf नहीं होगा।
इलेक्शन प्रोसेस के दौरान डायरेक्टरी और फाइल स्ट्रक्चर को प्रिजर्व किया जाएगा, और फाइलें उनके संबंधित डायरेक्टरी में एक्सट्रैक्ट की जाएंगी।
<?php $zip = new ZipArchive(); $zip->open('compressed/user_archive.zip', ZipArchive::CREATE); $zip->extractTo('uncompressed/', 'font_files/AlegreyaSans-Light.ttf'); $zip->close(); ?>
यदि आप दूसरे पैरामीटर को छोड़ देते हैं, तो यह मेथड आर्काइव में सारी फाइलों को एक्सट्रैक्ट कर देगा।
आर्काइव पर और अधिक नियंत्रण प्राप्त करें
ZipArchive
क्लास में बहुत सारे अन्य मेथड्स और प्रॉपर्टीज है जो आपको इसके सभी कंटेंट को एक्सट्रैक्ट करने से पहले आर्काइव के बारे में अधिक जानकारी प्राप्त करने में मदद करते हैं।
आप count()
मेथड का उपयोग करके आर्काइव में फाइलों की संख्या गिन सकते हैं। दूसरा ऑप्शन हो सकता है कि numFiles
प्रॉपर्टी का उपयोग करें। उनका उपयोग और कई में सभी फाइलों पर इटरेट करने के लिए किया जा सकता है और केवल उनको एक्सट्रेक्ट कर सकते हैं जिनकी आपको जरूरत है—या आप उनके साथ कुछ और कर सकते हैं, जैसे कि उन्हें आर्काइव से रिमूव करना।
निम्नलिखित उदाहरण में, हम आर्काइव में सभी फाइलों को डिलीट कर रहे हैं, जिसमें Italic शब्द मौजूद है। सभी फाइलों को हटाने के लिए उसी प्रकार के कोड का उपयोग किया जा सकता है जिसमें बताया गया शब्द शामिल नहीं होता है। आप इन फाइलों पर इटरेट भी कर सकते हैं और किसी विशेष शब्द को किसी अन्य चीज से बदल सकते हैं।
<?php $zip = new ZipArchive(); $zip->open('compressed/user_archive.zip', ZipArchive::CREATE); $file_count = $zip->count(); for($i = 0; $i < $file_count; $i++) { $file_name = $zip->getNameIndex($i); if(stripos($file_name, 'Italic') !== false) { $zip->deleteName($file_name); } } $zip->close(); ?>
ऊपर दिए गए कोड में, हम एक इंडिविजुअल फाइल को हटाने के लिए deleteName()
का उपयोग कर रहे हैं। हालांकि, आप इसका उपयोग पूरी डायरेक्ट्री को हटाने के लिए भी कर सकते हैं।
आर्काइव में किसी फाइल का नाम बदलने के लिए इसी प्रकार के एक फंक्शन renameName($oldname, $newname)
का प्रयोग किया जा सकता है। यदि $newname
नाम की फाइल पहले से मौजूद है आपको एक एरर मिलेगा।
अंतिम विचार
हमने ZipArchive
क्लास के बहुत उपयोगी मेथड्स का एक समूह कवर किया है जिससे PHP में ऑटोमेटेड कंप्रेशन और एक्सट्रैक्शन करना बेहद ही आसान काम है। अब आप इंडिविजुअल फाइलों या उनके ग्रुप को एक बार में कंप्रेस करने योग्य हैं। इसी प्रकार, आप अन्य कंटेंट को प्रभावित किए बिना आर्काइव से किसी विशेष फाइल को एक्सट्रैक्ट करने में भी सक्षम होने चाहिए।
count()
और numFiles
कि मदद से, आपको इंडिविजुअल फाइलों पर अधिक नियंत्रण मिलेगा, और उनका नाम बदलना या डिलीट करना सुपर आसान होगा। आपको ऐसे और फंक्शन के बारे में पढ़ने के लिए कम से कम एक बार डॉक्यूमेंटेशन के अंदर जाना चाहिए।
Envato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post