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 :: Генерация названия для файла [2]

 PHP.SU

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


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

> Без описания
JustUserR
Отправлено: 17 Января, 2010 - 18:18:35
Post Id



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


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


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




A.N.R.I В том варианте что предлагая я имело в виду следующее - мы полность убираем имя исходного файла и заместо него берем код - то есть заместо abc.jpg получим типа 480124801284390.jpg с абсолтно уникальным именем
PHP:
скопировать код в буфер обмена
  1. $pieces=explode('.',$_FILES['file_name']['name']);
  2. $fname=uniqid().$pieces[count($pieces)-1];

Также можете добавить индектификатор пользователя и любые куски оригинального имени - поюс можно проверить чтобы имя не было длинее 256 символомчтобы не было проблем на некоторых ОС


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
A.N.R.I
Отправлено: 19 Января, 2010 - 19:29:02
Post Id



Гость


Покинул форум
Сообщений всего: 122
Дата рег-ции: Март 2009  
Откуда: Вінницька обл.


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




JustUserR пишет:
PHP:
скопировать код в буфер обмена
$pieces=explode('.',$_FILES['file_name']['name']);
$fname=uniqid().$pieces[count($pieces)-1];


Так, а как поставить точку после названия? И мне бы так id_login.jpg как так сделать??


-----
 
 Top
JustUserR
Отправлено: 20 Января, 2010 - 09:53:57
Post Id



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


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


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




A.N.R.I То есть у вас для каждого login/id будет только одно изображение? В таком случае подойдет вариант
PHP:
скопировать код в буфер обмена
  1. $pieces=explode(".",$_FILES['file_name']['name']);
  2. $fname="${id}_${login}.".$pieces[count($pieces-1)];

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


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
A.N.R.I
Отправлено: 20 Января, 2010 - 16:11:13
Post Id



Гость


Покинул форум
Сообщений всего: 122
Дата рег-ции: Март 2009  
Откуда: Вінницька обл.


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




JustUserR пишет:
A.N.R.I То есть у вас для каждого login/id будет только одно изображение? В таком случае подойдет вариант
Да, а зачем мне старый аватар? Его все ровно использовать не будут, по этому я его и удяляю. Все работает, только ошибку пишет:

rename(,user_2.jpg) [function.rename]: No error in Z:\home\localhost\www\work\blocks\profile.php on line 232

Вот эта строка:

$avatar = rename ($avatar_dir, $fname);


-----
 
 Top
vitaliy_mad
Отправлено: 20 Января, 2010 - 16:44:23
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




судя по этой записи
A.N.R.I пишет:
rename(,user_2.jpg)
первый параметр пустой...
 
 Top
A.N.R.I
Отправлено: 20 Января, 2010 - 17:11:35
Post Id



Гость


Покинул форум
Сообщений всего: 122
Дата рег-ции: Март 2009  
Откуда: Вінницька обл.


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




vitaliy_mad пишет:
первый параметр пустой...

Значит гте-то у меня ошибка:
PHP:
скопировать код в буфер обмена
  1.  
  2. $id=$results5['id'];
  3.          $results5['login'];
  4.          $pieces=explode('.',$_FILES['file_name']['name']);
  5. $fname="".$login."_".$id.".".$pieces[count($pieces)-1];
  6.  
  7. $avatar =  rename ($_FILES['file_name']['name'], $fname);
  8.          
  9.          
  10.        
  11.         copy($_FILES['file_name']['tmp_name'],'images/avatar/'.$fname);
  12.        
  13.           $myrowl5 = mysql_query ("UPDATE userlist SET avatar='{$fname}' WHERE id='$_GET[u]'  ");
  14.   }
  15.                 }
  16.   // Выводим ошибки при загрузке файла / сообщение успешной его закачки на экран
  17.   switch ($_FILES['file_name']['error'])
  18.   {
  19.     case 1:
  20.       echo "<font color='red'>Ошибка! Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini.</font>";
  21.       break;
  22.     case 2:
  23.       echo "<font color='red'>Ошибка! Размер принятого файла превысил максимально допустимый размер [",$_POST['MAX_FILE_SIZE'],"].</font>";
  24.       break;
  25.     case 3:
  26.       echo "<font color='red'>Ошибка! Загружаемый файл был получен только частично.</font>";
  27.       break;
  28.   }
  29.  


-----
 
 Top
Мелкий Супермодератор
Отправлено: 20 Января, 2010 - 17:48:07
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. rename ($_FILES['file_name']['name'], $fname);

$_FILES['file_name']['name'] - физически на сервере никогда не существует. Существует $_FILES['file_name']['tmp_name']

да и зачем вообще эта строка?

(Отредактировано автором: 20 Января, 2010 - 17:49:31)



-----
PostgreSQL DBA
 
 Top
A.N.R.I
Отправлено: 20 Января, 2010 - 18:31:08
Post Id



Гость


Покинул форум
Сообщений всего: 122
Дата рег-ции: Март 2009  
Откуда: Вінницька обл.


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




Мелкий пишет:
$_FILES['file_name']['name'] - физически на сервере никогда не существует. Существует $_FILES['file_name']['tmp_name']

да и зачем вообще эта строка?

Если брать tmp_name - ошибка выскакивает.

А как еще скопировать этот файл???


-----
 
 Top
Мелкий Супермодератор
Отправлено: 20 Января, 2010 - 18:33:32
Post Id



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


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


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




Собственно, 11 строка вашего исходника...


-----
PostgreSQL DBA
 
 Top
A.N.R.I
Отправлено: 20 Января, 2010 - 18:39:18
Post Id



Гость


Покинул форум
Сообщений всего: 122
Дата рег-ции: Март 2009  
Откуда: Вінницька обл.


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




Мелкий пишет:
Собственно, 11 строка вашего исходника...

Упс, не то сказал. Эта строка ПЕРЕИМЕНОВУЕТ файл. Или где-то я еще не доглядел??? Не понял


-----
 
 Top
Мелкий Супермодератор
Отправлено: 20 Января, 2010 - 18:41:34
Post Id



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


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


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




Про то и спрашиваю: зачем rename, если вы всё равно будете копировать файл в другое место под новым именем? А если сработает переименовывание, то файл, собственно, будет недоступен для копирования.


-----
PostgreSQL DBA
 
 Top
A.N.R.I
Отправлено: 20 Января, 2010 - 18:46:49
Post Id



Гость


Покинул форум
Сообщений всего: 122
Дата рег-ции: Март 2009  
Откуда: Вінницька обл.


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




Мелкий пишет:
Про то и спрашиваю: зачем rename, если вы всё равно будете копировать файл в другое место под новым именем? А если сработает переименовывание, то файл, собственно, будет недоступен для копирования.


т.е так сделать:
PHP:
скопировать код в буфер обмена
  1.  
  2. copy($_FILES['file_name']['tmp_name'],'images/avatar/'.$_FILES['file_name']['name']);
  3.        
  4.         $id=$results5['id'];
  5.          $results5['login'];
  6.          $pieces=explode('.',$_FILES['file_name']['name']);
  7. $fname="".$login."_".$id.".".$pieces[count($pieces)-1];
  8.  
  9. $avatar =  rename ($_FILES['file_name']['name'], $fname);
  10.        
  11.           $myrowl5 = mysql_query ("UPDATE userlist SET avatar='{$fname}' WHERE id='$_GET[
  12.  
???


Тогда пишет:

Warning: unlink(images/avatar/user_2.gif) [function.unlink]: No such file or directory in Z:\home\localhost\www\work\blocks\profile.php on line 223

Warning: rename(22789637.gif,user_2.gif) [function.rename]: No such file or directory in Z:\home\localhost\www\work\blocks\profile.php on line 238


-----
 
 Top
Мелкий Супермодератор
Отправлено: 20 Января, 2010 - 18:54:27
Post Id



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


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


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




Скорее так:
PHP:
скопировать код в буфер обмена
  1. $id=$results5['id'];
  2.          $results5['login'];
  3.          $pieces=explode('.',$_FILES['file_name']['name']);
  4. $fname="".$login."_".$id.".".$pieces[count($pieces)-1];
  5.        
  6.         copy($_FILES['file_name']['tmp_name'],'images/avatar/'.$fname);
  7.        
  8.           $myrowl5 = mysql_query ("UPDATE userlist SET avatar='{$fname}' WHERE id='$_GET[u]'  ");
  9.   }
  10.                 }
  11.  

Отстаньте от rename, copy нормально умеет переименовать по ходу перемещения файла Улыбка

(Отредактировано автором: 20 Января, 2010 - 18:56:09)



-----
PostgreSQL DBA
 
 Top
A.N.R.I
Отправлено: 20 Января, 2010 - 19:45:16
Post Id



Гость


Покинул форум
Сообщений всего: 122
Дата рег-ции: Март 2009  
Откуда: Вінницька обл.


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




Мелкий пишет:

Отстаньте от rename, copy нормально умеет переименовать по ходу перемещения файла
О, спасибо. Тот пример я просто нашел и не знал, что он может.
Где + влипить можно, или здесь кармы нет??


-----
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB