Как архивировать и распаковывать файлы в CodeIgniter
Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)
Первая половина этого руководства объясняет различные способы создания ZIP-файла с помощью встроенных API-интерфейсов CodeIgniter. Мы увидим, как создавать и сохранять zip-файлы на сервере, и как вы можете сделать их доступными для загрузки конечным пользователям.
Вторая половина включает обсуждение того, как вы можете разархивировать файл. Чтобы продемонстрировать это, мы создадим пользовательскую страницу, которая позволит пользователям загружать zip-файлы, которые будут извлечены на сервере после успешной загрузки файла. Для достижения желаемых функциональных возможностей нам пригодится расширение ZipArchive PHP!
Прежде чем мы продолжим и фактически погрузимся в материал разработки, я перечислил файлы, которые мы собираемся разработать в ходе этого учебника:
- Application / controllers / Zip.php: Это файл контроллера, который демонстрирует различные способы создания zip-файла.
- Application / controllers / Unzip.php: Это файл контроллера, который включает в себя код, используемый для распаковки загруженного пользователем файла.
- Application / views / file_upload_form.php: Это файл представления, который содержит довольно простой код для загрузки файлов HTML.
- Application / views / file_upload_result.php: это файл представления, который показывает результат загруженного пользователем файла; В основном это говорит вам, если файл был успешно разархивирован.
- Application / libraries / Extractor.php: Этот файл демонстрирует концепцию пользовательской библиотеки в CodeIgniter.
Со всем, что у нас есть, мы готовы перейти к следующему разделу!
Как архивировать файлы?
Идем дальше и создаем файл 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 |
}
|
Это довольно стандартный файл контроллера, с которым вы уже знакомы. Он содержит несколько методов, и каждый из них показывает вам другой способ создания zip-файла.
Кроме того, он предоставляет два частных метода: _load_zip_lib
и _archieve_and_download
, которые вызываются из остальных методов. Конечно, вам не нужно реализовывать эти методы, но мы просто реорганизовали наш код, чтобы вы не повторяли тот же код в других методах. Давайте сначала рассмотрим эти два метода.
Вот как выглядит метод _load_zip_lib.
1 |
private function _load_zip_lib() |
2 |
{
|
3 |
$this->load->library('zip'); |
4 |
}
|
Он загружает встроенную zip-библиотеку среды CodeIgniter, чтобы вы могли использовать возможности этой библиотеки во всем остальном коде. Теперь вы можете получить доступ к zip-библиотеке с помощью соглашения $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 |
}
|
Когда мы загрузили zip-библиотеку, вы можете использовать предоставленные ею методы. Метод архивирования позволяет вам по пути создать zip-файл, указанному в качестве первого аргумента. С другой стороны, метод загрузки предлагает пользователю загрузить файл.
Не беспокойтесь, если вы задаетесь вопросом о содержимом нашего zip-файла, сейчас мы к этому перейдем.
Все на месте, поэтому мы готовы к работе!
Давайте рассмотрим код метода data. Этот метод показывает вам, как создавать файлы «на лету» и переносить их в zip-файл.
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
, который загружает библиотеку zip. Затем мы использовали метод add_data
класса zip, который позволяет вам создать файл и одновременно заполнить его содержимым! Конечно, он будет добавлен в архив!
Первый аргумент должен быть именем файла, а второй - содержимым файла.
Как вы можете видеть, мы добавили два файла: name.txt
и profile.txt
, с некоторым демо-контентом. Наконец, мы вызываем _archieve_and_download
с my_info.zip
в качестве аргумента этого метода. Что он делает?
- Он создаст 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.tx
t и profile.txt
будут помещены в каталог info
.
Хотя метод add_data
предоставляет хорошую возможность, которая позволяет вам создавать файлы «на лету», чаще всего вам необходимо заархивировать существующие файлы на сервере. Во всяком случае, это как раз тема наших следующих методов.
Давайте быстро посмотрим, как выглядит наш следующий метод files
. Он создаст zip архив файлов в каталоге 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
в корневом каталоге вашего сайта.
Если вы передадите TRUE
как второй аргумент метода read_file
, результирующий zip-файл сохранит точную структуру директории, в которую был помещен файл.
Попробуйте запустить http: // my-codeigniter-site / zip / files и проверьте результат!
Последний метод в этом сегменте - это метод dir
. Он создаст zip-архив всего каталога.
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
, если хотите создать zip-архив всего каталога вместо определенных файлов. В нашем примере выше он создаст файл dir_images.zip
, содержащий все файлы в каталоге /uploads/images/
.
Важно отметить, что вся структура каталогов будет сохранена по умолчанию в zip-файле. Но, если вы хотите проигнорировать его, просто передайте FALSE
в качестве второго аргумента метода read_dir
. В этом случае создается только каталог images
в zip-файле.
Итак, мы заканчиваем нашу историю о том, как создавать zip-архив, используя различные методы, предоставляемые встроенным zip-классом.
Как распаковать файлы?
К сожалению, нет встроенной библиотеки CodeIgniter, которая позволяет нам разархивировать zip-архив. Но расширение ZipArchive 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>
|
Он создает простую форму для загрузки файлов, чтобы пользователь мог загрузить zip-файл! Пожалуйста, обратите внимание, что я свел все к минимуму ради простоты.
Теперь давайте создадим файл шаблона 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'); ?>"><< Back to File Uploader</a> |
90 |
</div>
|
91 |
</div>
|
92 |
|
93 |
</body>
|
94 |
</html>
|
После загрузки и извлечения файла пользователю будет показан указанный выше шаблон.
Теперь давайте вернемся к нашему контроллеру и пройдемся по каждому методу.
В конструкторе нашего контроллера мы загрузили встроенные хелперы CodeIgniter такие как form и url, чтобы мы могли использовать вспомогательные функции, такие как form_open_multipart
, site_url
и т.п.
Затем давайте посмотрим на метод index
.
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
для создания тега multipart form!



