Advertisement
  1. Code
  2. CodeIgniter

कैसे कोडइग्नाइटर में फ़ाइलें ज़िप और अनझिप करने के लिए

Scroll to top
Read Time: 16 min

Hindi (हिंदी) translation by Shubham Sharma (you can also view the original English article)

इस ट्यूटोरियल की पहली छमाही में अलग-अलग तरीके बताए गए हैं जो आप इन-इन कोडिग्नेटर एपीआई का उपयोग कर एक ज़िप फ़ाइल बना सकते हैं। हम देखेंगे कि सर्वर पर ज़िप फ़ाइलों को कैसे बना और सहेजना है और आप उपयोगकर्ताओं को भी डाउनलोड करने के लिए उन्हें कैसे उपलब्ध करा सकते हैं।

दूसरी छमाही में यह चर्चा शामिल है कि आप फ़ाइल कैसे खोल सकते हैं। यह प्रदर्शित करने के लिए, हम एक कस्टम पृष्ठ का निर्माण करेंगे जो उपयोगकर्ताओं को ज़िप फ़ाइल अपलोड करने की अनुमति देता है जो सफल फ़ाइल अपलोड करने के बाद सर्वर पर अवतरण किये जाएंगे। वांछित कार्यक्षमता प्राप्त करने के लिए, ज़िपआर्काइव पीएचपी(PHP) एक्सटेंशन हमारे बचाव के लिए आता है!

इससे पहले कि हम आगे बढ़ें और वास्तव में विकास सामग्री में गोता लगा लें, मैं उन फ़ाइलों की सूची दूंगा जो हम इस ट्यूटोरियल के दौरान विकसित करने जा रहे हैं:

  • application/controllers/Zip.php: यह एक नियंत्रक फ़ाइल है जो विभिन्न तरीकों को दर्शाती है जो आप ज़िप फ़ाइल बना सकते हैं।
  • application/controllers/Unzip.php: यह एक नियंत्रक फ़ाइल है जिसमें उपयोगकर्ता द्वारा अपलोड की गई फ़ाइल को खोलने के लिए उपयोग किया गया कोड शामिल होता है।
  • application/views/file_upload_form.php:यह दृश्य फ़ाइल है जो सुंदर मूल एचटीएमएल(HTML) फ़ाइल अपलोड फ़ॉर्म कोड रखती है।
  • application/views/file_upload_result.php: यह एक दृश्य फ़ाइल है जो उपयोगकर्ता द्वारा अपलोड की गई फ़ाइल का परिणाम दिखाती है; मूल रूप से यह आपको बताता है कि फ़ाइल को सफलतापूर्वक अनझिप किया गया था
  • application/libraries/Extractor.php: यह फाइल कोडइग्नाइटर में कस्टम लाइब्रेरी की अवधारणा को दर्शाती है।

जगह में सब कुछ के साथ, हम अपने अगले अनुभाग पर जाने के लिए तैयार हैं!

ज़िप फ़ाइलें कैसे बनाए?

आगे बढ़ो और एक फ़ाइल बनाएं application/controllers/Zip.php निम्नलिखित सामग्री के साथ।

1
<?php
2
// application/controllers/Zip.php

3
defined('BASEPATH') OR exit('No direct script access allowed');
4
5
class Zip extends CI_Controller {
6
    private function _load_zip_lib()
7
  {
8
		$this->load->library('zip');
9
	}
10
	
11
	private function _archieve_and_download($filename)
12
	{
13
		// create zip file on server

14
		$this->zip->archive(FCPATH.'/uploads/'.$filename);
15
		
16
		// prompt user to download the zip file

17
		$this->zip->download($filename);
18
	}
19
20
	public function data()
21
	{
22
		$this->_load_zip_lib();
23
		
24
		$this->zip->add_data('name.txt', 'Sajal Soni');
25
		$this->zip->add_data('profile.txt', 'Web Developer');
26
		
27
		$this->_archieve_and_download('my_info.zip');
28
	}
29
30
	public function data_array()
31
	{
32
		$this->_load_zip_lib();
33
		
34
		$files = array(
35
				'name.txt' => 'Sajal Soni',
36
				'profile.txt' => 'Web Developer'
37
		);
38
		
39
		$this->zip->add_data($files);
40
		
41
		$this->_archieve_and_download('my_info.zip');
42
	}
43
44
	public function data_with_subdirs()
45
	{
46
		$this->_load_zip_lib();
47
		
48
		$this->zip->add_data('info/name.txt', 'Sajal Soni');
49
		$this->zip->add_data('info/profile.txt', 'Web Developer');
50
		
51
		$this->_archieve_and_download('my_info.zip');
52
	}
53
54
	public function files()
55
	{
56
		$this->_load_zip_lib();
57
		
58
		// pass second argument as TRUE if want to preserve dir structure

59
		$this->zip->read_file(FCPATH.'/uploads/1.jpg');
60
		$this->zip->read_file(FCPATH.'/uploads/2.jpg');
61
		
62
		$this->_archieve_and_download('images.zip');
63
	}
64
	
65
	public function dir()
66
	{
67
		$this->_load_zip_lib();
68
		
69
		// pass second argument as FALSE if want to ignore preceding directories

70
		$this->zip->read_dir(FCPATH.'/uploads/images/');
71
		
72
		$this->_archieve_and_download('dir_images.zip');
73
	}
74
}

यह एक बहुत ही मानक नियंत्रक फ़ाइल है जिसे आप पहले से परिचित हैं।इसमें कई मेथड हैं, और उनमें से प्रत्येक एक ज़िप फ़ाइल बनाने का एक अलग तरीका दिखाता है।

इसके अलावा, यह दो निजी मेथड को प्रदान करता है, _load_zip_lib और _archieve_and_download, कि बाकी मेथड से कहा जाता है। बेशक, आपको इन मेथड को कार्यान्वित करने की ज़रूरत नहीं है, लेकिन हमने अपने कोड को फिर से संशोधित किया है ताकि आप अन्य विधियों में उसी कोड को दोहराए न जाएं।चलो पहले इन दो मेथड के माध्यम से जाओ।

यहाँ विधि क्या है _load_zip_lib तरह दिखता है।

1
private function _load_zip_lib()
2
{
3
    $this->load->library('zip');
4
}

यह कोडइग्नाइटर ढांचे के अंतर्निहित ज़िप लाइब्रेरी को लोड करता है ताकि आप पूरे कोड में उस पुस्तकालय की सुविधाओं का उपयोग कर सकें। अब, आप $this->zip कन्वेंशन के साथ ज़िप लाइब्रेरी तक पहुंच सकते हैं।

इसके बाद, वहाँ है _archieve_and_download मेथड।

1
private function _archieve_and_download($filename)
2
{
3
    // create zip file on server

4
    $this->zip->archive(FCPATH.'/uploads/'.$filename);
5
        
6
    // prompt user to download the zip file

7
    $this->zip->download($filename);
8
}

जैसा कि हमने ज़िप लाइब्रेरी को लोड किया है, आप इसके द्वारा प्रदान किए गए तरीकों का उपयोग कर सकते हैं। संग्रह विधि(मेथड) आपको पहला तर्क के रूप में प्रदान किए गए पथ पर एक ज़िप फ़ाइल बनाने की अनुमति देता है। दूसरी ओर, डाउनलोड पद्धति उपयोगकर्ता को फ़ाइल डाउनलोड के लिए संकेत देती है।

यदि आप हमारी ज़िप फ़ाइल की सामग्री के बारे में सोच रहे हैं तो चिंता न करें, क्योंकि हम एक क्षण में देखेंगे।

सब कुछ जगह में है, इसलिए हम रोल करने के लिए तैयार हैं!

आइए हम data मेथड(तरीका) का कोड पकड़ लेते हैं। यह विधि आपको दिखाती है कि फ़्लाई पर फाइल कैसे बनाएं और उन्हें ज़िप फ़ाइल में आवरण करे।

1
public function data()
2
{
3
    $this->_load_zip_lib();
4
        
5
    $this->zip->add_data('name.txt', 'Sajal Soni');
6
    $this->zip->add_data('profile.txt', 'Web Developer');
7
        
8
    $this->_archieve_and_download('my_info.zip');
9
}

आरंभ करने के लिए, हमने _load_zip_lib मेथड(विधि) को कहा है जो ज़िप लाइब्रेरी को लोड करता है। इसके बाद, हमने ज़िप कोड के add_data मेथड(विधि) का उपयोग किया है जो आपको एक फ़ाइल बनाने और एक ही समय में तत्व के साथ भरने की अनुमति देता है! बेशक, यह भी संग्रह में जोड़ा गया है!

पहली तर्क फ़ाइल का नाम होना चाहिए, और दूसरी तर्क उस फ़ाइल को रखती है जो फाइल में जाते हैं।

जैसा कि आप देख सकते हैं, हमने दो फाइलें जोड़ी हैं, name.txt और profile.txt, कुछ डेमो तत्व के साथ। अंत में, हम कहते हैं _archieve_and_download के साथ my_info.zip उस मेथड(विधि) के तर्क के रूप में। यह क्या करता है?

  • यह आपके अपलोड निर्देशिका के अंतर्गत एक ज़िप फ़ाइल my_info.zip बनाती है।
  • यह फ़ाइल डाउनलोड करने के लिए भी एक उपयोगकर्ता को संकेत देता है, और जिस नाम के साथ फ़ाइल सहेजी जाएगी वह my_info.zip है।

इसलिए सुनिश्चित करें कि आपने अपनी साइट की जड़ में एक uploads निर्देशिका बनाई है। इसके अलावा, इसे वेब सर्वर उपयोगकर्ता द्वारा लिखने योग्य बनाते हैं। अब, आगे बढ़ें और कार्रवाई में चीजें देखने के लिए “http://my-codeingiter-site/zip/data” चलाएं!

अगर आपको कोई समस्या है, तो आप मुझसे टिप्पणी कर सकते हैं!

अगला, वहाँ data_array विधि है।

1
public function data_array()
2
{
3
    $this->_load_zip_lib();
4
    
5
    $files = array(
6
        'name.txt' => 'Sajal Soni',
7
        'profile.txt' => 'Web Developer'
8
    );
9
    
10
    $this->zip->add_data($files);
11
    
12
    $this->_archieve_and_download('my_info.zip');
13
}

यह मेथड(विधि) पिछले एक के समान है जिसे हमने अभी चर्चा की है, सिवाय इसके कि हमने व्यक्तिगत फाइलों के बजाय add_data मेथड(विधि) में फ़ाइलों की एक सरणी प्रदान की है!

आगे, आइए data_with_subdirs मेथड(विधि) के कोड को पकड़ो।

1
public function data_with_subdirs()
2
{
3
    $this->_load_zip_lib();
4
        
5
    $this->zip->add_data('info/name.txt', 'Sajal Soni');
6
    $this->zip->add_data('info/profile.txt', 'Web Developer');
7
        
8
    $this->_archieve_and_download('my_info.zip');
9
}

यदि आप अपनी फाइल कुछ निर्देशिकाओं में व्यवस्थित करना चाहते हैं, तो add_data मेथड(विधि)आपको उन्हें भी बनाने की अनुमति देती है। उपरोक्त मेथड(विधि) का परिणामस्वरूप आउटपुट अलग होगा, इसके अलावा name.txt और profile.txt फाइलें info निर्देशिका में रखी जाएंगी।

यद्यपि add_data विधि एक अच्छी सुविधा प्रदान करती है जो आपको फ़्लाई पर फाइल बनाने की अनुमति देती है, न कि अधिक बार आपको सर्वर पर मौजूदा फाइलों को जंप करने की आवश्यकता होगी।वैसे भी, यह हमारे अगले कुछ मेथड(तरीका) का विषय है।

आइए देखें कि हमारी अगली files की मेथड(विधि) कैसा दिखती है यह uploads निर्देशिका के तहत फ़ाइलों का एक ज़िप बना देगा।

1
public function files()
2
{
3
    $this->_load_zip_lib();
4
        
5
    // pass second argument as TRUE if want to preserve dir structure

6
    $this->zip->read_file(FCPATH.'/uploads/1.jpg');
7
    $this->zip->read_file(FCPATH.'/uploads/2.jpg');
8
        
9
    $this->_archieve_and_download('images.zip');
10
}

Read_file मेथड(विधि) का उद्देश्य सर्वर पर मौजूदा फ़ाइल को पढ़ने और उसे संग्रह में जोड़ना है। जैसे आप देख सकते हैं, हमने दो फाइलें 1.jpg और 2.jpg को संग्रह में जोड़ दिया है। बेशक, उन दो फ़ाइलों को आपकी साइट की जड़ में uploads निर्देशिका के अंतर्गत मौजूद होना चाहिए।

यदि आप read_file विधि की दूसरी तर्क के रूप में TRUE पास करते हैं, तो परिणामी ज़िप फ़ाइल में सही निर्देशिका संरचना को संरक्षित रखता है जिसमें फाइल को रखा गया था।

Http://my-codeingiter-site/zip/files चलाने का प्रयास करें और परिणाम की जांच करें!

इस सेगमेंट में आखिरी मेथड(विधि) dir मेथड(विधि) है। यह संपूर्ण निर्देशिका का एक ज़िप संग्रह बना देगा।

1
public function dir()
2
{
3
    $this->_load_zip_lib();
4
        
5
    // pass second argument as FALSE if want to ignore preceding directories

6
    $this->zip->read_dir(FCPATH.'/uploads/images/');
7
        
8
    $this->_archieve_and_download('dir_images.zip');
9
}

आप read_dir मेथड(विधि) का उपयोग कर सकते हैं यदि आप कुछ फ़ाइलों के बजाय संपूर्ण निर्देशिका का ज़िप संग्रह बनाना चाहते हैं। उपरोक्त हमारे उदाहरण में, यह एक dir_images.zip फाइल बनायेगा जिसमें सभी फाइलें  /uploads/images/ निर्देशिका के अंतर्गत हैं।

यहां नोट करने के लिए महत्वपूर्ण बात यह है कि पूरी निर्देशिका संरचना को ज़िप फ़ाइल में डिफ़ॉल्ट रूप से संरक्षित किया जाएगा। लेकिन, अगर आप इसे अनदेखा करना चाहते हैं, तो FALSE को read_dir मेथड(विधि) का दूसरा तर्क बताएं। उस स्थिति में, यह केवल ज़िप फ़ाइल में एक images निर्देशिका बनाएगा।

तो यह हमारी कहानी को समाप्त करता है कि अंतर्निहित ज़िप क्लास द्वारा प्रदान की जाने वाली विभिन्न तरीकों का उपयोग करते हुए ज़िप संग्रह बनाना है।

फ़ाइलें को कैसे खोले?

दुर्भाग्य से, वहाँ कोई अंतर्निहित कोडइग्नाइटर संग्रह है जो हमें ज़िप संग्रह को अनझिप करने की अनुमति देता है। लेकिन ज़िप अरक्रिव पीएचपी(PHP) एक्सटेंशन उसे एक हवा बनाता है, क्योंकि हम एक पल में देखेंगे।

हम एक बहुत आसान उदाहरण बना देंगे जो दर्शाता है कि उपयोगकर्ता द्वारा अपलोड की गई फ़ाइलों को कैसे खोलना है।

आगे बढ़ो और निम्न सामग्री के साथ एक फ़ाइल application/controllers/Unzip.php बनाएँ।

1
<?php
2
// application/controllers/Unzip.php

3
defined('BASEPATH') OR exit('No direct script access allowed');
4
5
class Unzip extends CI_Controller {
6
    public function __construct()
7
	{
8
		parent::__construct();
9
		$this->load->helper(array('form', 'url'));
10
	}
11
12
	public function index()
13
	{
14
		$this->load->view('file_upload_form');
15
	}
16
17
	public function upload()
18
	{
19
		$config['upload_path']          = './uploads/';
20
		$config['allowed_types']        = 'zip';
21
		
22
		$this->load->library('upload', $config);
23
		
24
		if ( ! $this->upload->do_upload('zip_file'))
25
		{
26
			$params = array('error' => $this->upload->display_errors());
27
		}
28
		else
29
		{
30
			$data = array('upload_data' => $this->upload->data());
31
			$full_path = $data['upload_data']['full_path'];
32
			
33
			/**** without library ****/
34
			$zip = new ZipArchive;
35
36
			if ($zip->open($full_path) === TRUE) 
37
			{
38
				$zip->extractTo(FCPATH.'/uploads/');
39
				$zip->close();
40
			}
41
42
			$params = array('success' => 'Extracted successfully!');
43
		}
44
		
45
		$this->load->view('file_upload_result', $params);
46
	}
47
}

चलो भी हमारे दृश्य टेम्पलेट्स बनाएँ, और फिर हम देखेंगे कि यह कैसे पूरी तरह से काम करता है।

निम्नलिखित सामग्री के साथ एक दृश्य टेम्पलेट फ़ाइल बनाएँ application/views/file_upload_form.php ।

1
<?php
2
// application/views/file_upload_form.php

3
defined('BASEPATH') OR exit('No direct script access allowed');
4
?><!DOCTYPE html>
5
<html lang="en">
6
<head>
7
    <meta charset="utf-8">
8
	<title>Welcome to CodeIgniter</title>
9
10
	<style type="text/css">
11
12
	::selection { background-color: #E13300; color: white; }
13
	::-moz-selection { background-color: #E13300; color: white; }
14
15
	body {
16
		background-color: #fff;
17
		margin: 40px;
18
		font: 13px/20px normal Helvetica, Arial, sans-serif;
19
		color: #4F5155;
20
	}
21
22
	a {
23
		color: #003399;
24
		background-color: transparent;
25
		font-weight: normal;
26
	}
27
28
	h1 {
29
		color: #444;
30
		background-color: transparent;
31
		border-bottom: 1px solid #D0D0D0;
32
		font-size: 19px;
33
		font-weight: normal;
34
		margin: 0 0 14px 0;
35
		padding: 14px 15px 10px 15px;
36
	}
37
38
	code {
39
		font-family: Consolas, Monaco, Courier New, Courier, monospace;
40
		font-size: 12px;
41
		background-color: #f9f9f9;
42
		border: 1px solid #D0D0D0;
43
		color: #002166;
44
		display: block;
45
		margin: 14px 0 14px 0;
46
		padding: 12px 10px 12px 10px;
47
	}
48
49
	#body {
50
		margin: 0 15px 0 15px;
51
	}
52
53
	p.footer {
54
		text-align: right;
55
		font-size: 11px;
56
		border-top: 1px solid #D0D0D0;
57
		line-height: 32px;
58
		padding: 0 10px 0 10px;
59
		margin: 20px 0 0 0;
60
	}
61
62
	#container {
63
		margin: 10px;
64
		border: 1px solid #D0D0D0;
65
		box-shadow: 0 0 8px #D0D0D0;
66
	}
67
	
68
	div {
69
	  padding: 10px;
70
	}
71
	
72
	.error {
73
	  color: #F00;
74
	}
75
	
76
	.success {
77
	  color: #00F;
78
	}
79
	</style>
80
</head>
81
<body>
82
83
<div id="container">
84
	<h1>Upload File</h1>
85
86
	<div id="body">
87
	  <div class="success"><?php if (isset($success)) {echo $success;}?></div>
88
	  <div class="error"><?php if (isset($error)) {echo $error;}?></div>
89
90
		<?php echo form_open_multipart('unzip/upload');?>
91
		  <div>
92
			  <input name="zip_file" type="file"/>
93
			</div>
94
			<div>
95
			  <input type="submit" value="Upload Zip File" />
96
			</div>
