Класс 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 | Строка, содержащая ширину и высоту. Полезно для размещения в теге изображения. |