Rename()

Résolu
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.

2 réponses

  1. 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. Merci beaucoup Pitet !

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