97
		</form>
98
	</div>
99
</div>
100
101
</body>
102
</html>

यह एक सरल फ़ाइल अपलोड फॉर्म बनाता है ताकि उपयोगकर्ता ज़िप फ़ाइल अपलोड कर सके। कृपया ध्यान दें कि मैंने सरल के लिए इसे न्यूनतम तक रखा है।

इसके बाद, चलो एक दृश्य टेम्पलेट फ़ाइल बनाएँ application/views/file_upload_result.php ।

1
<?php
2
// application/views/file_upload_result.php

3
defined('BASEPATH') OR exit('No direct script access allowed');
4
?><!DOCTYPE html>
5
<html lang="en">
6
<head>
7
    <meta charset="utf-8">
8
	<title>Welcome to CodeIgniter</title>
9
10
	<style type="text/css">
11
12
	::selection { background-color: #E13300; color: white; }
13
	::-moz-selection { background-color: #E13300; color: white; }
14
15
	body {
16
		background-color: #fff;
17
		margin: 40px;
18
		font: 13px/20px normal Helvetica, Arial, sans-serif;
19
		color: #4F5155;
20
	}
21
22
	a {
23
		color: #003399;
24
		background-color: transparent;
25
		font-weight: normal;
26
	}
27
28
	h1 {
29
		color: #444;
30
		background-color: transparent;
31
		border-bottom: 1px solid #D0D0D0;
32
		font-size: 19px;
33
		font-weight: normal;
34
		margin: 0 0 14px 0;
35
		padding: 14px 15px 10px 15px;
36
	}
37
38
	code {
39
		font-family: Consolas, Monaco, Courier New, Courier, monospace;
40
		font-size: 12px;
41
		background-color: #f9f9f9;
42
		border: 1px solid #D0D0D0;
43
		color: #002166;
44
		display: block;
45
		margin: 14px 0 14px 0;
46
		padding: 12px 10px 12px 10px;
47
	}
48
49
	#body {
50
		margin: 0 15px 0 15px;
51
	}
52
53
	p.footer {
54
		text-align: right;
55
		font-size: 11px;
56
		border-top: 1px solid #D0D0D0;
57
		line-height: 32px;
58
		padding: 0 10px 0 10px;
59
		margin: 20px 0 0 0;
60
	}
61
62
	#container {
63
		margin: 10px;
64
		border: 1px solid #D0D0D0;
65
		box-shadow: 0 0 8px #D0D0D0;
66
	}
67
	
68
	div {
69
	  padding: 10px;
70
	}
71
	
72
	.error {
73
	  color: #F00;
74
	}
75
	
76
	.success {
77
	  color: #00F;
78
	}
79
	</style>
80
</head>
81
<body>
82
83
<div id="container">
84
	<h1>Upload File Result</h1>
85
86
	<div id="body">
87
	  <div class="success"><?php if (isset($success)) {echo $success;}?></div>
88
	  <div class="error"><?php if (isset($error)) {echo $error;}?></div>
89
	  <a href="<?php echo site_url('unzip/index'); ?>">&lt;&lt; Back to File Uploader</a>
90
	</div>
91
</div>
92
93
</body>
94
</html>

फाइल को अपलोड और निकाला जाने के बाद, उपरोक्त टेम्पलेट को उपयोगकर्ता दिखाया जाएगा।

अब, हमारे नियंत्रक पर वापस जाएं और प्रत्येक मेथड(विधि) के माध्यम से चलें।

हमारे नियंत्रक के निर्माता में, हमने बिल्ट-इन फॉर्म और यूआरएल कोड इग्नेटर सहायकों को लोड किया है, ताकि हम form_open_multipart, site_url और जैसे जैसे सहायक कार्यों का उपयोग कर सकें।

इसके बाद, आइए indx मेथड(विधि) को देखें।

1
public function index()
2
{
3
    $this->load->view('file_upload_form');
4
}

