CodeIgniter 2 на русском

Классс File Uploading (загрузка файлов)

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

Процесс

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

Для демонстрации этого процесса здесь краткое руководство. Потом справочная информация.

Создание формы

Создайте файл upload_form.php. В нем поместите этот код, и сохраните в директорию applications/views/:

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

Страница успешной загрузки

Создайте файл upload_success.php. В ней поместите этот код и сохраните в директорию applications/views/:

Контроллер

Создайте контроллер upload.php. В нем поместите этот код и сохраните в директорию applications/controllers/:

Прим. пер. Здесь не хватает коррекции прав для обеспечения должного уровня безопасности.

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

Вам необходима директория, куда будут загружаться картинки. Создайте директорию в корне вашей инсталляции CodeIgniter, назовите ее uploads и установите права 777.

Пробуем!

Для того, чтобы опробовать вашу форму, посетите ваш сайт, используя URL вроде следующего:

example.com/index.php/upload/

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

Справочное руководство

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

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

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

Загруженный класс 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-тип, соответствующий файлу, который может быть загружен. Обычно соответствует «расширению» имени файла. Можно указывать много значений через символ "|".
file_name Желательное имя файла

Указывает CodeIgniter на необходимость переименовать файл с этим именем. Расширение в имени файла должно быть в числе разрешеных (выше).

overwrite FALSE TRUE/FALSE (boolean) Если установлено TRUE, в случае, если в указанной директории присутствует файл с аналогичным именем, он будет перезаписан. Если установлено в FALSE, к имени файла будет добавлено число.
max_size 0 Максимальный размер файла (в килобайтах). Установите в 0, если ограничения не подразумевается. В любом случае фактическое ограничение указано в файле php.ini. Обычно 2 MB (или 2048 KB) по умолчанию.
max_width 0 Максимальная ширина изображения, в пикселях. Установите в 0, если не подразумевается ограничений.
max_height 0 Максимальная высота изображения, в пикселях. Установите в 0, если не подразумевается ограничений.
max_filename 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()

Выполняет загрузку, основываясь на указанных параметрах. Примечание: по умолчанию ожидается, что поле с файлом в форме называется 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 Строка, содержащая ширину и высоту. Полезно для размещения в теге изображения.