Advertisement
  1. Code
  2. CodeIgniter

So komprimieren und entpacken Sie Dateien in CodeIgniter

Scroll to top
Read Time: 15 min

German (Deutsch) translation by Nikol Angelowa (you can also view the original English article)

In der ersten Hälfte dieses Tutorials werden verschiedene Möglichkeiten zum Erstellen einer ZIP-Datei mit integrierten CodeIgniter-APIs erläutert. Wir werden sehen, wie Sie Zip-Dateien auf dem Server erstellen und speichern und wie Sie sie auch Endbenutzern zum Download zur Verfügung stellen können.

In der zweiten Hälfte wird erläutert, wie Sie die Datei entpacken können. Um dies zu demonstrieren, erstellen wir eine benutzerdefinierte Seite, die es Benutzern ermöglicht, ZIP-Dateien hochzuladen, die nach erfolgreichem Dateiupload auf dem Server extrahiert werden. Um die gewünschte Funktionalität zu erreichen, kommt uns die ZipArchive PHP-Erweiterung zu Hilfe!

Bevor wir weitermachen und in die Entwicklung eintauchen, werde ich die Dateien auflisten, die wir im Laufe dieses Tutorials entwickeln werden:

  • application/controllers/Zip.php: Dies ist eine Controller-Datei, die verschiedene Möglichkeiten zum Erstellen einer ZIP-Datei zeigt.
  • application/controllers/Unzip.php: Dies ist eine Controller-Datei, die den Code enthält, der zum Entpacken einer vom Benutzer hochgeladenen Datei verwendet wird.
  • application/views/file_upload_form.php: Es ist eine Ansichtsdatei, die einen ziemlich einfachen HTML-Datei-Upload-Formularcode enthält.
  • application/views/file_upload_result.php: Dies ist eine Ansichtsdatei, die das Ergebnis einer vom Benutzer hochgeladenen Datei anzeigt; im Grunde sagt es Ihnen, ob die Datei erfolgreich entpackt wurde.
  • application/libraries/Extractor.php: Diese Datei demonstriert das Konzept einer benutzerdefinierten Bibliothek in CodeIgniter.

Wenn alles an Ort und Stelle ist, sind wir bereit, mit unserem nächsten Abschnitt fortzufahren!

So komprimieren Sie Dateien

Fahren Sie fort und erstellen Sie eine Datei application/controllers/Zip.php mit folgendem Inhalt.

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
}

Es ist eine ziemlich standardmäßige Controller-Datei, mit der Sie bereits vertraut sind. Es enthält mehrere Methoden, und jede von ihnen zeigt Ihnen eine andere Möglichkeit, eine ZIP-Datei zu erstellen.

Abgesehen davon bietet es zwei private Methoden, _load_zip_lib und _archieve_and_download, die von den restlichen Methoden aufgerufen werden. Natürlich müssen Sie diese Methoden nicht implementieren, aber wir haben unseren Code gerade umgestaltet, damit Sie nicht denselben Code in anderen Methoden wiederholen. Lassen Sie uns zuerst diese beiden Methoden durchgehen.

So sieht die Methode _load_zip_lib aus.

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

Es lädt die integrierte ZIP-Bibliothek des CodeIgniter-Frameworks, sodass Sie die Funktionen dieser Bibliothek im restlichen Code verwenden können. Jetzt können Sie mit der $this->zip-Konvention auf die Zip-Bibliothek zugreifen.

Als nächstes gibt es die Methode _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
}

Da wir die Zip-Bibliothek geladen haben, können Sie die von ihr bereitgestellten Methoden verwenden. Mit der Methode archive können Sie eine ZIP-Datei unter dem als erstes Argument angegebenen Pfad erstellen. Andererseits fordert die Download-Methode den Benutzer zum Herunterladen der Datei auf.

Machen Sie sich keine Sorgen, wenn Sie sich über den Inhalt unserer ZIP-Datei wundern, denn das werden wir gleich sehen.

Alles ist an seinem Platz, also können wir loslegen!

Nehmen wir den Code der data-Methode. Diese Methode zeigt Ihnen, wie Sie Dateien im Handumdrehen erstellen und in eine ZIP-Datei packen.

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
}

Zunächst haben wir die Methode _load_zip_lib aufgerufen, die die Zip-Bibliothek lädt. Als Nächstes haben wir die Methode add_data der Klasse zip verwendet, mit der Sie eine Datei erstellen und gleichzeitig mit Inhalten füllen können! Natürlich wird es auch dem Archiv hinzugefügt!

Das erste Argument sollte der Name der Datei sein, und das zweite Argument enthält den Inhalt der Datei.

