Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.3

Search User Guide

# Класс для загрузки файлов

Класс File Uploading позволяет загружать файлы. Вы можете установить различные настройки, ограничивая тип и размер загружаемых файлов.

## Процесс

Загрузка файлов обычно выполняется в виде следующего процесса:

- Отображается форма для загрузки, позволяя пользователям выбрать файл и загрузить его.
- Когда форма передана, файл загружается по указанному вами назначению.
- Параллельно файл подвергается валидации, чтобы убедиться, что он имеет соответствующий тип и другие параметры, как вы указали.
- После загрузки пользователь увидит сообщение об успехе.

Вот краткое руководство, демонстрирующее этот процесс. Ниже вы найдете справочную информацию.

## Создание загрузочной формы

Используя текстовый редактор, создайте форму upload_form.php. Поместите в нее этот код, и сохраните в директорию `applications/views/`:

<html> <head> <title>Форма загрузки</title> </head> <body> <?php echo $error;?> <?php echo form_open_multipart('upload/do_upload');?> <input type="file" name="userfile" size="20" /> <br /><br /> <input type="submit" value="Загрузить" /> </form> </body> </html>

Обратите внимание, что мы использовали помощник форм для открывающего тега. Загрузка файлов требует форму multipart, поэтому помощник создает для вас требуемый синтаксис. Также обратите внимание на то, что мы используем переменную $error. С ее помощью мы сможем отображать ошибки, если что-то произошло неправильно.

## Страница успеха

Используя текстовый редактор создайте файл upload_success.php. В нем разместите этот код и сохраните его в вашу директорию `applications/views/`:

<html> <head> <title>Форма загрузки</title> </head> <body> <h3>Ваш файл был успешно загружен!</h3> <ul> <?php foreach ($upload_data as $item => $value):?> <li><?php echo $item;?>: <?php echo $value;?></li> <?php endforeach; ?> </ul> <p><?php echo anchor('upload', 'Загрузить другой файл!'); ?></p> </body> </html>

## Контроллер

Используя текстовый редактор, создайте контроллер upload.php. Поместите в него этот код и сохраните в вашу директорию `applications/controllers/`:

<?php class Upload extends CI_Controller { function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); } function index() { $this->load->view('upload_form', array('error' => ' ' )); } function do_upload() { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = '100'; $config['max_width'] = '1024'; $config['max_height'] = '768'; $this->load->library('upload', $config); if ( ! $this->upload->do_upload()) { $error = array('error' => $this->upload->display_errors()); $this->load->view('upload_form', $error); } else { $data = array('upload_data' => $this->upload->data()); $this->load->view('upload_success', $data); } } }

## Директория для загрузки

Вам нужна директория, куда будут загружаться картинки. Создайте директорию upload под корнем инсталляции CodeIgniter (document root сайта, рядом с index.php), и установите ее права в 777.

## Попробуйте!

Чтобы попробовать вашу форму, посетите URL, соответствующий такому:

`example.com/index.php/upload/`

Вы должны увидеть форму для загрузки. Попробуйте загрузить файл изображения (jpg, gif или png). Если путь в вашем контроллере правильный, это должно работать.

# Справка по функциям

## Инициализация класса Upload

Как и большинство других классов в CodeIgniter, класс Upload инициализируется в вашем контроллере посредством функции $this->load->library:

`$this->load->library('upload');`

Загруженный объект класса доступен через: $this->upload

## Установка параметров

Как и с другими библиотеками, вы полностью контролируете, что разрешается загружать, в соответствии с указанными вами параметрами:

`$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
// Также вы можете установить параметры, вызвав инициализирующую функцию. Это полезно, если вы загружаете класс автоматически (в автозагрузке):
$this->upload->initialize($config);`

Параметры, указанные выше должны быть понятны. В таблице ниже описаны все доступные параметры.

## Параметры

Доступны следующие параметры. Значения по умолчанию позволяют не указывать этот параметр.

Параметр | Значение по умолчанию | Опции | Описание
--- | --- | --- | ---
upload_path | Нет | Нет | Путь к директории, куда должны помещаться загруженные файлы. Директория должна быть записываемой, а путь может быть абсолютным или относительным.
allowed_types | Нет | Нет | Типы MIME файлов, которые могут быть загружены. Обычно указываются расширения файлов, которые указывают на MIME тип. Можно указывать несколько значений через вертикальную черту |.
file_name | Нет | Желаемое имя файла | Если установлено, CodeIgniter переименует загруженный файл в указанное имя. Расширение должно быть в списке разрешенных.
overwrite | FALSE | TRUE/FALSE (boolean) | Если установлено в TRUE, то если существует файл с таким же именем, как и загруженный, он будет перезаписан. Если установить в FALSE, к имени файла будет добавлена цифра, если существует аналогичный файл.
max_size | 0 | Нет | Максимальный размер (в килобайтах), которого может быть файл. Установка в ноль снимет ограничения. Примечания: большинство инсталляций PHP имеют собственный лимит, обозначенный в файле php.ini. Обычно 2 мегабайта (2048 килобайт) по умолчанию.
max_width | 0 | Нет | Максимально допустимая ширина изображения, в пикселях. Установка в ноль снимет ограничение.
max_height | 0 | Нет | Максимально допустимая высота изображения, в пикселях. Установка в ноль снимет ограничение.
max_filename | 0 | Нет | Максимальная длина имени файла. Установка в ноль снимет ограничение.
encrypt_name | FALSE | TRUE/FALSE (boolean) | Если установить в TRUE, имя файла будет конвертировано в случайно зашифрованную строку. Может быть полезно, если вы хотите сохранить файл с именем, которое не может быть опознано загружающим, либо для простого предотвращения конфликтов имен и недопустимых символах в URL.
remove_spaces | TRUE | TRUE/FALSE (boolean) | Если установить в TRUE, любые пробелы в файле будут конвертированы в символы подчеркивания. Рекомендуется.

## Установка параметров в конфигурационном файле

Если вы не хотите устанавливать параметры указанным методом, вы можете поместить их в конфигурационный файл. Просто создайте новый файл, с названием upload.php, поместите в него массив $config. Потом сохраните его в config/upload.php и он будет использован автоматически. Вы НЕ должны использовать инициализирующую функцию $this->upload->initialize, если вы сохраните ваши параметры в конфигурационном файле.

## Справка по функциям

Доступны следующие функции

## $this->upload->do_upload()

Выполняет загрузку, основываясь на указанных вами параметрах. Примечание: по умолчанию ожидается имя поля userfile, и форма должна быть типа «multipart»:

`<form method="post" action="some_action" enctype="multipart/form-data" />`

Если вы хотите установить собственное имя поля, просто передайте его функции do_upload():

`$field_name = "some_field_name";
$this->upload->do_upload($field_name)`

## $this->upload->display_errors()

Получает все сообщения об ошибках, если функция do_upload() вернула FALSE. Функция не делает вывод, вы можете присвоить возвращаемые данные, как пожелаете.

### Форматирование ошибок

По умолчанию функция вписывает все ошибки в теги <p>. Вы можете установить собственные ограничители:

`$this->upload->display_errors('<p>', '</p>');`

## $this->upload->data()

Это функция-помощник, которая возвращает массив, содержащий все данные загруженного файла. Вот прототип массива:

`Array
(
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[client_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)`

### Объяснение

Вот объяснение элементов массива.

Элемент | Описание
--- | ---
file_name | Имя загруженного файла, включая расширение.
file_type | MIME-тип файла
file_path | Абсолютный серверный путь к файлу
full_path | Абсолютный серверный путь к файлу, включая имя файла
raw_name | Имя файла без расширения
orig_name | Оригинальное имя файла. Полезно, если вы использовали опцию шифрования имени.
client_name | Изначальное имя загруженного файла до каких-либо обработок (шифррование или инкрементирование), переданное агентом пользователя.
file_ext | Расширение файла с точкой
file_size | Размер файла в килобайтах
is_image | Является ли файл изображением или нет. 1 = изображение. 0 = нет.
image_width | Ширина картинки.
image_height | Высота картинки
image_type | Тип изображения. Обычно это расширение файла.
image_size_str | Строка содержащая ширину и высоту. Полезна для размещения в теге изображения.

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter