Класс загрузки файлов
Класс загрузки файлов 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>
Обратите внимание, что мы используем помощник для создания тега открытия формы. Загрузка файлов требует многочастной формы, поэтому помощник создаёт необходимую синтаксическую конструкцию. Вы также заметите переменную $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);
}
}
}
?>
Директория загрузки
Вам понадобится целевая директория для загружаемых изображений. Создайте директорию uploads в корне вашей установки CodeIgniter и установите права доступа к ней в 777.
Попробуйте!
Чтобы попробовать форму, перейдите на ваш сайт с помощью URL, подобного этому:
example.com/index.php/upload/
Вы должны увидеть форму загрузки. Попробуйте загрузить файл изображения (jpg, gif или png). Если путь в вашем контроллере верный, всё должно работать.
Справочник
Инициализация класса загрузки
Как и большинство других классов в CodeIgniter, класс Upload инициализируется в вашем контроллере с помощью метода:
$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);
// Alternately you can set preferences by calling the ``initialize()`` method. Useful if you auto-load the class:
$this->upload->initialize($config);
Вышеуказанные настройки должны быть достаточно понятны. Ниже приводится таблица, описывающая все доступные настройки.
Настройки
Доступны следующие настройки. Значение по умолчанию указывает, что будет использоваться, если вы не укажете эту настройку.
| Настройка | Значение по умолчанию | Варианты | Описание |
|---|---|---|---|
| upload_path | Отсутствует | Отсутствует | Путь к директории, куда должен быть помещен файл. Директория должна быть доступна для записи, а путь может быть абсолютным или относительным. |
| allowed_types | Отсутствует | Отсутствует | Типы MIME, соответствующие типам файлов, которые вы разрешаете загружать. Обычно расширение файла можно использовать в качестве типа MIME. Может быть массивом или строкой, разделённой символом «|». |
| file_name | Отсутствует | Желаемое имя файла | Если установлено, CodeIgniter переименует загруженный файл в это имя. Расширение, указанное в имени файла, также должно быть разрешённым типом файла. Если расширение не указано, будет использоваться исходное имя файла. |
| file_ext_tolower | FALSE | TRUE/FALSE (булево) | Если установлено в TRUE, расширение файла будет принудительно преобразовано в нижний регистр. |
| overwrite | FALSE | TRUE/FALSE (булево) | Если установлено в TRUE, если файл с таким же именем, как и тот, который вы загружаете, существует, он будет перезаписан. Если установлено в FALSE, к имени файла будет добавлено число, если другой файл с таким же именем существует. |
| max_size | 0 | Отсутствует | Максимальный размер файла (в килобайтах). Установите в ноль для снятия ограничения. Примечание: большинство установок PHP имеют собственное ограничение, как указано в файле php.ini. Обычно по умолчанию 2 МБ (или 2048 КБ). |
| max_width | 0 | Отсутствует | Максимальная ширина изображения (в пикселях). Установите в ноль для снятия ограничения. |
| max_height | 0 | Отсутствует | Максимальная высота изображения (в пикселях). Установите в ноль для снятия ограничения. |
| min_width | 0 | Отсутствует | Минимальная ширина изображения (в пикселях). Установите в ноль для снятия ограничения. |
| min_height | 0 | Отсутствует | Минимальная высота изображения (в пикселях). Установите в ноль для снятия ограничения. |
| max_filename | 0 | Отсутствует | Максимальная длина имени файла. Установите в ноль для снятия ограничения. |
| max_filename_increment | 100 | Отсутствует | Когда overwrite установлен в FALSE, используйте это, чтобы установить максимальный инкремент имени файла для добавления CodeIgniter к имени файла. |
| 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 (array) – Настройки
- $reset (bool) – Переустановить ли настройки (которые не указаны в $config) по умолчанию
Возвращает: Экземпляр CI_Upload (метод цепочки)
Тип возвращаемого значения: CI_Upload
-
do_upload([$field = 'userfile']) -
Параметры: - $field (string) – Имя поля формы
Возвращает: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool
Выполняет загрузку на основе заданных настроек.
Примечание
По умолчанию процедура загрузки ожидает файл из поля формы с именем 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 (string) – Открывающий тег
- $close (string) – Закрывающий тег
Возвращает: Отформатированное(ые) сообщение(я) об ошибке
Тип возвращаемого значения: string
Возвращает любые сообщения об ошибках, если метод
do_upload()вернул false. Метод не выводит данные автоматически, он возвращает данные, которые вы можете использовать как вам нужно.Форматирование ошибок
По умолчанию вышеуказанный метод оборачивает любые ошибки в теги <p>. Вы можете задать свои собственные разделители так:
$this->upload->display_errors('<p>', '</p>');
-
data([$index = NULL]) -
Параметры: - $data (string) – Элемент для возврата вместо всего массива
Возвращает: Информация о загруженном файле
Тип возвращаемого значения: mixed
Это вспомогательный метод, который возвращает массив, содержащий все данные, связанные с загруженным файлом. Вот прототип массива:
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'); // Returns: 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 Строка, содержащая ширину и высоту (полезно для вставки в тег изображения)
-
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/file_uploading.html