Wie Sie sehen, haben wir zwei Dateien namens name.txt und profile.txt mit einigen Demo-Inhalten hinzugefügt. Schließlich rufen wir _archieve_and_download mit my_info.zip als Argument dieser Methode auf. Was tut es?

  • Es erstellt eine ZIP-Datei my_info.zip in Ihrem Upload-Verzeichnis.
  • Es fordert auch einen Benutzer zum Herunterladen einer Datei auf, und der Name, unter dem die Datei gespeichert wird, lautet my_info.zip.

Stellen Sie also sicher, dass Sie im uploads-Verzeichnis Ihrer Website ein Upload-Verzeichnis erstellt haben. Machen Sie es auch für den Webserver-Benutzer beschreibbar. Führen Sie jetzt "http://my-codeingiter-site/zip/data" aus, um die Dinge in Aktion zu sehen!

Bei Problemen könnt ihr mich gerne in den Kommentaren fragen!

Als nächstes gibt es die data_array-Methode.

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
}

Diese Methode ist identisch mit der letzten, die wir gerade besprochen haben, außer dass wir der add_data-Methode ein Array von Dateien anstelle einzelner Dateien bereitgestellt haben!

Als nächstes greifen wir den Code der data_with_subdirs-Methode auf.

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
}

Für den Fall, dass Sie Ihre Dateien in bestimmten Verzeichnissen organisieren möchten, können Sie diese auch mit der Methode add_data erstellen. Die resultierende Ausgabe der obigen Methode unterscheidet sich nicht, außer dass die Dateien name.txt und profile.txt im info-Verzeichnis abgelegt werden.

Obwohl die Methode add_data eine nette Funktion bietet, mit der Sie Dateien im Handumdrehen erstellen können, müssen Sie in den meisten Fällen vorhandene Dateien auf dem Server zippen. Wie auch immer, genau das ist das Thema unserer nächsten Methodenpaare.

Schauen wir uns kurz an, wie unsere nächste files-Methode aussieht. Es wird eine ZIP-Datei mit Dateien im uploads-Verzeichnis erstellen.

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
}

Der Zweck der Methode read_file besteht darin, die vorhandene Datei auf dem Server zu lesen und sie dem Archiv hinzuzufügen. Wie Sie sehen, haben wir dem Archiv die beiden Dateien 1.jpg und 2.jpg hinzugefügt. Natürlich müssen sich diese beiden Dateien im upload-Verzeichnis im Stammverzeichnis Ihrer Site befinden.

Wenn Sie TRUE als zweites Argument der Methode read_file übergeben, behält die resultierende ZIP-Datei die genaue Verzeichnisstruktur bei, in der die Datei platziert wurde.

Versuchen Sie, http://my-codeingiter-site/zip/files auszuführen und überprüfen Sie das Ergebnis!

Die letzte Methode in diesem Segment ist die dir-Methode. Es wird ein ZIP-Archiv des gesamten Verzeichnisses erstellen.

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
}

Sie können die Methode read_dir verwenden, wenn Sie anstelle bestimmter Dateien ein ZIP-Archiv des gesamten Verzeichnisses erstellen möchten. In unserem obigen Beispiel wird eine dir_images.zip-Datei erstellt, die alle Dateien im Verzeichnis /uploads/images/ enthält.

Wichtig hierbei ist, dass die gesamte Verzeichnisstruktur standardmäßig in der ZIP-Datei erhalten bleibt. Wenn Sie es jedoch ignorieren möchten, übergeben Sie einfach FALSE als zweites Argument der Methode read_dir. In diesem Fall wird nur ein images-Verzeichnis in der ZIP-Datei erstellt.

Damit endet unsere Geschichte, wie man ein Zip-Archiv mit verschiedenen Methoden erstellt, die von der integrierten Zip-Klasse bereitgestellt werden.

Wie entpacke ich Dateien?

Leider gibt es keine integrierte CodeIgniter-Bibliothek, die es uns ermöglicht, das Zip-Archiv zu entpacken. Aber die ZipArchive PHP-Erweiterung macht es zum Kinderspiel, wie wir gleich sehen werden.

Wir erstellen ein ziemlich einfaches Beispiel, das zeigt, wie Sie von Benutzern hochgeladene Dateien entpacken.

Fahren Sie fort und erstellen Sie eine Datei application/controllers/Unzip.php mit folgendem Inhalt.

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
}

Lassen Sie uns auch unsere Ansichtsvorlagen erstellen und dann sehen wir, wie es insgesamt funktioniert.

Erstellen Sie eine Ansichtsvorlagendatei application/views/file_upload_form.php mit folgendem Inhalt.

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>

Es erstellt ein einfaches Datei-Upload-Formular, damit der Benutzer die Zip-Datei hochladen kann! Bitte beachten Sie, dass ich es der Einfachheit halber auf ein Minimum beschränkt habe.

Als Nächstes erstellen wir eine Ansichtsvorlagendatei 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>

