ФорумПрограммированиеPHP для идиотов → Имена картинок в галерее

Имена картинок в галерее

  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 27 августа 2008 г. 9:25

    Долго думал на эту тему. Дабы избежать коллизий, сделал так:
    $name = strtolower($name);
    $name = str_replace(array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'), array('a', 'b', 'v', 'g', 'd', 'e', 'e', 'j', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sh', '', 'i', '', 'e', 'yu', 'ya'), $name);
    $name = preg_replace("/[^A-z0-9_-]/", '', $name);
    $name .= substr(md5(mktime()), 0, 5);
    $name .= $ext;

    У кого какие мысли по этому поводу и вообще, как вы именуете файлы после аплоада?
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 27 августа 2008 г. 9:34, спустя 9 минут 34 секунды

    я транслитирую русские символы и, если файл с таким именем уже существует, то я добавляю к нему _$i в цикле
    все умрут, а я изумруд
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 27 августа 2008 г. 10:03, спустя 28 минут 44 секунды

    KENDO,

    Я гдет ужо это тут спрашивал. Пользователи винды очень любят вордовские кавычки [shift+2] и символ Номера - что тожа как то где то доставить мороку может

    Я добавляю:

    $str= ereg_replace('-', '_', $str);
    $str= ereg_replace(' ', '_', $str);
    $str= ereg_replace('\'', '', $str);
    $str= ereg_replace('"', '"', $str);

    // вордовские кавычки
    $str= ereg_replace('»', '»', $str);
    $str= ereg_replace('«', '«', $str);

    $str= ereg_replace('№', '№', $str);

    // Одиночные кавычки
    $str= ereg_replace('‘', '‘', $str);
    $str= ereg_replace('’', '’', $str);

    // Двойные кавычки
    $str= ereg_replace('“', '“', $str);
    $str= ereg_replace('”', '”', $str);

    Кроме того функция

    $str= strtolower($str);

    не всегда кириллицу умеет опускать [заметил на своем хостинге, причем ___только с несколькими___ из букв] :) Поэтому я для страховки еще и большие буквы ereg_replace.

    А так щас бывает в качестве имени даю значение типа rand(1329923, 83847836627) + дату когда загружено. по дате можно немного ориентироваться если в файлах копаешься, а так - всю инфу о картинке в базу.
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 27 августа 2008 г. 10:07, спустя 4 минуты 12 секунд

    Вот еще юзаю в галерее :
    сделать пропорциональный макетик изображения


    function img_proportional_resize($from, $to, $width, $format='jpg'){
    if(!is_img($from)) return false;

    // Получить размер изображения
    $img_sz= img_size($from);
    $x= $img_sz['x']; $y= $img_sz['y'];
    if($x==0 || $y==0) return false;

    // Определяем пропорциональный размер картинки
    $new_x= $width;
    $proportion= $x/$new_x;
    $new_y= $y/$proportion;

    if($new_x==0 || $new_y==0) return false;

    // Формируем имя функции
    $szSize= strlen($from);
    $type= substr($from, $szSize-3, $szSize);
    if($type=='peg')$type='jpeg'; // 3 chars from end of 'jpeg'
    if($type=='jpg')$type='jpeg';
    $funct= 'imagecreatefrom'.$type;

    // В эту переменную заносим изображение в неком 'среднем' формате
    $_img= $funct($from);
    // Заготовка для нового изображения с новыми размерами
    $dst = imagecreatetruecolor($new_x,$new_y);

    /* Копируем изображение из безформатного типа в заготовку с установленными размерами */
    ImageCopyResized(
    $dst,$_img,
    0,0, // начало координат откуда будет идти отрисовка в конечную картинку
    0,0, // начало координат откуда будет идти выемка изображения из исходной картинки
    $new_x,$new_y, // размер конечной области исходной картинки (т.е. растянуть/сжать ли ее)
    $x,$y // размер копируемой области исходной картинки от начала установленного нуля координат
    );

    // Сохраняем заготовку в нужном формате
    if($format=='png'){
    ImagePng($dst,$to);
    ImageDestroy($_img);
    ImageDestroy($dst);
    return true;
    }elseif($format=='gif'){
    ImageGif($dst,$to);
    ImageDestroy($_img);
    ImageDestroy($dst);
    return true;
    }else{
    ImageJpeg($dst,$to,100);
    ImageDestroy($_img);
    ImageDestroy($dst);
    return true;
    }
    }

    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 27 августа 2008 г. 10:20, спустя 13 минут

    killich, мне кажется тебе лучше попробывать вместо ereg_replace - str-replace. Там можно массивы передать, а не только строки. Поэтому ты не будешь 11 раз вызывать ereg_replace. :)
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 27 августа 2008 г. 10:30, спустя 9 минут 40 секунд

    а, ну эт да. эт я типа для демонстрации :) вынул из старого скрипта где то
    …. прям в краску ввел :)
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 27 августа 2008 г. 10:59, спустя 29 минут 31 секунду

    Killich, за функцию спасибо, но я и сам уже писал подобную, да и в готовых решениях уже было. Свой велосипед лучше :D
    Далее. Зачем кавычки и прочие спец. символы в имени файла для галереи?
    Просто целью у моего скрипта было создать простенькую галерею и чем проще, тем лучше для юзверя будет.
    Кстати, а есть ограничение на длину имени файла?
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 27 августа 2008 г. 11:07, спустя 7 минут 15 секунд

    Зачем кавычки и прочие спец. символы

    эт если сам наполняешь - хорошо. а когда тетя из бухгалтерии - это хужее. вот и ответ. да свой велик чище, проще и добрее. да и функция то демонстративная больше.
    на длину имени файла

    думаю стоит подбирать так, что б путь к имени файла все же укладывался до 255 символов, а лучше 64. А так - не задавался вопросом.
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 27 августа 2008 г. 12:23, спустя 1 час 16 минут 28 секунд

    Я транситерирую кирилицу, оставляю латиницу и цифры, остальное режу да и все, а если файл с таким именем уже существует, то _$i в цикле :)
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 27 августа 2008 г. 12:58, спустя 35 минут 24 секунды


    Я транситерирую кирилицу, оставляю латиницу и цифры, остальное режу да и все, а если файл с таким именем уже существует, то _$i в цикле :)
    повтор на втором игроке!! )))
    все умрут, а я изумруд
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 27 августа 2008 г. 13:04, спустя 5 минут 14 секунд

    Я не виноват, что мы одинаково делаем :)
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 27 августа 2008 г. 13:28, спустя 23 минуты 55 секунд

    а я пихаю в яндекс.фотки и парсю потом :)
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 27 августа 2008 г. 13:42, спустя 14 минут 28 секунд

    а я пихаю в яндекс.фотки и парсю потом

    Кажется самое правильное решение из предложенных здесь. :)
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru

Пожалуйста, авторизуйтесь, чтобы написать комментарий!