Загрузить файл и переименовать его


добрый день. Я хочу загрузить файл на свой сервер, но переименовать его с именем переменной, которая поставляется методом GET, то есть адрес будет localhost/fotos/subir.php?nuevonombre=juan, и если файл называется Felipe.jpg, я хочу, чтобы он был переименован и вызван juan.jpg.

здесь я прилагаю код

    <!DOCTYPE html>
    <html lang="es">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Subir archivos al servidor</title>
    <meta name ="author" content ="Norfi Carrodeguas">
    <style type="text/css" media="screen">
    body{font-size:1.2em;}
    </style>
    </head>
    <body>
    <form enctype='multipart/form-data' action='' method='post'>
    <input name='uploadedfile' type='file'><br>
    <input type='submit' value='Subir archivo'>
    </form>
    <?php 
    $target_path = "uploads/";
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
    { 
    echo "<span style='color:green;'>El archivo ". basename(             
    $_FILES['uploadedfile']['name']). " ha sido subido</span><br>";
    }else{
    echo "Ha ocurrido un error, trate de nuevo!";
    } 
    ?>

    </body>
    </html>

Большое спасибо.

 1
Author: Randall Sandoval, 2017-11-22

1 answers

Одним из вариантов переименования было бы сначала получить расширение файла, используя explode () , с той разницей, что будет доступен name, а не tmp_name, поскольку расширение tmp_name tmp.

 $parts = explode(".",$_FILES['uploadedfile']['name']);
 end($parts) // Obtiene el ultimo elemento del array devuelto por explode.

Чтобы затем просто объединить имя, которое вы получаете. Следует отметить, что было бы лучше скрытое поле (hidden) в dom с новым именем и не выполнять _GET и _POST одновременно.

<form enctype='multipart/form-data' action='' method='post'>
  <input type="hidden" name="nuevonombre" value="juan">
  <input name='uploadedfile' type='file'><br>
  <input type='submit' value='Subir archivo'>
</form>

<?php
  $target_path = "uploads/";
  $parts = explode(".",$_FILES['uploadedfile']['name']);
  //construimos el nuevo nombre con lo que viene por post nuevonombre
 // con el final del explode que sería la extensión de la imagen
  $target_path = $target_path . $_POST['nuevonombre'] .".". end($parts);

  if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
  { 
    echo "<span style='color:green;'>El archivo ". basename(             
    $_FILES['uploadedfile']['name']). " ha sido subido</span><br>";
  }
   else{
    echo "Ha ocurrido un error, trate de nuevo!";
  } 
 3
Author: Dev. Joel, 2017-11-23 14:33:55