CodeIgniter, руководство пользователя к версии 1.6.1


Класс File Uploading

Этот класс позволяет заливать файлы на сервер. При этом Вы можете задавать различные критерии заливки, например, тип файлов или их максимальный размер.

Как это происходит

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

Чтобы продемонстрировать этот процесс в действии, давайте разберем конкретный пример. Ну а в конце Вы найдете описание класса.

Создаем форму загрузки

В текстовом редакторе создайте файл и назовите его upload_form.php. Вставьте туда код, представленный ниже, и сохраните в папке application/views/:

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

Страница уведомления о завершенной загрузке

В текстовом редакторе создайте файл и назовите его upload_success.php. Вставьте туда код, представленный ниже и сохраните в папке application/views/:

Контроллер

В текстовом редакторе создайте файл и назовите его upload.php. Это будет контроллер. Вставьте в файл код, представленный ниже и сохраните в папкеapplication/controllers/:

Папка загрузки

Ещё нам понадобится папка, куда будут сохраняться загруженные файлы. Создайте папку там, где у вас установлен CodeIgniter, назовите её uploads и выставьте права доступа 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-типа используется расширение файла. Несколько типов разделяются вертикальной чертой.
overwrite FALSE TRUE/FALSE (boolean) Если TRUE, и в папке уже есть файл с тем же именем, что и заливаемый, то он будет перезаписан. Если false, то перезаписи не будет, а к имени заливаемого файла добавится порядковый номер.
max_size 0 Нет Максимальный размер файла (в килобайтах). Если ограничения нет, то пишем 0. На заметку: на многих серверах с установленным PHP имеется ограничение на размер заливаемых файлов, записанное в файле php.ini. Как правило, по умолчанию устанавливается 2 МБ (2048 КБ).
max_width 0 Нет Максимальная ширина картинки в пикселях. 0 — не ограниченно.
max_height 0 Нет Максимальная высота картинки в пикселях. 0 — не ограниченно.
encrypt_name FALSE TRUE/FALSE (boolean) Если TRUE, то имя файла преобразуется в случайным образом сгенерированную строку. Может быть полезно, если хотите, чтобы залитый файл не мог быть распознан заливающим.
remove_spaces TRUE TRUE/FALSE (boolean) Если TRUE, то все пробелы в имени файла будут преобразованы в знак подчеркивания. Рекомендуется всегда использовать данную опцию.

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

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

Описание функций

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

$this->upload->do_upload()

Начинает загрузку файла с параметрами, заданными вами ранее. На заметку: по умолчанию 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/mypic.jpg
    [raw_name]     => mypic
    [orig_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 Первоначальное имя файла. Используется только при включенной опции encrypted_name.
file_ext Расширение файла с точкой
file_size Размер файла в килобайтах
is_image Проверка на предмет является ли файл изображением. 1 = изображение. 0 = нет.
image_width Ширина изображения.
image_heigth Высота изображения
image_type Тип изображения. Как правило - расширение файла без точки.
image_size_str Строка, включающая в себя параметры width и height. Полезно использовать внутри тэга img.