Затем нам нужно реализовать метод 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 |
}
|
Если вы знакомы с загрузкой файлов в CodeIgniter, код не должен выглядеть чужим для новым. Для тех, кто не знаком, вам не о чем беспокоиться, так как встроенные API загрузки в CodeIgniter довольно просты.
Следующий код загружает библиотеку загрузки с некоторой начальной конфигурацией, предоставляемой переменной массива $config
.
1 |
$this->load->library('upload', $config); |
Мы настроили его так, чтобы загруженный файл был помещен в папку uploads
в корне приложения, и пользователю будет разрешено загружать только zip-файлы.
Затем мы проверили, не удалось ли загрузить файл, и в этом случае мы выведем сообщение об ошибке, которое присвоим переменной $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']; |
Наконец, мы создаем объект ZipArchive, открываем наш zip-файл и извлекаем его в каталог 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
, и вот как оно должно выглядеть!



Итак, это другая часть истории!
Рефакторинг Unzipping кода в библиотеку
Вы заметили бы, что метод upload
содержит код ZipArchive, который извлекает загруженный файл. Что делать, если вам нужно использовать этот код в нескольких местах? Возможно, у вас возникнет соблазн скопировать и вставить код по мере необходимости.
На самом деле, есть лучший способ, с помощью которого CodeIgniter позволяет централизовать код, который можно использовать во всем приложении. Вы можете создать собственную библиотеку.
Двигаемся дальше и создаем файл 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 |
}
|
Теперь давайте заменим метод 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 |
$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/'); |
Круто, да?
И да, это конец этой статьи.
Заключение
Надеюсь, вам понравилась статья, в которой мы начали изучать основную zip-библиотеку среды CodeIgniter и различными способами создавать ZIP-архив. Во второй части я объяснил, как можно распаковывать загруженные пользователем файлы с помощью расширения ZipArchive PHP.
В этом процессе мы также получили возможность переместить наш код в обычную библиотеку CodeIgniter, и я бы сказал, что это было чем-то вроде вишенки на торте.
Сообщите мне, если у вас появятся какие-либо вопросы и предложения, которые вы можете отправить, используя фид ниже.