Exemple #1
0
        }
        // запрещенный тип файла
        if ($ext == 'jpg' or $ext == 'jpeg' or $ext == 'gif' or $ext == 'png') {
            $up_data = array();
            $up_data['full_path'] = $uploads_dir . $file;
            $up_data['file_path'] = $uploads_dir;
            $up_data['file_name'] = $file;
            $r = array();
            $r['userfile_mini'] = 1;
            // делать миниатюру
            $r['userfile_mini_size'] = $post['f_userfile_mini_size'];
            $r['mini_type'] = $post['f_mini_type'];
            $r['prev_size'] = 100;
            mso_upload_mini($up_data, $r);
            // миниатюра
            mso_upload_prev($up_data, $r);
            // превьюшка
        }
    }
    echo '<div class="update">' . t('Выполнено') . '</div>';
}
# загрузка нового файла
if ($post = mso_check_post(array('f_session2_id', 'f_upload_submit'))) {
    mso_checkreferer();
    require_once getinfo('common_dir') . 'uploads.php';
    // функции загрузки
    // параметры для mso_upload
    // конфиг CI-библиотеки upload
    $mso_upload_ar1 = array('upload_path' => getinfo('uploads_dir') . $current_dir, 'allowed_types' => $allowed_types);
    $mso_upload_ar2 = array('userfile_title' => $post['f_userfile_title'], 'fn_mso_descritions' => $fn_mso_descritions, 'userfile_resize' => isset($post['f_userfile_resize']), 'userfile_resize_size' => $post['f_userfile_resize_size'], 'userfile_water' => isset($post['f_userfile_water']), 'userfile_water_file' => getinfo('uploads_dir') . 'watermark.png', 'water_type' => $post['f_water_type'], 'userfile_mini' => isset($post['f_userfile_mini']), 'userfile_mini_size' => $post['f_userfile_mini_size'], 'mini_type' => $post['f_mini_type'], 'prev_size' => 100, 'message1' => '');
    // запомним указанные размеры и выставим их для полей формы вновь
Exemple #2
0
function mso_upload($config_library = array(), $field_userfile = 'f_userfile', $r = array())
{
    $CI =& get_instance();
    $CI->load->library('upload', $config_library);
    $CI->upload->initialize($config_library);
    // если была отправка файла, то нужно заменить поле имени с русского на что-то другое
    // это ошибка при копировании на сервере - он не понимает русские буквы
    if (isset($_FILES[$field_userfile]['name'])) {
        $f_temp = $_FILES[$field_userfile]['name'];
        // оставим только точку
        $f_temp = str_replace('.', '__mso_t__', $f_temp);
        $f_temp = mso_slug($f_temp);
        // остальное как обычно mso_slug
        $f_temp = str_replace('__mso_t__', '.', $f_temp);
        $ext = str_replace('.', '', strrchr($f_temp, '.'));
        // расширение файла
        if ($f_temp == '.' . $ext) {
            // имя файла состоит только из расширения «.jpg»
            $f_temp = '1' . $f_temp;
        }
        // добавляем к нему единицу
        $_FILES[$field_userfile]['name'] = $f_temp;
    }
    $res = $CI->upload->do_upload($field_userfile);
    if (!isset($r['message1'])) {
        $r['message1'] = '<div class="update">' . t('Загрузка выполнена') . '</div>';
    }
    if (!isset($r['message2'])) {
        $r['message2'] = '<div class="error">' . t('Не удалось перименовать файл в нижний регистр') . '</div>';
    }
    // описание файла
    if (!isset($r['userfile_title'])) {
        $r['userfile_title'] = false;
    }
    // файл, где хранится описание
    if (!isset($r['fn_mso_descritions'])) {
        $r['fn_mso_descritions'] = false;
    }
    // нужно ли менять размер
    if (!isset($r['userfile_resize'])) {
        $r['userfile_resize'] = true;
    }
    if (!isset($r['userfile_resize_size'])) {
        $r['userfile_resize_size'] = false;
    }
    // какой размер
    // водяной знак
    if (!isset($r['userfile_water'])) {
        $r['userfile_water'] = false;
    }
    // нужен ли водяной знак
    if (!isset($r['userfile_water_file'])) {
        $r['userfile_water_file'] = false;
    }
    // файл водяного знака
    if (!isset($r['water_type'])) {
        $r['water_type'] = 1;
    }
    // тип водяного знака
    // миниатюры всегда хранятся в подкаталоге mini
    if (!isset($r['userfile_mini'])) {
        $r['userfile_mini'] = true;
    }
    // делать миниатюру?
    if (!isset($r['userfile_mini_size'])) {
        $r['userfile_mini_size'] = false;
    }
    // размер миниатюры
    if (!isset($r['mini_type'])) {
        $r['mini_type'] = 1;
    }
    // тип миниатюры
    // превьюхи всегда хранятся в подкаталоге _mso_i
    if (!isset($r['prev_size'])) {
        $r['prev_size'] = 100;
    }
    // размер превьюхи
    if ($res) {
        echo $r['message1'];
        // если это файл картинки, то нужно сразу сделать скриншот маленький в _mso_i 100px, который будет выводиться в
        // списке файлов
        $up_data = $CI->upload->data();
        // файл нужно поменять к нижнему регистру
        if ($up_data['file_name'] != strtolower($up_data['file_name'])) {
            // переименуем один раз
            if (rename($up_data['full_path'], $up_data['file_path'] . strtolower('__' . $up_data['file_name']))) {
                // потом второй в уже нужный - это из-за бага винды
                rename($up_data['file_path'] . strtolower('__' . $up_data['file_name']), $up_data['file_path'] . strtolower($up_data['file_name']));
                $up_data['file_name'] = strtolower($up_data['file_name']);
                $up_data['full_path'] = $up_data['file_path'] . $up_data['file_name'];
                // echo '<div class="update">' . $up_data['full_path'] . $up_data['file_name'] . '</div>';
            } else {
                echo $r['message2'];
            }
        }
        // если указано описание файла и файл, где это описание хранится
        if ($r['userfile_title'] and $r['fn_mso_descritions']) {
            $fn_descr = trim(strip_tags($r['userfile_title']));
            // описание файла
            $fn_descr = str_replace('"', '', $fn_descr);
            // удалим лишнее
            $fn_descr = str_replace('\'', '', $fn_descr);
            if (file_exists($r['fn_mso_descritions'])) {
                // массив данных: fn => описание )
                $mso_descritions = unserialize(read_file($r['fn_mso_descritions']));
                // получим из файла все описания
            } else {
                $mso_descritions = array();
            }
            $mso_descritions[$up_data['file_name']] = $fn_descr;
            write_file($r['fn_mso_descritions'], serialize($mso_descritions));
            // сохраняем в файл
        }
        /*
        	[file_name] => warfare7.jpg
        	[file_type] => image/jpeg
        	[file_path] => D:/xampplite/htdocs/codeigniter/uploads/
        	[full_path] => D:/xampplite/htdocs/codeigniter/uploads/warfare7.jpg
        	[raw_name] => warfare7
        	[orig_name] => warfare.jpg
        	[file_ext] => .jpg
        	[file_size] => 52.09
        	[is_image] => 1
        	[image_width] => 450
        	[image_height] => 300
        	[image_type] => jpeg
        	[image_size_str] => width="450" height="300"
        */
        if ($up_data['is_image']) {
            $CI->load->library('image_lib');
            $CI->image_lib->clear();
            # вначале нужно изменить размер
            # потом делаем миниатюру с указанными размерами
            # потом делаем такую же миниатюру для  _mso_i с размером 100x100
            # меняем размер
            if ($r['userfile_resize'] and $r['userfile_resize_size']) {
                $size = abs((int) $r['userfile_resize_size']);
                $up_data['image_width'] >= $up_data['image_height'] ? $max = $up_data['image_width'] : ($max = $up_data['image_height']);
                if ($size > 1 and $size < $max) {
                    $r_conf = array('image_library' => 'gd2', 'source_image' => $up_data['full_path'], 'new_image' => $up_data['full_path'], 'maintain_ratio' => true, 'width' => $size, 'height' => $size);
                    $CI->image_lib->initialize($r_conf);
                    if (!$CI->image_lib->resize()) {
                        echo '<div class="error">' . t('Уменьшение изображения:') . ' ' . $CI->image_lib->display_errors() . '</div>';
                    }
                }
            }
            //Меняли или не меняли размер, но теперь проверяем, нужна ли нам ватермарка.
            if ($r['userfile_water'] and $r['userfile_water_file']) {
                //todo — проверка, всё ли нам прислали, всё ли на месте. В идеале бы проверить размеры картинки по отношению к ватермарке.
                if (!file_exists($r['userfile_water_file'])) {
                    echo '<div class="error">' . t('Водяной знак:') . ' ' . t('файл водяного знака не найден! Загрузите его в каталог uploads/') . '</div>';
                } else {
                    $water_type = $r['water_type'];
                    // Расположение ватермарка
                    $hor = 'right';
                    //Инитим дефолтом.
                    $vrt = 'bottom';
                    //Инитим дефолтом.
                    if ($water_type == 2 or $water_type == 4) {
                        $hor = 'left';
                    }
                    if ($water_type == 2 or $water_type == 3) {
                        $vrt = 'top';
                    }
                    if ($water_type == 1) {
                        $hor = 'center';
                        $vrt = 'middle';
                    }
                    $r_conf = array('image_library' => 'gd2', 'source_image' => $up_data['full_path'], 'new_image' => $up_data['full_path'], 'wm_type' => 'overlay', 'wm_vrt_alignment' => $vrt, 'wm_hor_alignment' => $hor, 'wm_overlay_path' => $r['userfile_water_file']);
                    $CI->image_lib->initialize($r_conf);
                    if (!$CI->image_lib->watermark()) {
                        echo '<div class="error">' . t('Водяной знак:') . ' ' . $CI->image_lib->display_errors() . '</div>';
                    }
                }
            }
            # делаем миниатюру
            mso_upload_mini($up_data, $r);
            # превьюшка
            mso_upload_prev($up_data, $r);
        }
        return true;
    } else {
        $er = $CI->upload->display_errors();
        echo '<div class="error">' . t('Ошибка загрузки файла.') . $er . '</div>';
        return false;
    }
}