Класс загрузки файлов
Класс загрузки файлов CodeIgniter, позволяет загружать файлы. Вы можете установить различные настройки ограничивающие тип и размер файлов.
Процесс
Загрузка файла состоит из следующих основных процессов:
- Отображается форма загрузки, позволяя пользователю выбрать файл и загрузить его.
- При отправке формы, файл загружается в казанное вами место.
- По пути файл будет проверен, чтобы убедиться, может ли он быть загружен на основе выбранных вами настроек.
- После загрузки, пользователю будет показано сообщение об успешной загрузке.
Чтобы продемонстрировать этот процесс, сделеаем короткий учебник. После этого вы найдете справочную информацию.
Создание формы загрузки
Используя текстовый редактор создайте файл с формой с названием upload_form.php. В нем, разместите код указанный ниже и сохраните его в application/views/ папку:
<html>
<head>
<title>Upload Form</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="upload" />
</form>
</body>
</html>
Вы заметили, что мы используем хелпер (помощник) форм для создания открывающего тега Form. Форма загрузки файлов требует "multipart", поэтому хелпер создает правильный синтаксис. Вы также заметили переменную $error. Таким образом, мы выводим сообщения об ошибках в случае, если пользователь делает что-то неправильно.
Страница сообщения об успешной загрузке
Используя текстовый редактор создайте файл с формой с названием upload_success.php. В нем, разместите код указанный ниже и сохраните его в application/views/ папку:
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<h3>Your file was successfully uploaded!</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', 'Upload Another File!'); ?></p>
</body>
</html>
Конроллер
Используя текстовый редактор создайте конроллер с названием Upload.php. В нем, разместите код указанный ниже и сохраните его в application/controllers/ папку:
<?php
class Upload extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
public function index()
{
$this->load->view('upload_form', array('error' => ' ' ));
}
public 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('userfile'))
{
$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);
}
}
}
?>
Папка для загрузки файлов
Вам понадобится папка для загруженных файлов. Создайте папку в корне, где находится CodeIgniter, и установите на нее права доступа (chmod) 777.
Пробуем!
Чтобы попробовать форму на вашем сайте, используйте URL, подобный этому:
example.com/index.php/upload/
Вы должны увидеть форму загрузки. Попробуйте загрузить файл изображения (т.е. jpg, gif или png). Если путь к контроллеру указан правильно, то все должно работать.
Справочник
Инициализация класса загрузки
Как и большинство других классов CodeIgniter, класс загрузки инициализируется в контроллере с помощью $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);
// Альтернативно, вы можете установить настройки вызывая ``initialize()`` метод. Полезно, если класс загружен автозагрузкой:
$this->upload->initialize($config);
Вышеуказанные настройки очевидны. Ниже приведена таблица с описанием всех существующих настроек.
Настройки
Доступны следующие настройки. Значение по умолчанию указывает, что будет использоваться, если не указан параметр настройки.
Настройка | Значение по умолчанию | Варианты | Описание |
---|---|---|---|
upload_path | Нет | Нет | Путь к директории, где должны быть размещены файлы загрузки. Директория должна быть доступна для записи и путь может быть абсолютным или относительным. |
allowed_types | Нет | Нет | MIME типы, соответствующие типам файлов, разрешенные для загрузки. Обычно расширение файла может быть использован в качестве типа MIME. Может быть либо массив либо строка, разделенная пробелом. |
file_name | Нет | Желаемое имя файла | Если установлена CodeIgniter будет переименовать загруженный файл в это имя. Расширения, устанавлеваемые в имени файла также должно быть разрешенного типа. Если нет расширения, устанавливается оригинальное file_name. |
file_ext_tolower | FALSE | TRUE/FALSE (булево) | Если значение TRUE, расширение файла будет в нижнем регистре |
overwrite | FALSE | TRUE/FALSE (boolean) | Если значение TRUE, то файл с таким же именем будет перезаписан. Если задано значение FALSE, то к имени файла будет добавляться число, если файл с таким же именем существует. |
max_size | 0 | Нет | Максимальный размер (в килобайтах) файла для загрузки. Значение ноль - без ограничений. Примечание: большинство PHP установок имеют свои собственные ограничения, как указано в php.ini файле. Обычно 2 MB (или 2048 KB) по умолчанию. |
max_width | 0 | Нет | Максимальная ширина (в пикселях) изображения. Значение ноль - без ограничений. |
max_height | 0 | Нет | Максимальная высота (в пикселях) изображения. Значение ноль - без ограничений. |
min_width | 0 | Нет | Минимальная ширина (в пикселях) изображения. Значение ноль - без ограничений. |
min_height | 0 | Нет | Минимальная высота (в пикселях) изображения. Значение ноль - без ограничений. |
max_filename | 0 | Нет | Максимальная длина имени файла. Значение ноль - без ограничений. |
max_filename_increment | 100 | Нет | Если параметр overwrite имеет значение FALSE, используйте это значение для установки максимального значения инкремента для добавления к имени файла. |
encrypt_name | FALSE | TRUE/FALSE (булево) | Если значение TRUE имя файла будет преобразовано в случайную зашифрованную строку. Это может быть полезно, если вы хотите сохранить файл с именем, которое не может понять человек. |
remove_spaces | TRUE | TRUE/FALSE (булево) | Если значение TRUE, все пробелы в имени файла будут преобразованы в подчеркивания. Рекомендуется. |
detect_mime | TRUE | TRUE/FALSE (булево) | Если значение TRUE, на сервере будут обнаруживаться типы файлов, во избежания атак путем внедрения кода. НЕ ОТКЛЮЧАЙТЕ эту опцию, если у вас нет другого выбора. Вызывает риск для безопасности. |
mod_mime_fix | TRUE | TRUE/FALSE (булево) | Если значение TRUE, будет присоединено несколько расширений файла с символа подчеркивания во избежание срабатывания (выполнения)Apache mod_mime. НЕ ОТКЛЮЧАЙТЕ эту опцию, если у вас нет другого выбора. Вызывает риск для безопасности. |
Установка настроек в конфигурационном файле
Если вы предпочитаете не устанавливать параметры с помощью описанного выше метода, то можете вместо этого вложить их в конфигурационный файл. Просто создайте новый файл с названием upload.php, добавьте массив $config в этот файл. Затем сохраните файл в: config/upload.php и он будет использоваться автоматически. Вам НЕ нужно будет использовать $this->upload->initialize() метод если вы сохраните настройки в конфигурационный файл.
Настройки класса
- class CI_Upload
- initialize([array $config = array()[, $reset = TRUE]])
Параметры: - $config (массив) – Настройки
- $reset (булево) – Нужно ли сбросить настройки (которые не предусмотрены в $config) по умолчанию
Возвращает: CI_Upload экземпляр (цепочка методов)
Возвращаемый тип: CI_Upload
- do_upload([$field = 'userfile'])
Параметры: - $field (строка) – Имя поля формы
Возвращает: TRUE при удаче, FALSE при неудаче
Возвращаемый тип: булево
Выполняет загрузку исходя из указанных настроек.
Примечание
По умолчанию при загрузке ожидается файл из формы с именем 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);
- display_errors([$open = '<p>'[, $close = '</p>']])
Параметры: - $open (строка) – Открытие метки
- $close (строка) – Закрытие метки
Возвращает: Отформатированное сообщение об ошибках
Возвращаемый тип: строка
Получает любые сообщения об ошибках, если do_upload() метод возвращает false. Метод не показывает ошибку автоматически, он возвращает данные, так что вы можете настроить его, как вам нужно.
Форматирование ошибок
По умолчанию указанный выше метод обертывания какие-либо ошибки в <p> тег. Вы можете установить собственные разделители:
$this->upload->display_errors('<p>', '</p>');
- data([$index = NULL])
Параметры: - $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" )
Для возвращения одного элемента из массива:
$this->upload->data('file_name'); // Вернет: mypic.jpg
Таблица объяснения элементов массива отображаемых выше:
Пункт Описание 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 Строка, содержащая ширину и высоту (полезно при помещении в тег img)