Как переименовать картинку при загрузке

yeaahhh

Старатель
Регистрация
8 Май 2008
Сообщения
278
Реакции
11
Друзья. Подскажите, пожалуйста, как переименовать загруженный файл?
Чтобы imagecreatefromjpeg могла найти файл, если в нём есть русские символы.. А то что-то не находит, когда русские символы..
Заранее спасибо.
 
свой код для начала выложи скорее всего в нем ошибка (если делал по примеру)
а в общем кури маны - там есть примеры и понятно что откуда берется и куда сохранять указываешь ты сам.
 
form_image - form-элемент типа file
$new_name - новое имя картинки
$picture_path - полный путь до каталога с картинкой
PHP:
		if ($_FILES['form_image']['tmp_name'] != "")
		{
			    if (move_uploaded_file($_FILES['form_image']['tmp_name'], $picture_path."/".$new_name))
		};
 
Вот код..
PHP:
$path_to_90_directory = "photo/".$user."/";

		$filename = $_FILES['myfile']['name'];
		$source = $_FILES['myfile']['tmp_name'];
   		$target_path = $destination_path  . "photo/".$user."/" . basename($filename);
		@move_uploaded_file($source, $target_path);
	if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
		$im = imagecreatefromjpeg($path_to_90_directory.$filename);
	}
P.S. Фото с названием "sdfsdf" - загружает, "333"-загружает, "ываыва"- не загружает, "- зима" - не загружает..
 
Проблему решил. Она заключалась в "basename($filename)".
Спросони не заметил. Всем спасибо
 
Как вариант перименовывать по текущей секунде/времени на сервере.
 
Вот хотябы так надо.
- Добавляем в начало имени файла штамп времени (Это позволит нам не попасть в ситуацию, когда файл с таким именем уже есть на сервере)
- Конвертим все символы кроме a-z,0-9,_,-,. - заменяем на тире. (позволит нам избежать в будущем гемороя при копировании/переносе файлов с русскими именами)

PHP:
$path_to_90_directory = "photo/".$user."/";

        $filename = time()."-".$_FILES['myfile']['name'];
        $filename = preg_replace('/[^a-z0-9_\-\.]/i', '-',$logo);
        $source = $_FILES['myfile']['tmp_name'];
           $target_path = $destination_path  . "photo/".$user."/" .$filename;
        @move_uploaded_file($source, $target_path);
    if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
        $im = imagecreatefromjpeg($path_to_90_directory.$filename);
    }
 
Вот хотябы так надо.
- Добавляем в начало имени файла штамп времени (Это позволит нам не попасть в ситуацию, когда файл с таким именем уже есть на сервере)
- Конвертим все символы кроме a-z,0-9,_,-,. - заменяем на тире. (позволит нам избежать в будущем гемороя при копировании/переносе файлов с русскими именами)

ну и зачем так усложнять? =)

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

так что лучше использовать что-то типа следующего, ( для генерации уникального значения/имени файла)

PHP:
list($usec, $sec) = explode(' ', substr(microtime(), 2));
$rand =  substr($sec.$usec, 0, 15); // ну и его уже использовать в названии

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

уникального значения сгенерированного кодом выше хватит с головой


ну и код не есть безопасный .. таким макаром на сервак загрузят какую-то гадость..
к примеру это
PHP:
  if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {

переименуйте пхп файл на index.php.jpg и скрипт его загрузит на сервак .. правда потом с imagecreatefromjpeg будет какой-то казус и может ниже этот файл удаляется .. но тем не менее

вот надыбал ссылки .. - почитайте, есть и примеры и лирическое отступление
 
Генерируйте новые имена при загрузке и шифруйте их, уникальность имен + удобство

PHP:
md5($fitename.date('U'))
 
Назад
Сверху