[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файлов на сервер с переименованием
Xakep
Всем приветесть такой скрипт загрузки фотографий на сервер:


<form action="" method="post" enctype="multipart/form-data">
<
input type="file" name="img" size="30" />
<
br /><br />
<
input type="submit" value="загрузить" name="go" />
</
form>

<?php
$_max_image_size="71680";
$_max_image_width="250";
$_max_image_height="250";
$_valid_image_type=array("GIF","JPG","PNG","JPEG","gif","jpg","png","jpeg");
$_size_image=GetImageSize($_FILES['img']['tmp_name']);

if(isset($_POST['go'])) {
if(is_uploaded_file($_FILES['img']['tmp_name'])) {
$image_name=$_FILES['img']['tmp_name'];
$ext_image=substr($_FILES['img']['name'],
1 + strrpos($_FILES['img']['name'], "."));
if(filesize($image_name)>$_max_image_size) {
print "Размер файла не может превышать 70 Кб<br>
"
;
exit;
}
if(!in_array($ext_image,$_valid_image_type)) {
print "Тип файла не поддерживается";
exit;
}
if (($_size_image) && ($_size_image[0] <= $_max_image_width) && ($_size_image[1] <= $_max_image_height)) {

$copy_image=move_uploaded_file($image_name,"22/".$_FILES['img']['name']."");
if ($copy_image) {
print "Фотография загружена!";
exit;
} else {
print "Ошибка загрузки фотографии";
exit;
}
}
else {
print "Фотография превышает габариты!";
exit;
}
}
else {
print "Ошибка";
exit;
}
}

?>


так вот допустим я загрузил картинку imgae.jpg. А если кто то загрузил другую картинку но с таким же именем то он же ее просто заменит и все, а как сделать так чтоб он проверял есть ли такое имя уже или нет и если есть то задавал другое случайное...

я знаю что проверять файл на существование буду так:

if (file_exists("22/".$_FILES['img']['name'].""))


вся проблема в том что незнаю как вытащить из $_FILES['img']['name'] название до точки (т.е. без расширения) задать другое имя и уже переименовать его в новое имя с тем же расширением.

ЗЫ: я никогда не любил строковые функции и по этому я на них не уделял внимания и времени, но как оказалось что инногда они очень даже полезны )



Спустя 19 минут, 48 секунд (14.01.2012 - 00:48) Winston написал(а):

 ! 

М
Переименуй тему иначе закрою !!!
Winston

Спустя (14.01.2012 - 00:47) Winston написал(а):
При загрузки файл всегда добавляй к его имени рандомное значение, например так
$imgInfo = pathinfo($image_name, PATHINFO_EXTENSION | PATHINFO_FILENAME);
$newName = $imgInfo['filename'] . time() . '.' . $imgInfo['extension'];
$copy_image=move_uploaded_file($image_name,"22/".$newName);

Спустя 3 минуты, 22 секунды (14.01.2012 - 00:50) Xakep написал(а):
Winston
Спасибо, до этого я сам не додумался sad.gif

Спустя 38 минут, 44 секунды (14.01.2012 - 01:29) killer8080 написал(а):
Xakep
когда то решал аналогичную задачу. Я делал иначе, добавлял к имени файла числовой индекс. Типа такого
pic.jpg, pic2.jpg, pic3.jpg
вот кусок кода, адаптируй под себя
if(!file_exists($upload_dir.'/'.$_FILES['photo']['name'])){
$file = $upload_dir.'/'.$_FILES['photo']['name'];
}
else{
$name = pathinfo($_FILES['photo']['name'], PATHINFO_FILENAME);
$ext = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
$pattern = '#^'.preg_quote($name, '#').'(\d+)\.'.$ext.'$#i';
$handle = opendir($upload_dir);
$n = 0;
while(($file_name = readdir($handle)) !== false){
if(preg_match($pattern, $file_name, $match)){
$n = max($n, $match[1]);
}
}

closedir($handle);
$n++;
$file = $upload_dir.'/'.$name.$n.'.'.$ext;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.