Загрузчик файлов и изображений

Зависимости

Данный компонент предназначен для загрузки файлов и изображений на сайте.

Настройки

<?php

    /**
     * Дефолтный конфиг файла
     *
     * @author Zmi и GYL
     */


    $g_config['uploader']['default_config'] = array
    (
          // Путь до папки, куда будет загружен файл
          'upload_path'     => BASEPATH . 'upl/files/',

          // Типы MIME, описывающие типы файлов, разрешенных для загрузки
          'allowed_types'   => 'txt|zip|doc|docx|pdf|bmp|gif|jpeg|jpg|png|rar|tiff',

          // Максимальный размер файла (в килобайтах). Если ограничения нет, то пишем 0
          'max_size'        => '5000',

          // Если TRUE, и в папке уже есть файл с тем же именем, иначе к имени заливаемого файла добавится порядковый номер
          'overwrite'       => false,

          // Если TRUE, то имя файла преобразуется в случайным образом сгенерированную строку
          'encrypt_name'    => true,

          // Если TRUE, то все пробелы в имени файла будут преобразованы в знак подчеркивания
          'remove_spaces'   => true,

          // Максимальная ширина картинки в пикселях. 0 — не ограниченно
          'max_width'       => '2000',

          // Максимальная высота картинки в пикселях. 0 — не ограниченно.
          'max_height'      => '2000',

          // Cписок thumb-ов который нужно сгенерировать.
          'thumbs' => array(
                                // path можно не указывать. Тогда он: $config['upload_path'] . $t['width'] . '_' . $t['height'] . '/'

                                // array('width' =>  50, 'height' =>  50, 'path' => BASEPATH . 'upl/files/50_50/'),
                                // array('width' => 100, 'height' => 100, 'path' => BASEPATH . 'upl/files/100_100/')
                           )
    );
?>

Для загрузки файлов использется функция Upload(). Первый параметр в ней обязателен - это имя input-а. Второй не обязателен и задает конфигурацию.

Для конфигурации не обязательно задавать все поля. Не заданные поля будут взяты из основного конфига. Пример:

        $uploader = new Uploader();

        // Пример 1
        $uploader->Upload('doc');

        // Пример 2
        $uploader->Upload(
                              'photo',
                              array
                              (
                                'upload_path'   => BASEPATH . 'upl/photos/',
                                'allowed_types' => 'gif|jpg|png|bmp',
                                'encrypt_name'  => true
                              )
                         );
    

Рассмотрим более полный пример работы компонента:

<?php

    $uploader = new Uploader();

    $msg      = "";
    if (Post('apply'))
    {
        if ($uploader->HasUpload('photo'))
        {
            $isUpload = $uploader->Upload
                        (
                              'photo',
                              array
                              (
                                'upload_path'   => BASEPATH . "upl/photos/",
                                'allowed_types' => 'gif|jpg|png|bmp',
                                'encrypt_name'  => true,
                                // Сказать по чести создавать миниатюры сразу не лучший метод
                                // Более правильным будет подход переоределение пути запроса до картинки на скрипт и генерация в нём миниатюры с сохранением
                                'thumbs'        => array
                                                   (
                                                        array('width' => 128, 'height' => 128, 'path' => BASEPATH . "upl/photos/128_128/")
                                                   )
                              )
                         );

            $msg = $isUpload ?
                    MsgOk("File has been uploaded as: " . $uploader->GetInf('file_name')) :
                    MsgErr("Can't upload file (Error: " . implode(", ", $uploader->Errors()) . ")");
        }
    }
?>
    <form action="<?= GetCurUrl()?>" method="post" <?= Uploader::FORM_LOAD?>>
        <?= $msg?>
        <input type="hidden" name="apply" value="1" />
        <input type="file" name="photo" />
        <button>Upload</button>
    </form>

Так же детальнее рассмотрим методы класса и возвращаемые им параметры: