как переименовать загруженное изображение в php - PullRequest
5 голосов
/ 08 сентября 2010

Я получил этот код от w3schools и настроил его на основе этого: Переименуйте загруженный файл с помощью PHP, но сохраните расширение

Пожалуйста, помогите, что мне делать, чтобы расширение файла не было .tmp Когда я загружаю его в папку на сервере.

   <?php
    $filename=$_FILES["file"]["tmp_name"];
    $extension=end(explode(".", $filename));
    $newfilename=$prod .".".$extension;

    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 100000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
        }
      else
        {
        echo "Upload: " . $_FILES["file"]["name"] . "<br />";
        echo "Type: " . $_FILES["file"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

        if (file_exists("../img/user_uploaded/" . $_FILES["file"]["name"]))
          {
          echo $_FILES["file"]["name"] . " already exists. ";
          }
        else
          {
          move_uploaded_file($filename,
          "../img/user_uploaded/" . $newfilename);
          echo "Stored in: " . "../img/user_uploaded/" .$newfilename;
          }
        }
      }
    else
      {
      echo "Invalid file, File must be less than 100Kb in size with .jpg, .jpeg, or .gif file extension";
      }
    ?>

Ответы [ 9 ]

7 голосов
/ 08 сентября 2010
$filename=$_FILES["file"]["tmp_name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;

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

$filename=$_FILES["file"]["name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;

Это загрузит ваш файл с фактическим расширением файла.

4 голосов
/ 08 сентября 2010

Попробуйте использовать эту библиотеку для манипулирования изображениями ... возможно, это оффтоп, но очень полезно для работы с изображениями.

WideImage: http://wideimage.sourceforge.net/

Например:

include('path to WideImage.php');

$filename = $_FILES["file"]["name"];
$ext = strtolower(substr(strrchr($filename, '.'), 1)); //Get extension
$image_name = $name . '.' . $ext; //New image name

$image = WideImage::load($_FILES['file']['tmp_name']); //Get image
$image->saveToFile('path/to/image/' . $image_name); //Save image
1 голос
/ 08 сентября 2010

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

$min_rand=rand(0,1000);
$max_rand=rand(100000000000,10000000000000000);
$name_file=rand($min_rand,$max_rand);//this part is for creating random name for image

$ext=end(explode(".", $_FILES["file"]["name"]));//gets extension

move_uploaded_file($_FILES["file"]["tmp_name"],"/new folder/" . $name_file.".".$ext);//actually reponsible for copying file in new folder

$filenameimage="../upload_image/" . $name_file.".".$ext;
$actualimageurl="../upload_image/" . $_FILES["file"]["name"];
1 голос
/ 08 сентября 2010

Я не согласен с ответом @ Alexander.Plutov. Вам не нужно сохранять файл, затем копировать его, а затем отсоединять его .

Поскольку вы указываете имя файла назначения в своем коде:

move_uploaded_file($filename, "../img/user_uploaded/" . $newfilename);
echo "Stored in: " . "../img/user_uploaded/" .$newfilename;

все, что вам нужно, это указать другое имя вместо $newfilename. Если ваша цель - заменить расширение .tmp чем-то другим, вы можете удалить последние четыре символа (которые всегда .tmp устанавливаются PHP), а затем добавить собственное расширение.

Если вы просто хотите сохранить расширение, данное пользователем, используйте:

$friendlyName = $_FILES["file"]["name"];
$extension = substr($friendlyName, strrpos($friendlyName, '.') + 1);

Конечно, вы должны осознавать риск использования чего-либо, отправленного пользователем. Что, если расширение вообще отсутствует, или оно слишком длинное, или если оно не соответствует реальному типу файла (deadly-virus.exe переименован в pretty-image.jpg)?

1 голос
/ 08 сентября 2010

Эта часть переименовывает файл.

move_uploaded_file ($ filename, "../ img / user_uploaded /". $ Newfilename);

Итак, проблема в том, как установить значение $ newfilename. Если у вас есть метод для этого, проблема решена.

1 голос
/ 08 сентября 2010
rename('path/to/file/file.ext', 'path/to/file/newname.ext');

Эта функция является объединением копирования и отмены связи.

0 голосов
/ 20 мая 2019

Лучше всего использовать pathinfo ()

$filename=$_FILES["file"]["name"];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$image_name = $yours_new_name.'.'.$ext;
0 голосов
/ 08 апреля 2017

Вы можете добавить дату и время в каталог, куда вы загружаете, это проще.Пример:

$date = date("Y-m-d H:i:s");

../img/user_uploaded/$date

Но не надо, но / в конце концов, потому что это меняет каталог

0 голосов
/ 16 апреля 2016

Неинициализированная переменная $ prod!Это серьезный недостаток безопасности.Всегда инициализируйте свои переменные перед их использованием.

...