Sobald die Datei hochgeladen und extrahiert wurde, wird dem Benutzer die obige Vorlage angezeigt.

Kehren wir nun zu unserem Controller zurück und gehen die einzelnen Methoden durch.

Im Konstruktor unseres Controllers haben wir die integrierten Formular- und URL-CodeIgniter-Helfer geladen, damit wir Hilfsfunktionen wie form_open_multipart, site_url und dergleichen verwenden können.

Schauen wir uns als Nächstes die index-Methode an.

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

Braucht das eine Erklärung? Es ruft die Ansicht file_upload_form auf und rendert die Seite. Wenn Sie also auf http://my-codeingiter-site/unzip zugreifen, sollte ein einfaches Formular zum Hochladen von Dateien angezeigt werden, wie unten gezeigt.

Beachten Sie auch, dass die Aktion unseres Formulars unzip/upload ist, wo die Daten veröffentlicht werden. Wir haben den form_open_multipart-Helper verwendet, um das mehrteilige Formular-Tag zu generieren!

Upload PageUpload PageUpload Page

Als Nächstes müssen wir die upload-Aktionsmethode implementieren, die das Hochladen und Extrahieren von Dateien verarbeitet. Holen Sie sich den Code davon aus dem Unzip.php-Controller.

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
}

Wenn Sie mit dem Hochladen von Dateien in CodeIgniter vertraut sind, sollte Ihnen der Code nicht fremd erscheinen. Für diejenigen, die nicht vertraut sind, gibt es keinen Grund zur Sorge, da die integrierten Upload-APIs in CodeIgniter es zum Kinderspiel machen.

Der folgende Code lädt die Upload-Bibliothek mit einer anfänglichen Konfiguration, die von der Array-Variablen $config bereitgestellt wird.

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

Wir haben es so konfiguriert, dass die hochgeladene Datei im Verzeichnis uploads im Stammverzeichnis der Anwendung abgelegt wird und der Benutzer nur ZIP-Dateien hochladen darf.

Als nächstes haben wir überprüft, ob der Datei-Upload fehlgeschlagen ist, und wenn dies der Fall ist, rufen wir eine hilfreiche Fehlermeldung ab und weisen sie $params zu, damit wir sie in der Vorlage anzeigen können.

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

In diesem Fall wurde die Datei erfolgreich hochgeladen, sodass der nächste Schritt darin besteht, den Dateipfad der hochgeladenen Datei abzurufen.

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

Schließlich instanziieren wir ein ZipArchive-Objekt, öffnen unsere Zip-Datei und extrahieren sie in das uploads-Verzeichnis.

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

War das nicht einfach?

Das einzige, was uns bleibt, ist, die Ansicht file_upload_result aufzurufen, und so sollte sie aussehen!

Upload Result PageUpload Result PageUpload Result Page

Das ist also der andere Teil der Geschichte!

Refaktorieren Sie den Entpackcode in eine Bibliothek

Sie hätten bemerkt, dass die upload-Methode den ZipArchive-Code enthält, der die hochgeladene Datei extrahiert. Was ist, wenn Sie diesen Code an mehreren Stellen verwenden müssen? Sie könnten versucht sein, den Code nach Bedarf zu kopieren und einzufügen.

Tatsächlich gibt es eine bessere Möglichkeit, mit CodeIgniter Code zu zentralisieren, der in der gesamten Anwendung verwendet werden kann. Sie könnten eine benutzerdefinierte Bibliothek erstellen.

Fahren Sie fort und erstellen Sie eine Datei application/libraries/Extractor.php mit dem folgenden Inhalt.

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
}

Ersetzen Sie nun die upload-Methode in Ihrem Unzip.php-Controller durch die folgende.

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
}

Wie Sie sehen, haben wir unsere benutzerdefinierte Bibliothek geladen und zum Extrahieren der Inhalte verwendet!

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

Ziemlich cool, oder?

Und ja, das ist das Ende dieses Artikels.

Abschluss

Ich hoffe, Ihnen hat dieser Artikel gefallen, in dem wir damit begonnen haben, die zentrale ZIP-Bibliothek des CodeIgniter-Frameworks und verschiedene Möglichkeiten zum Erstellen eines ZIP-Archivs zu erkunden. Im zweiten Teil habe ich erklärt, wie Sie von Benutzern hochgeladene Dateien mit der ZipArchive-PHP-Erweiterung entpacken können.

Dabei hatten wir auch die Möglichkeit, unseren Code in eine benutzerdefinierte CodeIgniter-Bibliothek zu konvertieren, und das ist so etwas wie ein Sahnehäubchen, würde ich sagen!

Lassen Sie es mich wissen, wenn Sie Fragen und Vorschläge haben, die Sie mit dem unten stehenden Feed aufnehmen könnten.

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.