क्या यह किसी भी स्पष्टीकरण की आवश्यकता है?यह दृश्य को  file_upload_form कहते है और पृष्ठ को प्रस्तुत करता है।इसलिए, जब आप http://my-codeingiter-site/unzip, तक पहुँचते हैं, तो नीचे दिखाए गए अनुसार एक सरल फ़ाइल अपलोड फ़ॉर्म प्रदर्शित करना चाहिए।

साथ ही, ध्यान दें कि हमारे फॉर्म की कार्रवाई unzip/upload होती है जहां डेटा पोस्ट किया जाएगा। हमने बहुखण्डीय फ़ॉर्म टैग बनाने के लिए form_open_multipart सहायक का उपयोग किया है!

Upload PageUpload PageUpload Page

इसके बाद, हमें upload एक्शन मेथड(विधि) को कार्यान्वित करने की आवश्यकता है जो फाइल अपलोड और निष्कर्षण सामान को संभाल लेंगे। Unzip.php नियंत्रक से उस कोड को पकड़े।

1
public function upload()
2
{
3
    $config['upload_path']          = './uploads/';
4
    $config['allowed_types']        = 'zip';
5
        
6
    $this->load->library('upload', $config);
7
        
8
    if ( ! $this->upload->do_upload('zip_file'))
9
    {
10
        $params = array('error' => $this->upload->display_errors());
11
    }
12
    else
13
    {
14
        $data = array('upload_data' => $this->upload->data());
15
        $full_path = $data['upload_data']['full_path'];
16
            
17
        $zip = new ZipArchive;
18
19
        if ($zip->open($full_path) === TRUE)
20
        {
21
            $zip->extractTo(FCPATH.'/uploads/');
22
            $zip->close();
23
        }
24
25
        $params = array('success' => 'Extracted successfully!');
26
    }
27
        
28
    $this->load->view('file_upload_result', $params);
29
}

यदि आप कोडइग्नेटर में फाइल अपलोड से परिचित हैं, तो कोड आपको विदेशी नहीं दिखना चाहिए।उन लोगों के लिए जो परिचित नहीं हैं, चिंता करने की कोई बात नहीं है, क्योंकि कोडइग्नेटर में अंतर्निर्मित अपलोड एपीआई(APIs) एक आसान काम बना देती हैं।

निम्नलिखित कोड अपलोड पुस्तकालय को कुछ प्रारंभिक कॉन्फ़िगरेशन के साथ लोड करता है जो $config array variable प्रदान किया जाता है।

1
$this->load->library('upload', $config);

हमने इसे कॉन्फ़िगर किया है ताकि अपलोड की गई फ़ाइल एप्लिकेशन की जड़ में uploads निर्देशिका के अंतर्गत रखी जाएगी और उपयोगकर्ता को केवल ज़िप फ़ाइलें अपलोड करने की अनुमति होगी।

इसके बाद, हमने जांच की है कि फाइल अपलोड विफल हो गया है, और अगर ऐसा है तो हम एक सहायक त्रुटि संदेश लाएंगे और इसे $params में असाइन करेंगे ताकि हम इसे टेम्पलेट में प्रदर्शित कर सकें।

1
$params = array('error' => $this->upload->display_errors());

मामले में, फ़ाइल सफलतापूर्वक अपलोड की गई है, इसलिए अगले कदम को अपलोड की गई फ़ाइल का फ़ाइल पथ मिल जाएगा।

1
$data = array('upload_data' => $this->upload->data());
2
$full_path = $data['upload_data']['full_path'];

अंत में, हम एक ज़िपऑर्चिविज़ ऑब्जेक्ट इन्स्तांत करते हैं, हमारी ज़िप फ़ाइल खोलें, और uploads निर्देशिका में इसे निकालें।

1
$zip = new ZipArchive;
2
3
if ($zip->open($full_path) === TRUE)
4
{
5
    $zip->extractTo(FCPATH.'/uploads/');
6
    $zip->close();
7
}

क्या यह सरल नहीं था?

केवल एक चीज जिसे हम साथ छोड़ रहे हैं उसे file_upload_result दृश्य कहना है, और यहां यह दिखाना चाहिए कि यह कैसा दिखना चाहिए!

Upload Result PageUpload Result PageUpload Result Page

तो, यह कहानी का दूसरा हिस्सा है!

लाइब्रेरी में अनजिपिंग कोड को रिफैक्टर करें

आप यह देख पाएंगे कि upload मेथड(पद्धति) में अपलोड किए गए फ़ाइल को निकालने वाला ज़िपरर्चिव कोड है।यदि आपको उस कोड को कई स्थानों में उपयोग करने की आवश्यकता हो तो क्या होगा? हो सकता है कि आपको कोड को आवश्यकतानुसार कॉपी और पेस्ट करना पड़े।

दरअसल, यह एक बेहतर तरीका है जिसमें कोडइग्नेटर आपको कोड को केंद्रीकृत करने की अनुमति देता है जो पूरे आवेदन में उपयोग किया जा सकता है। आप कस्टम लाइब्रेरी बना सकते हैं।

आगे बढ़ो और निम्नलिखित तत्व के साथ एक फ़ाइल बनाएं application/libraries/Extractor.php ।

1
<?php
2
// application/libraries/Extractor.php

3
class Extractor {
4
    private $CI = NULL;
5
    private $zip = NULL;
6
	
7
    public function __construct($params = array())
8
    {
9
        $this->CI =& get_instance();
10
        $this->zip = new ZipArchive;
11
    }
12
	
13
    public function extract($source_file, $dest_dir)
14
    {
15
        if ($this->zip->open($source_file) === TRUE) 
16
		{
17
			$this->zip->extractTo($dest_dir);
18
			$this->zip->close();
19
        }
20
    }
21
}

अब, आगे बढ़ें और अपने Unzip.php नियंत्रक में upload मेथड(विधि) को निम्न एक के साथ बदलें।

1
public function upload()
2
{
3
    $config['upload_path']          = './uploads/';
4
    $config['allowed_types']        = 'zip';
5
        
6
    $this->load->library('upload', $config);
7
        
8
    if ( ! $this->upload->do_upload('zip_file'))
9
    {
10
        $params = array('error' => $this->upload->display_errors());
11
    }
12
    else
13
    {
14
        $data = array('upload_data' => $this->upload->data());
15
        $full_path = $data['upload_data']['full_path'];
16
17
        $this->load->library('extractor');
18
        $this->extractor->extract($full_path, FCPATH.'/uploads/');
19
        $params = array('success' => 'Extracted successfully!');
20
    }
21
        
22
    $this->load->view('file_upload_result', $params);
23
}

जैसा कि आप देख सकते हैं, हमने अपनी कस्टम लाइब्रेरी को लोड किया है और इसका उपयोग सामग्री को निकालने के लिए किया है!

1
$this->load->library('extractor');
2
$this->extractor->extract($full_path, FCPATH.'/uploads/');

बहुत अच्छा, है ना?

और हाँ, यह इस लेख का अंत है।

निष्कर्ष

मुझे आशा है कि आपने इस लेख का आनंद लिया है, जिसमें हमने कोडइग्नाइटर फ्रेमवर्क की मुख्य ज़िप लाइब्रेरी और विभिन्न मेथड(तरीका) की तलाश करना शुरू कर दिया है, जिसमें आप ज़िप संग्रह बना सकते हैं। दूसरे भाग में, मैंने समझाया कि कैसे आप ज़िप-संग्रह पीएचपी(PHP) एक्सटेंशन का उपयोग करके उपयोगकर्ता द्वारा अपलोड की गई फ़ाइलों को खोल सकते हैं।

इस प्रक्रिया में, हमें हमारे कोड को कस्टम कोडइग्नाइटर लाइब्रेरी में परिवर्तित करने का मौका मिला है, और यह शीर्ष पर एक चेरी के कुछ है, में कहना चाहूंगा!!

मुझे बताएं कि क्या आप किसी भी पूछताछ और सुझावों के साथ आते हैं जो कि आप फ़ीड का उपयोग कर शूट कर सकते हैं।

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.