Renommer un fichier uploader

Petit nouveau ! | 1 Messages

23 août 2019, 11:08

Bonjour.

J'ai un formulaire qui me permet de upload une image. Toutefois, je ne veux pas qu'un image existante avec le même nom soit écrasée.

Je voudrais trouver un moyen de la renommer "à la Google" c'est a dire en ajoutant "(1)" à la fin du nom ou "(2) si existe déjà et ainsi de suite en incrémentant le chiffre.

J'ai trouver plusieurs topic parlant du sujet mais je n'arrive pas à faire ce que je veux.

J'ai vu l'utilisation de split() et preg_split().

Je vous donne un peut de lecture si ça peut aider :

Code : Tout sélectionner

<form class="" action="registerPost.php" method="GET" enctype="multipart/form-data"> <div class="form-group"> <label for="title">Titre de l'article</label> <input class="form-control" type="text" name="title" placeholder="Titre du nouvel article" required> </div> <div class="form-group"> <label for="content">Contenu de l'article</label> <textarea name="content" rows="8" cols="80" required></textarea> </div> <div class="input-group form-group"> <label for="fileToUpload">Mettre une image en avant </label> <input type="file" name="fileToUpload" id="fileToUpload" accept="image/*"> <div class="cancel input-group-append"> <span class="input-group-text" id="cancel-img"><i class="fas fa-window-close"></i></i></span> </div> </div> <button type="submit" class="btn btn-primary">Enregistrer</button> </form>
registerPost.php

Code : Tout sélectionner

$filename = $_FILES["fileToUpload"]["name"]; $target_dir = $config['base_url']."pictures/"; $target_file = $target_dir.basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // Check if image file is a actual image or fake image if(isset($_GET["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { $msg = "Le fichier est une image - " . $check["mime"] . "."; $uploadOk = 1; } else { $msg = "Le fichier n'est pas une image."; $uploadOk = 0; } } // Check if file already exists if (file_exists($target_file)) { $msg = "Désolé, le fichier existe déjà."; $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] > 1000000) { $msg = "Désolé, le fichier est trop volumineux."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { $msg = "Désolé, seulement les fichiers JPG, JPEG, PNG & GIF sont téléchargable."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { $mesg = "Désolé, le fichier n'a pas été téléchargé."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { $msg = "Le fichir ". basename( $_FILES["fileToUpload"]["name"]). " a été téléchargé."; } else { $msg = "Désolé, il y a eu une erreur."; } } if($uploadOk == 1){ $Rinsert = "INSERT INTO post (title, content, imgname, date, iduser) VALUES ('$title', '$content', '$filename', '$date', '$userid')"; $bdd->query($Rinsert); } ?>
Au passage, j'ai le message suivant sur register.php :
Notice: Undefined index: fileToUpload
une petite aide la-dessus au passage (si vraiment nécessaire, je ferais un autre topic)

Merci d'avance pour votre aide.

Mammouth du PHP | 881 Messages

28 août 2019, 04:26

Depuis que j'ai découvert la facilité d'utilisation et les possibilités que m'offre la fonction scandir, je ne m'en passe plus.
Alors - ô surprise! - je te propose de vérifier la présence de fichier(s) au nom semblable que celui souhaité déjà présent(s) dans le répertoire destination.

Quelque chose comme:
$NumeroSuivant = '';
$existant = scandir('MonDirDestination');
if (in_array($NomDuFichier, $existant) {
   $decompte = array_count_values($existant);
   $NumeroSuivant = $decompte[$NomDuFichier];
}

$NomDuFichier = substr($NomDuFichier, 0, -4).$NumeroSuivant.".jpg";
Ainsi t'auras toujours un nom incrémenté de 1 si le fichier existe déjà au moins une fois
Premier fichier étant MonNom.jpg
Deuxième fichier étant MonNom1.jpg
Troisième fichier étant MonNom2.jpg
Soyez artisans de paix