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

Тема в разделе "PHP", создана пользователем yeaahhh, 20 янв 2011.

Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья. Подскажите, пожалуйста, как переименовать загруженный файл?
    Чтобы imagecreatefromjpeg могла найти файл, если в нём есть русские символы.. А то что-то не находит, когда русские символы..
    Заранее спасибо.
     
  2. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    свой код для начала выложи скорее всего в нем ошибка (если делал по примеру)
    а в общем кури маны - там есть примеры и понятно что откуда берется и куда сохранять указываешь ты сам.
     
  3. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    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))
            };
     
  4. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Вот код..
    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"-загружает, "ываыва"- не загружает, "- зима" - не загружает..
     
  5. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Проблему решил. Она заключалась в "basename($filename)".
    Спросони не заметил. Всем спасибо
     
  6. smartfin

    smartfin Писатель

    Регистр.:
    12 ноя 2009
    Сообщения:
    6
    Симпатии:
    0
    Как вариант перименовывать по текущей секунде/времени на сервере.
     
  7. vmkvadim

    vmkvadim Постоялец

    Регистр.:
    6 июл 2008
    Сообщения:
    53
    Симпатии:
    4
    а как решается?
     
  8. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Вот хотябы так надо.
    - Добавляем в начало имени файла штамп времени (Это позволит нам не попасть в ситуацию, когда файл с таким именем уже есть на сервере)
    - Конвертим все символы кроме 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);
        }
     
  9. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    ну и зачем так усложнять? =)

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

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

    PHP:
    list($usec$sec) = explode(' 'substr(microtime(), 2));
    $rand =  substr($sec.$usec015); // ну и его уже использовать в названии 
    зачем делать преобразования в оригинальном имени файла? более того, зачем вообще хранить файлы с ним ..
    это только лишний геморой для скрипта с преобразование и формированием названия а потом и лишний геморой для файловой системы при поиске этого файла для отдачи его юзеру ...

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


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

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

    http://habrahabr.ru/blogs/php/44610/
    http://habrahabr.ru/blogs/php/44615/
     
  10. Allary

    Allary Писатель

    Регистр.:
    3 ноя 2008
    Сообщения:
    6
    Симпатии:
    1
    Генерируйте новые имена при загрузке и шифруйте их, уникальность имен + удобство

    PHP:
    md5($fitename.date('U'))