Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: загрузка файла на сервер

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ex
Отправлено: 29 Апреля, 2014 - 23:23:34
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




В общем у меня простая, стандартная форма загрузка файла на сервер:
Спойлер (Отобразить)

так вот, как сделать так, если существует файл с таким именем, то не заменять его (сейчас он тупо заменяет файл), а просто добавить _1, если еще рас будет такое - _2, _3, ..., _n.
То есть, что бы дописывалось к окончанию названию символы.
Я чот мудрил, оно дописывало эти символы не к названию а к расширению файла Ха-ха
 
 Top
3d_killer
Отправлено: 30 Апреля, 2014 - 10:31:53
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




PHP:
скопировать код в буфер обмена
  1. $type=".".end(explode('.', $file));
  2. $i=0;
  3. if(is_file($folder.$name.$type))
  4.         {
  5.                 while(is_file($folder.$name."-".$i.$type))
  6.                         {
  7.                                 $i++;
  8.                         }
  9.                                 $name=$name."-".$i;
  10.         }
  11. else
  12.         {
  13.                 //Не существует такого файла можно сохранять
  14.         }
 
My status
 Top
Zuldek
Отправлено: 30 Апреля, 2014 - 10:44:42
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Цитата:
PHP:
скопировать код в буфер обмена
  1. if(is_file($folder.$name.$type))
  2.         {
  3.                 while(is_file($folder.$name."-".$i.$type))
  4.                         {
  5.                                 $i++;
  6.                         }
  7.                                 $name=$name."-".$i;
  8.         }
  9. else
  10.         {
  11.                 //Не существует такого файла можно сохранять
  12.         }
  13.  

ваш код не будет работать как вы ожидаете. is_file весьма ресурсоёмкая функция и проверять наличие всех файлов директории в цикле чтобы дописать нужный префикс — ахинея.

(Отредактировано автором: 30 Апреля, 2014 - 10:47:58)

 
 Top
3d_killer
Отправлено: 30 Апреля, 2014 - 11:10:30
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




можно получить массив и проверять функцией in_array
получение

PHP:
скопировать код в буфер обмена
  1.  
  2. $directory=opendir($url);
  3. while (false !== ($filename = readdir($directory)))
  4.         {
  5.                 if ($filename != "." & $filename != "..")
  6.                         {
  7.                                 //Получаем массив файлов
  8.                                 $files[] = mb_convert_encoding($filename, 'UTF-8','Windows-1251');
  9.                         }
  10.         }
  11.  

(Добавление)
Zuldek вы думаете что там 100500 файлов у человека? если нет то это будет совсем незаметно (ну сколько в цикле проверит 1, 2, 3 файла если не будет грузить все файлы с именем 1.jpg отлично будет работать и тот код)

(Отредактировано автором: 30 Апреля, 2014 - 11:11:17)

 
My status
 Top
Мелкий Супермодератор
Отправлено: 30 Апреля, 2014 - 11:22:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А можно начать идти с другого конца проблемы - что с этими файлами делать дальше.
Ведь если файлики регистрируются в СУБД (например, кто и когда загрузил) - то у вас на руках гарантированно уникальное имя файла - значение автоинкрементного поля. Оригинальное имя сохранили в БД, на диск в качестве имени файла берёте тупо число (без расширения, за ненадобностью).


-----
PostgreSQL DBA
 
 Top
Zuldek
Отправлено: 30 Апреля, 2014 - 11:27:31
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Цитата:
А можно начать идти с другого конца проблемы

Именно.
Причем для работы с файлами написать нормальный класс (тут на форуме были представлены подобные, включая мой), в числе прочего, сохраняющий не все файлы в одную директорию, а, к примеру, создающий директорию на основе имени файла.

(Отредактировано автором: 30 Апреля, 2014 - 11:35:34)

 
 Top
esterio
Отправлено: 30 Апреля, 2014 - 12:22:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




3d_killer пишет:
$type=".".end(explode('.', $file));

Как задолбало видеть повсюду такое определение расширения файла. Ведь есть уже стандартная функция
 
 Top
Ex
Отправлено: 30 Апреля, 2014 - 15:01:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




спасибо большое, вчера еще решил проблему Улыбка
но прочитал ваши советы, переделал и все работает на ура Подмигивание

в итоге такое вот:
PHP:
скопировать код в буфер обмена
  1. if(is_file($dir . $upfile_name)) {
  2. while(is_file($dir . $i . $upfile_name)) {$i++;}
  3. $upfile_name = $i . $upfile_name;}
  4.  
 
 Top
3d_killer
Отправлено: 30 Апреля, 2014 - 15:07:41
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




esterio из старого скрипта взял
 
My status
 Top
esterio
Отправлено: 30 Апреля, 2014 - 16:01:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




3d_killer это скорее не претензия к вам. просто достало видеть повсюду такой г*код
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB