Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как разобрать имя файла?
 
 автор: ecipuser   (06.07.2013 в 02:59)   письмо автору
 
 

Доброго всем времени!!!!

Имеем:
группу фотографий:
pic1.jpg
pic1-1.jpg
pic1-2.jpg
pic1-N.jpg

Проще говоря pic1.jpg - это основная фотка, а все остальные pic1-1.jpg ... pic1-N.jpg это дополнительные для основной.

После загрузки всех фоток на сервер в нужную $dir
запускаем скрипт пакетной обработки фотографий в цикле
передаем имя файла в массив и разделяем имя файла и расширение
вот кусок кода :

 .....
foreach ($img as $k=>$v) {
    if (strpos($v,".")!==false) {
        if ($v != '.' && $v != '..') {
            $filenamearr = explode(".", $image);
            $myfile_nameonly = $filenamearr[0];
            $myfile_extension = $filenamearr[1];
             ......
        }
    }
}
.....

Суть задачи:
1) как можно определить основную фотографию группу (pic1.jpg) чтобы назначить ей статус = 1 , а всем остальным фот-ам группы соответственно 0 или 2?
2) как можно обрезать имя файла до тире ( из pic1-1 в pic1 )?
3) и если в имени файла встречается два тире в начале и в конце (из ppp-pic1-1 в ppp-pic1)?

Заранее всем спасибо!
***Прошу сильно не пинать, если что не так спросил или сформулировал

  Ответить  
 
 автор: confirm   (06.07.2013 в 06:40)   письмо автору
 
   для: ecipuser   (06.07.2013 в 02:59)
 

>После загрузки всех фоток на сервер в нужную $dir запускаем скрипт пакетной обработки

А сразу при загрузке навести нужный порядок в именах, и какой-то статус чему-то присвоить, это разве не лучше, чем потом ковыряться в каталогах?

  Ответить  
 
 автор: ecipuser   (06.07.2013 в 17:09)   письмо автору
 
   для: confirm   (06.07.2013 в 06:40)
 

Можно конечно и так, как Вы говорите.... Но ЧЕЛОВЕЧЕСКИЙ ФАКТОР....
Как говорит один хороший знакомый - Умненьких не много...
Приспичит манагеру сначала заказчать фотоки а уже потом прописать товар к этим фоткам ( как вариант) и как быть тогда?????

Решение вопроса есть, но при условии одного тире в наименовании файла

с помощью регулярного выражения можно разбить имя файла на состовляющие и сравнить
исходное имя с результатом

...
$shablon =  preg_match("/^([a-zA-z0-9]*)\-?([0-9]*)?$/",$myfile_nameonly, $matches);
echo '<pre>';
print_r($matches);
echo '<pre>';
...


а как быть, если в имени файла два тире, например, ppp-kkk1-01 или p-ppk1-01

и можно ли решить данный вопрос без регулярного выражения?

  Ответить  
 
 автор: confirm   (06.07.2013 в 17:54)   письмо автору
 
   для: ecipuser   (06.07.2013 в 17:09)
 

Ну-ну, еще и рег. выражений только и не хватало.

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

Что касается человеческих факторов, то не надо кивать на них, вы определяете правила, а не пользователь, а значит все "факторы" можно успешно решать.

  Ответить  
 
 автор: Sfinks   (06.07.2013 в 18:03)   письмо автору
 
   для: confirm   (06.07.2013 в 17:54)
 

> а значит все "факторы" можно успешно решать.
Я бы сказал: все факторы - это ваши недодумки и упущения.

(пардон, что вмешался =)

  Ответить  
 
 автор: Sfinks   (06.07.2013 в 18:01)   письмо автору
 
   для: ecipuser   (06.07.2013 в 17:09)
 

> Приспичит манагеру сначала заказчать фотоки а уже потом прописать товар к этим
> фоткам ( как вариант) и как быть тогда?????


Какая разница, что в каком порядке делать?
Если это вызывает проблемы, то говорит лишь о не правильной организации приложения!
А если манагер посмотрит 2 дня на страничку, скажет - не продается, и решит главной сделать другую фотку? Будете всем имена менять?

Должна просто быть таблица с именами файлов и информацией о них... Кто загрузил, когда, куда, откуда, к какому товару или группе относится, является ли фото главным, промодерировано ли оно..... И т.д. и т.п.
Тогда любые изменения не будут вызывать затруднений.
Тогда и файлы можно называть хоть так: 5e9673ba844592004001c8b149ae76df.jpg - это не будет иметь ни какого значения.

  Ответить  
 
 автор: ecipuser   (06.07.2013 в 22:18)   письмо автору
 
   для: Sfinks   (06.07.2013 в 18:01)
 

Это конечно правильное предложение.
но тут есть большое но..

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

  Ответить  
 
 автор: confirm   (06.07.2013 в 22:35)   письмо автору
 
   для: ecipuser   (06.07.2013 в 22:18)
 

А может фото товара принадлежать сразу и группе и товару? Наверное же это собственность товара, а не группы, а значит привязаны фото должны быть к товару. А уж товар хоть группе, хоть к полугруппе, как душа пожелает. И самое выгодное, это иметь его ID, и производные от него, и чем проще, тем лучше - 1.ext, 1-1.ext, 1-1-1.ext, это в дальнейшем может пригодится. И ни в коем случае не имена определенные пользователем, как типа того кошмара который вы представили - ppp12-hhh...

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

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

  Ответить  
 
 автор: Sfinks   (06.07.2013 в 17:51)   письмо автору
 
   для: ecipuser   (06.07.2013 в 02:59)
 

1. Я не понял зачем вы разделили вопрос на 3 пункта

2. Я не понял зачем у вас в цикле:
    if (strpos($v,".")!==false) { 
        if ($v != '.' && $v != '..') { 
откуда это у вас такой массив, в котором эти условия могут не выполняться?
Разве что из чего-то типа readdir().... Но в этом случае от ненужных элементов нужно избавляться на этапе формирования массива, а не обработки.

3. Отвечая на основной вопрос:
> как можно определить основную фотографию?
... вам не кажется, что у нее будет самое короткое имя? При чем тут РВ вообще?
<?php

  $min_len 
2147483647;
  foreach( 
$img as $k => $v ){
    
$name pathinfo$vPATHINFO_FILENAME );
    
$ext  pathinfo$vPATHINFO_EXTENSION );
    if( (
$len=mb_strlen($name)) < $min_len ){
      
$min_len $len;
      
$min_name $name;
    }
  }
  echo 
$min_name;

  Ответить  
 
 автор: ecipuser   (06.07.2013 в 21:54)   письмо автору
 
   для: Sfinks   (06.07.2013 в 17:51)
 

Благодарю за хорошую идею - короткого имени.
и огромное спасибо за участие.

на 1. ответ не дам, уж не оббесудте.
по 2. в принципе вы правы, массив создается

$img = scandir($filedir); 

по 3. ваше решение - будет иметь жизнь в моем проекте

еще раз спасибо

  Ответить  
 
 автор: confirm   (06.07.2013 в 22:00)   письмо автору
 
   для: ecipuser   (06.07.2013 в 21:54)
 

Это не решение, это самое худшее, что только можно представить.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования