web-dev-qa-db-fra.com

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

Vous trouverez ci-dessous le code que j'ai utilisé pour transférer des fichiers dans un répertoire. Cela fonctionne très bien ..__ Ma question principale est:

move_uploaded_file () est celui qui enregistre le fichier téléchargé dans le répertoire. Je suppose également que move_uploaded_file () est celui qui en donne le nom.

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

J'ai essayé 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 changer des variables telles que $ _FILES ["fichier"] ["nom"] et de le remplacer par le $ nomFichier; variable pour que le nouveau nom puisse être stocké.

58

Vous pouvez simplement changer le nom du fichier en changeant le nom du fichier dans le deuxième paramètre de 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 refléter votre question, un numéro aléatoire sera généré en fonction de l'heure actuelle et sera ajouté à partir du fichier téléchargé à l'origine. 

129
Ben Fortune

Vous pouvez essayer ceci,

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

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

Vous devinez correctement. Lisez la page de manuel pour move_uploaded_file . Définissez le deuxième paramètre sur l’endroit où vous souhaitez enregistrer le fichier.

Si cela ne fonctionne pas, il y a un problème avec votre $fileName. S'il vous plaît envoyer votre code le plus récent.

1
tmh

Le move_uploaded_file retournera false si le fichier n'a pas été déplacé avec succès. Vous pouvez ajouter 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

0
Yehuda Schwartz