83 votes

Comment renommer un fichier téléchargé avant de l'enregistrer dans un répertoire ?

Voici le code que j'ai utilisé pour télécharger des fichiers dans un répertoire. Il fonctionne correctement. Ma principale question est la suivante :

move_uploaded_file() est celui qui enregistre le fichier téléchargé dans le répertoire, et je suppose également que move_uploaded_file() est celui qui en définit le nom.

Comment puis-je changer le nom de mon fichier en un nombre aléatoire ?

J'ai tenté de le faire ci-dessous :

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 100000) && in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    } else {

        $fileName = $temp[0] . "." . $temp[1];
        $temp[0] = rand(0, 3000); //Set to random number
        $fileName;

        if (file_exists("../img/imageDirectory/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "../img/imageDirectory/" . $_FILES["file"]["name"];
        }
    }
} else {
    echo "Invalid file";
}

J'ai essayé de modifier des variables telles que $_FILES["file"]["name"] et en le remplaçant par le Nom du fichier ; afin que le nouveau nom puisse être stocké.

182voto

Ben Fortune Points 7084

Vous pouvez simplement modifier le nom du fichier en modifiant le nom du fichier dans le deuxième paramètre de la commande move_uploaded_file .

Au lieu de

move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $_FILES["file"]["name"]);

Utilisation

$temp = explode(".", $_FILES["file"]["name"]);
$newfilename = round(microtime(true)) . '.' . end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename);

Modifié pour répondre à votre question, il produira un nombre aléatoire basé sur l'heure actuelle et ajoutera l'extension du fichier téléchargé à l'origine.

6voto

tmh Points 486

Vous avez bien deviné. Lisez la page de manuel de move_uploaded_file . Définissez le deuxième paramètre à l'endroit où vous souhaitez enregistrer le fichier.

Si cela ne fonctionne pas, c'est qu'il y a un problème avec votre $fileName . Veuillez afficher votre code le plus récent.

5voto

Prabhagaran Points 3060

Vous pouvez essayer ceci,

$newfilename= date('dmYHis').str_replace(" ", "", basename($_FILES["file"]["name"]));

move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename);

5voto

antelove Points 617
/* create new name file */
$filename   = uniqid() . "-" . time(); // 5dab1961e93a7-1571494241
$extension  = pathinfo( $_FILES["file"]["name"], PATHINFO_EXTENSION ); // jpg
$basename   = $filename . "." . $extension; // 5dab1961e93a7_1571494241.jpg

$source       = $_FILES["file"]["tmp_name"];
$destination  = "../img/imageDirectory/{$basename}";

/* move the file */
move_uploaded_file( $source, $destination );

echo "Stored in: {$destination}";

1voto

Yehuda Schwartz Points 1211

Les move_uploaded_file renverra false si le fichier n'a pas été déplacé avec succès vous pouvez mettre quelque chose dans votre code pour vous alerter dans un journal si cela se produit, cela devrait vous aider à comprendre pourquoi vous avez du mal à renommer le fichier

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X