[RESOLU] comment renommer mes images avant l envoi en base de donne et dans le dossier upload

Mammouth du PHP | 506 Messages

04 juin 2021, 16:48

bonjour a tous
lors de l upload des images dans ma base de donnée les images ne sont pas renommées et je pense que cela va poser des problèmes

j ai bien un système qui évite d avoir des doublons mais cela n est pas ce qu il y a de mieux

en effet si jean a sur son pc une image image 1.jpg et qu il l upload
j aurais dans mon dossier uploads sur mon serveur l image 1.jpg

si André a aussi une image image1.jpg et qu il veux l envoyer dans le dossier upload
il ne va pas comprendre pourquoi je lui informe qu elle existe déjà

donc est il possible de renommer les images par exemple en aaaaaaa001 pour la première
en aaaaaaa002 pour la deuxième
et ainsi de suite

je recherche un moyen simple
j ai entendu parler de uniqid()
je pourrais donc modifier le nom de mon image avec ce générateur unique et en y insérant par exemple l ID de l utilisateur et le pseudo par exemple
mais comment y arriver ?
merci de l aide

voici donc mon fichier qui traite les images

Code : Tout sélectionner

<?php // Démarrage SESSION session_start(); //Connexion à la bdd require_once 'base.php'; // Variables/constantes... $allowed = array( "jpg" => "image/jpg", "JPG" => "image/JPG", "jpeg" => "image/jpeg", "JPEG" => "image/JPEG", "gif" => "image/gif", "png" => "image/png", "PNG" => "image/PNG" ); $res = array();// variable qui contiendra les infos à retourner au script JS // récupération PROPRE des variables de type "array" AVANT de les utiliser (j'ai l'impression de radoter vu le nombre de fois que je t'ai déjà donné ce genre de code !!!! ) $getpseudo = !empty($_COOKIE['pseudo']) ? $_COOKIE['pseudo'] : NULL; $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo']: $getpseudo; $id = !empty($_POST['id']) ? $_POST['id']: NULL; $photos = !empty($_FILES["photo"]) ? $_FILES["photo"] : NULL; $contenu = !empty($_POST["contenu"]) ? $_POST["contenu"] : ""; // Vérifier si le formulaire a été soumis if ($_SERVER["REQUEST_METHOD"] == "POST") { // Vérifie si le fichier a été uploadé sans erreur. if ($photos ){ if( $photos["error"] != 0 ){ $err = 'Erreur : ' . $photo['error']; }else{ $filename = $photos["name"]; $filetype = $photos["type"]; $filesize = $photos["size"]; // Vérifie l'extension du fichier $ext = pathinfo($filename, PATHINFO_EXTENSION); if (!array_key_exists($ext, $allowed)) { $err = 'Erreur : Veuillez sélectionner un format de fichier valide.</br> <a href="javascript:history.back()">Pour recommencer</a>'; } // Vérifie la taille du fichier - 5Mo maximum $maxsize = 5 * 1024 * 1024; if ($filesize > $maxsize){ $err = 'Error: La taille du fichier est supérieure à la limite autorisée.</br> <a href="javascript:history.back()">Pour recommencer</a>'; }else{ // Vérifie le type MIME du fichier if (in_array($filetype, $allowed)) { // Vérifie si le fichier existe avant de le télécharger. if (file_exists("uploads/" . $photos["name"])) { $err = $photos["name"] . ' existe déjà.</br> <a href="javascript:history.back()">Pour recommencer</a>'; } else { if(! move_uploaded_file($photos["tmp_name"], "uploads/" . $photos["name"])){ $err = "Erreur lors de l'upload du fichier"; }else{ $res['message'] = '<style="font-size:22px; margin-left:20%; margin-top:90px;text-align: center;">Votre fichier a été téléchargé avec succès.>'; //préparation de la requête et des variables $sql = 'INSERT INTO galerie_images (pseudo, id_img, nom_img, nom_min, contenu ) VALUES (:pseudo, :id_img, :nom_img, :nom_min, :contenu)'; $datas = array( ':pseudo' => $pseudo, ':id_img' => $id, ':nom_img' => $filename, ':nom_min' => $filename, ':contenu' => $contenu ); //exécution de la requêete préparée try{ $req = $bdd->prepare($sql); $req->execute($datas); }catch(Exception $e){ $err = " Erreur dans la requête : " . $e->getMessage(); } } } } else { $err = 'Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer.</br> <a href="javascript:history.back()">Pour recommencer</a>'; } } } } else { $debug = ['POST'=>$_POST,'FILE'=>$_FILES]; $err = "Error: " . $photos["error"] . " --- " . print_r($debug,true); } } else { $err = "Méthode invalide"; } $res['error'] = $err; // On renvoi la réponse au format JSON echo json_encode($res); exit;

Mammouth du PHP | 2703 Messages

04 juin 2021, 17:56

if(! move_uploaded_file($photos["tmp_name"], "uploads/" . $photos["name"])){

c'est "uploads/" . $photos["name"] qu'il faut modifier pour mettre un nom unique, en gardant bien l'extension initiale.

Mammouth du PHP | 506 Messages

04 juin 2021, 18:10

merci pour la réponse
mais comment m y prendre pour le renommer

Mammouth du PHP | 2703 Messages

04 juin 2021, 18:17


Mammouth du PHP | 506 Messages

04 juin 2021, 18:22

je viens d essayer de remplacer cette partie par ceci

Code : Tout sélectionner

else { if(! move_uploaded_file($photos["tmp_name"], "uploads/" . $photos["name"]))
mais cela ne fonctionne pas

Code : Tout sélectionner

else { $fileInfo = pathinfo($photos["file"]["name"]); if(! move_uploaded_file( $photos["file"]["tmp_name"], "upload/" . uniqid() . '.' . $fileInfo['extension']);

Mammouth du PHP | 2703 Messages

04 juin 2021, 18:32

mais cela ne fonctionne pas
mince

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 juin 2021, 18:50

"mince", sous entendu "il faut nous en dire un peu plus, as-tu un message d'erreur ? est-ce un problème de droit ? de chemin ? de nom ? le fichier est-il enregistré dans le bon dossier ? a-t-il un autre nom que celui attendu ? ..." :p

Le second paramètre de move_uploaded_file() n'est de plus qu'une chaine de caractères qui représente le chemin du dossier et le nom du fichier (en gros, le fonction permet de déplacer et renommer le fichier à la volée).

Il faut donc la considérer comme telle (une chaine de caractère) et l'afficher pour voir ce qu'elle contient, si cela correspond bien à ce que tu attends, si le chemin est bon, si le nom du fichier est celui souhaité... Tu peux par exemple mettre tout ces éléments dans une variable (facile à afficher pour voir ce qu'elle contient et à passer en paramètre de ta fonction :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 506 Messages

04 juin 2021, 19:06

merci pour l aide c est super sympa
as-tu un message d'erreur ? est-ce un problème de droit ? de chemin ? de nom ? le fichier est-il enregistré dans le bon dossier ? a-t-il un autre nom que celui attendu ? ..." :p
alors non aucun message d erreur , mais rien n a été inscrit dans la base de donne ni dans le dossier uploads


oui pour move_uploaded_file() je suis au courant

la seule chose que je désire faire c est juste renommer mes fichiers pour éviter les doublons


et donc j ai copier coller ce code pour remplacer le mien
a cette adresse
https://stackoverflow.com/questions/881 ... hp/8810759

Code : Tout sélectionner

$fileInfo = pathinfo($_FILES["file"]["name"]); move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . uniqid() . '.' . $fileInfo['extension']);

comment je pourrais bien construire ma variable?
afin de savoir ou cela coince ?

Mammouth du PHP | 506 Messages

04 juin 2021, 20:33

voila j ai fini par trouver

le seul problème c est l extension le point est mal situe
img_60ba6e9dba9472.30017962JPG
voici mon code

Code : Tout sélectionner

<?php // Démarrage SESSION session_start(); error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //Connexion à la bdd require_once 'base.php'; // Variables/constantes... $allowed = array( "jpg" => "image/jpg", "JPG" => "image/JPG", "jpeg" => "image/jpeg", "JPEG" => "image/JPEG", "gif" => "image/gif", "png" => "image/png", "PNG" => "image/PNG" ); $res = array();// variable qui contiendra les infos à retourner au script JS // récupération PROPRE des variables de type "array" AVANT de les utiliser (j'ai l'impression de radoter vu le nombre de fois que je t'ai déjà donné ce genre de code !!!! ) $getpseudo = !empty($_COOKIE['pseudo']) ? $_COOKIE['pseudo'] : NULL; $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo']: $getpseudo; $id = !empty($_POST['id']) ? $_POST['id']: NULL; $photos = !empty($_FILES["photo"]) ? $_FILES["photo"] : NULL; $contenu = !empty($_POST["contenu"]) ? $_POST["contenu"] : ""; // Vérifier si le formulaire a été soumis if ($_SERVER["REQUEST_METHOD"] == "POST") { // Vérifie si le fichier a été uploadé sans erreur. if ($photos ){ if( $photos["error"] != 0 ){ $err = 'Erreur : ' . $photo['error']; }else{ $filename = $photos["name"]; $filetype = $photos["type"]; $filesize = $photos["size"]; $ext = pathinfo($filename, PATHINFO_EXTENSION); $filename = uniqid("img_",true).$ext ; // Vérifie l'extension du fichier $ext = pathinfo($filename, PATHINFO_EXTENSION); if (!array_key_exists($ext, $allowed)) { $err = 'Erreur : Veuillez sélectionner un format de fichier valide.</br> <a href="javascript:history.back()">Pour recommencer</a>'; } // Vérifie la taille du fichier - 5Mo maximum $maxsize = 5 * 1024 * 1024; if ($filesize > $maxsize){ $err = 'Error: La taille du fichier est supérieure à la limite autorisée.</br> <a href="javascript:history.back()">Pour recommencer</a>'; }else{ // Vérifie le type MIME du fichier if (in_array($filetype, $allowed)) { // Vérifie si le fichier existe avant de le télécharger. $photos["name"]= $filename; if (file_exists("uploads/" . $photos["name"])) { $err = $photos["name"] . ' existe déjà.</br> <a href="javascript:history.back()">Pour recommencer</a>'; } else { if(! move_uploaded_file($photos["tmp_name"], "uploads/" . $photos["name"])){ $err = "Erreur lors de l'upload du fichier"; }else{ $res['message'] = '<style="font-size:22px; margin-left:20%; margin-top:90px;text-align: center;">Votre fichier a été téléchargé avec succès.>'; //préparation de la requête et des variables $sql = 'INSERT INTO galerie_images (pseudo, id_img, nom_img, nom_min, contenu ) VALUES (:pseudo, :id_img, :nom_img, :nom_min, :contenu)'; $datas = array( ':pseudo' => $pseudo, ':id_img' => $id, ':nom_img' => $filename, ':nom_min' => $filename, ':contenu' => $contenu ); //exécution de la requêete préparée try{ $req = $bdd->prepare($sql); $req->execute($datas); }catch(Exception $e){ $err = " Erreur dans la requête : " . $e->getMessage(); } } } } else { $err = 'Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer.</br> <a href="javascript:history.back()">Pour recommencer</a>'; } } } } else { $debug = ['POST'=>$_POST,'FILE'=>$_FILES]; $err = "Error: " . $photos["error"] . " --- " . print_r($debug,true); } } else { $err = "Méthode invalide"; } $res['error'] = $err; // On renvoi la réponse au format JSON echo json_encode($res); exit;

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 juin 2021, 14:56

Tu construits le nom de ton fichier ici en concaténant ton id et ton extension :
$filename = uniqid("img_",true).$ext ;
uniqid retourne un identifiant unique avec le préfixe "img_" : img_60ba6e9dba9472.30017962
$ext contient le résultat de pathinfo($filename, PATHINFO_EXTENSION), c'est à dire juste l'extension de ton fichier : JPG

S'il te manque un point entre les deux chaines de caractères, tu peux parfaitement le concaténer aux deux autres : 'a' . 'b' . 'c' == 'abc'
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 506 Messages

11 juin 2021, 10:56

merci Ryle

j ai finalement compris le principe et cela fonctionne mes images changent bien de noms
un grand merci