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
Форумы портала PHP.SU :: Версия для печати :: Генерация названия для файла
Форумы портала PHP.SU » PHP » Программирование на PHP » Генерация названия для файла

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

1. A.N.R.I - 16 Января, 2010 - 21:00:08 - перейти к сообщению
Короче хочу сделать генерацию названия файла аватара. Т.е. если заливали файл noavatar.png его нужно переименовать на другой (типа wqjl2jklk2.png), что б не было замен одной картинки на другую.

На сколько я понял переименовать можно так:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $avatar =  rename ($_FILES['file_name']['name'], $new_name)
  3.  


Так вот, мне нужно как-то сгенерировать названия для переменной $new_name, что бы совпадения приближались до 0, и что бы расширения тоже сохранялось. Кто-то подскажет в чем проблема?

Кстати, поставил загрузку аватара на сайт, переместил на хостинг, и иногда сайт в дауне и мне пишет: "Apache is functioning normally" - что делать??
2. Мелкий - 16 Января, 2010 - 21:16:10 - перейти к сообщению
Как вариант - использовать id юзера из базы Улыбка
а вообще: http://php.su/functions/?tempnam
3. A.N.R.I - 16 Января, 2010 - 21:23:27 - перейти к сообщению
Мелкий пишет:
Как вариант - использовать id юзера из базы
хм, можно. Проблем потом, по теории, не должно быть. Но я еще подумаю Радость
(Добавление)
Мелкий, ты есть на ДПК? А то ник знаком Радость
(Добавление)
Есть проблемка при переименовании - как расширения оставить старое??
4. Мелкий - 16 Января, 2010 - 22:10:14 - перейти к сообщению
A.N.R.I пишет:
Есть проблемка при переименовании - как расширения оставить старое??

а зачем? Улыбка
5. A.N.R.I - 16 Января, 2010 - 22:39:30 - перейти к сообщению
Мелкий пишет:
PHP:
скопировать код в буфер обмена
$ext = substr($filename,strrpos($filename,"."));


Не пашет:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. copy($_FILES['file_name']['tmp_name'],'images/avatar/'.$_FILES['file_name']['name']);
  3.        
  4.         $file_rename = substr($_FILES['file_name']['name'],strrpos($_FILES['file_name']['name'],"."));
  5.         $filename = "".$results5['id']."".$file_rename."";
  6.          $avatar =  rename ($_FILES['file_name']['tmp_name'], $filename);
  7.           $myrowl5 = mysql_query ("UPDATE userlist SET avatar='{$avatar}' WHERE id='$_GET[u]'  ");
6. JustUserR - 17 Января, 2010 - 12:06:28 - перейти к сообщению
A.N.R.I Может использовать uniqid чтобы названия не затирались?
7. A.N.R.I - 17 Января, 2010 - 12:22:52 - перейти к сообщению
JustUserR пишет:
A.N.R.I Может использовать uniqid чтобы названия не затирались?


а как использовать. Я прочитал описание - эта функции генерирует название на основе микросекунд и т.д, да? А как тогда переименовать, что бы расширение не поменялось?
8. JustUserR - 17 Января, 2010 - 12:26:41 - перейти к сообщению
A.N.R.I Берете имя закачанного файла и explode-ите его по точкам в названии и выбираете последний элемент (По сути расширения файла) - потом делаете uniqid и добавляете к нему расширение
9. A.N.R.I - 17 Января, 2010 - 12:37:01 - перейти к сообщению
JustUserR пишет:
A.N.R.I Берете имя закачанного файла и explode-ите его по точкам в названии и выбираете последний элемент (По сути расширения файла) - потом делаете uniqid и добавляете к нему расширение

Так?
CODE (text):
скопировать код в буфер обмена
  1.  
  2. $pieces = explode(".", $_FILES['file_name']['name']);
  3.  
  4.  
  5. $avatar = "".$results5['id']."_".$results5['login']."".$pieces[1].""
  6.  
  7.  


