¿Cómo puedo cambiar el nombre del archivo, ya sea antes o después de que se sube a la red? Yo sólo quiero cambiar el nombre el nombre del archivo, no la extensión.

$changeTXT = $_SESSION['username'];
$uploaderName = strtolower($changeTXT);
$changeTXT = strtolower($changeTXT);
$changeTXT = ucfirst($changeTXT);
$filelocation = $_POST['userfile'];
$filename = $_POST['filename'];
$max_size = $_POST['MAX_FILE_SIZE'];

$file = $_FILES['userfile'];

$allowedExtensions = array("wma", "mp3", "wav");

function isAllowedExtension($fileName) {
  global $allowedExtensions;

  return in_array(end(explode(".", $fileName)), $allowedExtensions);
}

if($file['error'] == UPLOAD_ERR_OK) {
  if(isAllowedExtension($file['name'])) {

$uploaddir = "uploads/".$uploaderName."/";

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

    echo "Thank you for uploading your music!<br /><br />";

} else {

    echo "Your file did not upload.<br /><br />";

}

    echo "\n";

    echo "<a href='index.php'>Return</a> to index.<br /><br />$uploaddir";

} else {

    echo "You have tried to upload an invalid file type.<br /><br />";

  }

} else die("Cannot upload");
Buena pregunta! Upvoted!!

OriginalEl autor | 2009-03-31

6 Comentarios

  1. 22

    Cuando se utiliza move_uploaded_file puede elegir el nombre de archivo, así que puedes elegir lo que quieras.

    La hora de subir el archivo, su puesto en un directorio temporal con un nombre temporal, move_uploaded_file() permite mover ese archivo y en que usted necesita para establecer el nombre del archivo así.

    Gran respuesta! Seguramente necesita un upvote!
    cualquier code ejemplo?

    OriginalEl autor Ólafur Waage

  2. 6

    Me gustaría sugerir que usted echa un vistazo Verot la Carga de Archivos de clase. Se cura mucho el dolor de archivo de carga a través de php, y hace que su código mucho más legible /mantenible.

    Aquí es el enlace a la clase y documentación.

    Cuanto a la respuesta precisa a su pregunta:
    Para darle un nuevo nombre a un archivo subido, como segundo argumento a su move_uploaded_file() función.

    Ya que desea mantener la extensión, almacenar en una variable:

    $ext = explode('.',$_FILES['uploaded']['name']);
    $extension = $ext[1];

    Usted puede utilizar el archivo de nombre de raíz para generar el nuevo nombre (aquí, con una marca de tiempo añadido):

    $newname = $ext[0].'_'.time();

    Decir que has subido un archivo, y el formulario de entrada de nombre de la variable es «miarchivo.png» se convertirá en ‘myfile_2343544.png’;

    Ahora, combinar los locales de la ruta de acceso al directorio de destino, el $nuevonombre var y la extensión del archivo para establecer la función del segundo argumento:

    $full_local_path = 'path/to/your/filefolder/'.$newname.'.'.$extension ;
    move_uploaded_file($_FILES['uploaded']['tmp_name'], $full_local_path);
    Alllllmost. Pero usted necesita $nuevonombre.».$de extensión», la adición de un período de entre newname y extensión, de lo contrario, sale «filenamejpg». Upvoted!
    Me perdí en el espacio entre los puntos… buena captura, gracias!!

    OriginalEl autor pixeline

  3. 3

    ¿Por qué no simplemente guardarlo con un nombre diferente:

    Acaba de cambiar el nombre de la $uploadfile variable:

    $uploadfile = $uploaddir . "somefilename" . end(explode(".", $file['name']));

    No estaría sin embargo, si usted refactord su código un poco.

    OriginalEl autor Pim Jager

  4. 1

    Al hacer

    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
    
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

    Sólo $uploadfile a la ruta de acceso completa del nombre de archivo deseado; es decir, «uploads/mynewfilename.jpg»

    OriginalEl autor Seb

  5. 1

    Puede usar el segundo parámetro en move_uploaded_file para establecer el nombre de archivo. El primer parámetro es el nombre del archivo en la carpeta /tmp y el segundo parámetro es el archivo de directorios y el nuevo nombre de archivo.

    move_uploaded_file($_FILES['file']['tmp_name'], "/new/file/dir/".[the new file name]);

    Sé que esto es una vieja pregunta, pero no hay una respuesta clara.

    OriginalEl autor MmynameStackflow

  6. 0
        <?php
    /*
    Just change the $path variable to your uploads path
    and dont forget the  /at the end of the  path.
    The way this function works is .When the user submits the form
    the uniqueFilename() function checks to see if there is a filename
    in your uploads folder, that has the same name as the one you intend
    to upload. If it finds a filename that has the same name as the one you want to
    upload it goes through the next steps
    Step 1
    strrpos($arg1,$arg2) - we use it to find the location where upload path ends and where the filename begins
    $arg1 = the filepath including the filename ex. uploads/myFile.jpg
    $arg2 = basename($filename); what this does is it  strips the path from the string and returns only the filename.
    When we use strrpos($arg1,$arg2) we basically tell the function to find the position of the path and exclude the filename
    Step 2
    substr($arg1,$arg2,$arg3) - looks in a string and extrats only the parts from the string that you want. We use it now to extract the uploads path.
    $arg1 = the full path of the uploaded file. ex. uploads/myFile.jpg
    $arg2 = 0  because we want to start from the begginning of the string
    $arg3 = $pathlocation which is the location of where the uploadpath ends and the file beggins
    when we use substr() here we intend to extract the uploads path.
    Step 3
    basename($arg1) strips out a path and returns the filename
    - we use this to save the original filename
    Notice that so far we have the path to the files saved and also
    the filename with its extension. We also have the file extension (.jpg|.png) or whatever
    Step 4
    pathinfo() - extracts the extension from the filename
    Step 5
    we us strrpos() to find the location of the last dot ( . ) in the filename because in step 6
    we use this location to cut the string where the dot ( . ) is
    Step 6
    substr() gets the file without the extension
    Step 7
    substr() takes the filename without extension and clips out the last charcter
    so if the filename is myFile this function would return myFil
    Step 8
    substr() again we use it to save the last character of the file so
    if our file is called myFile it would return e.
    Step 9
    Here we check to see if the last character of our file is numeric.
    Why do this? Because if the last character of a file is numeric we can just add a number to the
    file and end up with a new file with an added number so our file is
    myFile1 the 1 is numeric so our intention is to add to it
    so my myFile1 would end up being myFile2. But what happens if our last character is not numeric?
    then we just add -1 to the file so that myFile would end up being myFile-1
    Step 10
    Since our filename exists in the database we must call the function uniqueFilename() again so that we can
    check and see if the new name exists in the database.
    This function basically keeps calling itself until it finds a filename that does not exists.
    */
    if(isset($_POST['submit'])){
    $path = "uploads/";
    $fullPath = $path.$_FILES['uploadFile']['name'];
    $full_local_path = $path.uniqueFilename($fullPath) ;
    move_uploaded_file($_FILES['uploadFile']['tmp_name'], $full_local_path);
    }
    /*
    * Function returns a unique filename
    * Param 1 is the path of the filename and the filename
    * returns filename with no path
    */
    function uniqueFilename($filepathAndFilename){
    //check to see if file exists
    if (file_exists($filepathAndFilename))
    {
    /* step 1 */
    //Get the path location without the basename
    $filePathWithoutFilenameLocationInString = strrpos($filepathAndFilename,basename($filepathAndFilename));
    /* step 2 */
    //Get the path and cut the basename
    $path = substr($filepathAndFilename,0,$filePathWithoutFilenameLocationInString);
    /* Step 3*/
    //Get the base filename
    $filename = basename($filepathAndFilename);
    /* Step 4 */
    //get the extension
    $fileExtension = pathinfo($filename, PATHINFO_EXTENSION);
    /* Step 5 */
    //find the position of the last dot
    $dotLocation = strrpos($filename,'.');
    /* Step 6 */
    //Get the filename without the dot
    $fileWithNoExtension = substr($filename,0,$dotLocation);
    /* Step 7 */
    //Get the name without the last character
    $filenameMinusLastCharacter = substr($fileWithNoExtension,0,-1);
    /* Step 8 */
    //save the last character
    $lastFilenameCharacter = substr($fileWithNoExtension,-1);
    /* Step 9*/
    //if the last character is numeric add 1
    if (is_numeric($lastFilenameCharacter))
    {
    $newFilename = $path.$filenameMinusLastCharacter.($lastFilenameCharacter+1).'.'.$fileExtension;
    //recursively call itself
    /* Step 10*/
    $results = uniqueFilename($newFilename);
    return basename($results);
    }else{
    //if the last character is not numeric then add 1
    $newFilename = $path.$fileWithNoExtension.'-1'.'.'.$fileExtension;
    /* Step 10*/
    //recursively call itself
    $results = uniqueFilename($newFilename);
    return basename($results);
    }
    }
    return basename($filepathAndFilename);
    }
    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Untitled Document</title>
    </head>
    <body>
    <form method="post" enctype="multipart/form-data"/>
    <label>Upload File</label>
    <input type="file" name="uploadFile"/>
    <input type="submit" name="submit" value="submit"/>
    </form>
    </body>
    </html>`enter code here`
    Siempre es útil si también explicar la respuesta. Va a hacer que tu respuesta sea aún mejor, y más probabilidades de obtener upvoted.

    OriginalEl autor Luis Betancourt

Dejar respuesta

Please enter your comment!
Please enter your name here