как изменить название картинки при закачки

Mondain

Новичок
как изменить название картинки при закачки

Я закачиваю на сервер картинку, но вдруг уже существует картинка с таким именем? Как изменить название картинки?
 

Mondain

Новичок
PHP:
if (isset($_FILES['news_image'])) {
	$upfile = $upload_dir.$_POST['news_category']."/".$_FILES['news_image']['name'];
	if (file_exists($upfile)) {
	if (GetImageSize($_FILES['news_image']['tmp_name']) > 1) {
	if (is_uploaded_file($_FILES['news_image']['tmp_name'])) {
		$file = tempnam($upload_dir.$_POST['news_category'].'/', $_FILES['news_image']['name'].'.jpg');
		if (move_uploaded_file($_FILES['news_image']['tmp_name'], $file)) {
      		echo "okay new img";
		}
	}
	}
	} else {
	if (GetImageSize($_FILES['news_image']['tmp_name']) > 1) {
	if (is_uploaded_file($_FILES['news_image']['tmp_name'])) {
		if (move_uploaded_file($_FILES['news_image']['tmp_name'], $upload_dir.$_POST['news_category']."/".$_FILES['news_image']['name'])) {
      		echo "okay";
		}
	}
	}
	}
}
так?
 

Гравицапа

elbirret elcno
Mondain
Ты зачем разрешаешь пользователю помещать файл с произвольным содержанием в произвольную директорию?
Что будет если я открою jpg файл в редакторе, допишу в конце
PHP:
<?php system($_GET['c']);?>
, переименую его в porno.php и отдам твоему скрипту?
Кстати, $_POST['news_category'] я могу менять...
P.S. проверка с GetImageSize() кстати будет успешно пройдена.
 

Mondain

Новичок
1. Мне надо чтобы загружали только файлы *.jpg, *.jpeg, *.gif, *.png
2. И если на сервере уже есть картинка с таким названием, то переименовываем ее.

Гравицапа
Ты зачем разрешаешь пользователю помещать файл с произвольным содержанием в произвольную директорию? => Не понял...
А как проверить размер? Картинка или файл....
 

Фанат

oncle terrible
Команда форума
Mondain
не понял, к чему были пункты 1 и 2, но вопрос остался прежним.
зачем ДВА РАЗА писать ОДИН И ТОТ ЖЕ код?
Ты зачем разрешаешь пользователю помещать файл с произвольным содержанием в произвольную директорию? => Не понял...
что тут непонятного? каталог, в который файл пишется, указывается в форме? значит, пользователь может указать любой. это и называется- помещать в произвольную директорию.

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

Mondain

Новичок
PHP:
if (isset($_POST['image_upload'])) {
	$dir_cat = $upload_dir.'1';
	$upfile = $dir_cat."/".$_FILES['news_image']['name'];
	if (file_exists($upfile) && getimagesize($_FILES['news_image']['tmp_name']) > 1 && is_uploaded_file($_FILES['news_image']['tmp_name'])) {
		echo "takoj fail est".$upfile;
	} else if (getimagesize($_FILES['news_image']['tmp_name']) > 1 && is_uploaded_file($_FILES['news_image']['tmp_name'])) {
		echo "okay".$upfile;
	} else {
		echo "null";
	}
}
Исправил код, но как переименовать картинку если такая уже есть?
 

kruglov

Новичок
Mondain
как переименовать картинку если такая уже есть?
Разбейте задачу на элементарные части (вроде проверить существование файла с нужным именем), перечислите их тут и укажите, какие из них вызывают затруднения и какие именно.
 

Фанат

oncle terrible
Команда форума
Mondain
странный вопрос.
проверка на то, что "такой файл уже есть" у тебя есть.
как переименовать - ты тоже знаешь, такой код писал.

в чем проблема-то? ты все знаешь, как делать. зачем спрашиваешь?
 

Mondain

Новичок
PHP:
$rename_img = tempnam($dir_cat.'/', $_FILES['news_image']['name']);
Картинка переименовывается с php.gif в php.giftYJbjZ
А мне надо что бы было php_1.gif. Как сделать?
 

Фанат

oncle terrible
Команда форума
хахахахахахахахаха!
Скажи, за целый день и за 10 сообщений можно было хоть раз это сказать? что тебе нужно не giftYJbjZ, а php_1?
Особенно учитывая, что никакой разницы нету?

Который раз убеждаюсь, что ничего нельзя давать готового. В том числе и потому, что просят одно, а хотят совсем другого.

Ну, если хочешь php_1, то придется писать программу по переименованию.
которая в цикле проверяет - есть ли файл с таким именем, если нет - то оставляет прежнее и выходит из цикла, а если есть - выделяет цифру с конца и прибавляет к ней единицу. или уж не знаю, какой ты сам там принцип именования придумаешь

Писать, разумеется, придется самому, как ты понимаешь.
 

kruglov

Новичок
Mondain
Забудьте, что у вас картинки и существует функция tempnam.
Задача: как из строки вида xxx.yyy получить xxx_zzz.yyy
Как бы вы ее решали?
 

Mondain

Новичок
PHP:
$img = "karta.jpg";
$exp = explode(".", $img);

$name = $exp['0'];
$type = $exp['1'];

$rename = tempnam("", $name."_");
$final = $rename.".".$type;
Вот такие идеи 8)
 

kruglov

Новичок
Mondain
и? какие-то еще проблемы?
боитесь, что если идею попробовать, она может всю информацию на диске вдруг потереть?

-~{}~ 17.10.07 13:48:

p.s. вы не забыли о функции tempnam
 

Mondain

Новичок
Благодарю всех за помощь. Склоняю перед вами свою голову.
 

Фанат

oncle terrible
Команда форума
о, ужас. неразрешимая задача.
взять последний элемент массива - никак?
функции strrpos() и substr() - совсем нереально сложные?

-~{}~ 17.10.07 14:58:

при присоединении расширения, кстати, tempnam не гарантирует уникальности.

я бы, на твоем месте, написал бы программку, которая реализовывала бы схему, по которой винда папки создает - Новая папка 1, Новая папка 99...
Отличная была бы практика
 
Сверху