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

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