Rename()

Résolu/Fermé
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 10 sept. 2015 à 17:09
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 11 sept. 2015 à 12:59
Bonjour à tous !

Le code ci-dessous me crée un dossier et renomme le fichier uploader... cependant je rencontre un soucis :

$PathImage = '../../../images/produits/';
if(!is_dir($PathImage)){mkdir($PathImage, 0705, true);}

$_FILES['Fr_Image']['name'];
$_FILES['Fr_Image']['type'];
$_FILES['Fr_Image']['size'];
$_FILES['Fr_Image']['tmp_name'];
$_FILES['Fr_Image']['error'];

if ($_FILES['Fr_Image']['error'] > 0) $erreur = "<div class=\"Erreur\">Erreur lors du transfert de l'image</div>";
if ($_FILES['Fr_Image']['size'] > $maxsize) $erreur = "<div class=\"Erreur\">Le fichier est trop gros</div>";
$extensions_valides = array('png');
$extension_upload = strtolower(substr(strrchr($_FILES['Fr_Image']['name'], '.')  ,1)  );

if (in_array($extension_upload,$extensions_valides) ) echo "<div class=\"Message\">Extension de l'image correcte</div><br />";
$image_sizes = getimagesize($_FILES['Fr_Image']['tmp_name']);

if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) $erreur = "<div class=\"Erreur\">Image trop grande</div>";

$nom 		= $PathImage.$_FILES['Fr_Image']['name'];
$resultat 	= move_uploaded_file($_FILES['Fr_Image']['tmp_name'],$nom);
$NouvImage 	= $PathImage.$Fr_Code.".".$extension_upload;

rename($PathImage.$nom, $PathImage.$NouvImage);

if ($resultat) echo "<div class=\"Message\">Transfert de l'image réussi</div><br />";

Si le dossier n'existe pas, le script le crée et renomme bien le fichier.
Mais si le dossier existe, il ne le renomme plus... est-ce normal ?

Merci de votre coup de main.


A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 sept. 2015 à 09:55
Salut,

Si le dossier existe mais qu'il n'a pas été créé par ton script, le problème peut venir des droits appliqués au dossier. Si le dossier a été créé par ton script cela ne devrait pas poser problème.

Ta variable $NouvImage est affectée en commençant par $PathImage :
$NouvImage = $PathImage.$Fr_Code.".".$extension_upload;
// soit : $NouvImage = '../../../images/produits/' . $Fr_Code.".".$extension_upload;

Puis lors de l'utilisation de cette variable dans la fonction rename(), tu concatènes une nouvelle fois $PathImage :
rename($PathImage.$nom, $PathImage.$NouvImage);
// soit : rename($PathImage.$nom, '../../../images/produits/' . '../../../images/produits/' . $Fr_Code.".".$extension_upload);

Le chemin n'est donc pas correct.

Tu aurais dû avoir un message d'erreur PHP te l'indiquant, n'oublie pas d'activer l'affichage des erreurs en développement.

Enfin, la fonction move_uploaded_file() revient déjà à renommer le fichier temporaire uploadé, tu peux donc directement renommer le fichier avec cette fonction à la place d'utiliser rename() :
$NouvImage = $PathImage.$Fr_Code.".".$extension_upload;
$resultat = move_uploaded_file($_FILES['Fr_Image']['tmp_name'], $NouvImage);


Bonne journée
1
Sinistrus Messages postés 1017 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 17
11 sept. 2015 à 12:59
Merci beaucoup Pitet !

Tu as été vraiment explicite. Ça fonctionne :)
0