И у финале должно получиться 1_admin.gif , да?
а если файл будет:
2_a.n.r.i.gif - картинка будет показываться???
(Добавление)
И еще, как уменьшить изображения пропорционально. Т.е. есть изображенния 200х100, а нужно сделать, что бы ширина была не больше за 150px, а высота сама подогналась?

Нашел такое:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?
  3. function imageresize($outfile,$infile,$percents,$quality) {
  4.     $im=imagecreatefromjpeg($infile);
  5.     $w=imagesx($im)*$percents/100;
  6.     $h=imagesy($im)*$percents/100;
  7.     $im1=imagecreatetruecolor($w,$h);
  8.     imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
  9.  
  10.     imagejpeg($im1,$outfile,$quality);
  11.     imagedestroy($im);
  12.     imagedestroy($im1);
  13.     }
  14.  
  15. imageresize("","webcam.jpg",30,75);
  16.  
  17. ?>
  18.  

Как подогнать под мои требования???
10. andrweb - 17 Января, 2010 - 15:54:15 - перейти к сообщению
Мой совет используй функцию time() и сохраняй аватары в одной папке и в базе. Имена в папке никогда не совпадут.
11. A.N.R.I - 17 Января, 2010 - 17:22:08 - перейти к сообщению
andrweb пишет:
Мой совет используй функцию time() и сохраняй аватары в одной папке и в базе. Имена в папке никогда не совпадут.

Нет, так не пойдет. Уже почти получилось!!!!

Аватар загружает, но пишет:
Warning: rename(9517.jpg,2_user.jpg) [function.rename]: No such file or directory in Z:\home\localhost\www\work\blocks\profile.php on line 233
CODE (text):
скопировать код в буфер обмена
  1.  $pieces = explode(".", $_FILES['file_name']['name']);
  2.  
  3.  $avatar_dir="".$_FILES['file_name']['name']."";
  4. $new_name = "".$results5['id']."_".$results5['login'].".".$pieces[1]."";
  5.  
  6. $avatar =  rename ($avatar_dir, $new_name);
  7.          
  8.          
  9.        
  10.         copy($_FILES['file_name']['tmp_name'],'images/avatar/'.$new_name);
  11.        
  12.           $myrowl5 = mysql_query ("UPDATE userlist SET avatar='{$new_name}' WHERE id='$_GET[u]'  ");


Кстати, как сделать, что бы бралась ПОСЛЕДНЯЯ точка, а то если загрузить аватар a.n.r.i.jpg аватар то есть, но названия 1_a.n.r.i.n
12. andrweb - 17 Января, 2010 - 17:30:34 - перейти к сообщению
Не мучейся. Попробуй тайм и ненадо ничего разбивать и тд. У аватара будет уникальное имя и никаких проблем.
13. A.N.R.I - 17 Января, 2010 - 17:33:48 - перейти к сообщению
andrweb пишет:
Не мучейся. Попробуй тайм и ненадо ничего разбивать и тд. У аватара будет уникальное имя и никаких проблем.
На сколько я понял - скинуть в папку, переименовать и в поле БД написать путь к файлу???
14. andrweb - 17 Января, 2010 - 17:43:27 - перейти к сообщению
Цитата:
На сколько я понял - скинуть в папку, переименовать и в поле БД написать путь к файлу???

Да. Таймом преобразовываешь имя. Копируешь файл с преобразованным именем. Заносишь путь к файлу с преобразованным именем в базу под нужным id. И пользуйся. Также таймом можно сохранять и дату добавления. А при выводе пробразовывать обратно в дату.
15. A.N.R.I - 17 Января, 2010 - 17:50:51 - перейти к сообщению
andrweb пишет:
Да. Таймом преобразовываешь имя. Копируешь файл с преобразованным именем. Заносишь путь к файлу с преобразованным именем в базу под нужным id. И пользуйся. Также таймом можно сохранять и дату добавления. А при выводе пробразовывать обратно в дату.


Так у меня почти тоже. Только переименовую на id_login . расширения прикрепляю после точки (от по этому и нужна помощь) и переношу из tmp в папку images/avatar. А в БД записываю названия файла.
(Добавление)
Если не так: помоги кодом

 

Powered by ExBB FM 1.0 RC1