Spec-Zone.ru › CodeIgniter 3

Класс загрузки файлов

Класс загрузки файлов 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API