IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Renommer un fichier pour l'envoyer en pièce jointe


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut [Upload] Renommer un fichier pour l'envoyer en pièce jointe
    Bonjour,

    je reviens encore car j'ai vraiment des difficultés en ce qui concerne la suite de mon upload.

    Actuellement le devis que je réalise est traité par php et les informations saisies sont transmises par mail à l'entreprise. (j'espère par la suite pouvoir envoyer aussi un mail récapitulatif à la personne qui a fait la demande).

    Voici le lien
    http://www.enrdiffusion.com/devis.php
    Il est maintenant possible d'uploadée une image sur le serveur (elle est aussi traitée : vérification de l'extension et vérification du nom) mais mon pb est le suivant.

    Je voudrais renommer l'image pour l'envoyer par la suite en piece jointe. Je ne sais pas si c'est vraiment utile mais bon, j'aurais aimé en fait que l'image soit renommé en portant le nom de la personne qui l'envoit ainsi que la date à laquelle il l'a uploadée.

    Si M. Untel fait une demande de devis, alors l'image qu'il enverra s'appellera
    imageUntel100707.

    J'ai essayé d'utiliser la fonction rename dont j'ai pu avoir quelques explications en lisant les posts mais je n'arrive toujours pas à réaliser le changement de nom.

    J'obtiens l'erreur suivante
    Warning: rename() [function.rename]: open_basedir restriction in effect. File(/img/devis_upload//tmp/phpoQOXDL) is not within the allowed path(s): (/home/www/4017a44ee11a13cf0358a9ad529628f5/:/tmp:/opt/php/lib/php/) in /home/www/4017a44ee11a13cf0358a9ad529628f5/web/devis3.php on line 167
    Je vous fais parvenir ci-dessous la partie du code qui permet l'upload sur le serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    //champs upload
    $_SESSION["upload"] = $_FILES["upload"];
     
    //si un fichier est envoye
    if(!empty($_FILES['upload']['name']))
    {
     
    	if (($_FILES['upload']['error']>0) && ($_FILES['upload']['error']<4))
    	{
    		echo "Erreur dans le transfert du fichier !";
    		exit;
    	}
     
    	// on vérifie son extension
    	$type_file = $_FILES['upload']['type'];
     
    	if(!strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif') && !strstr($type_file, 'bmp') && !strstr($type_file, 'tiff') )
    	{
    		echo "Le type de fichier soumis n'est pas accepte";
    		exit;
    	}
     
    	//on verifie que le nom du fichier ne pose pas de probleme au niveau de la securite
    	if(preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file))
    	{
    		echo "Veuillez changer le nom de votre image pour des raisons de securite";
    		exit;
    		//ou exit("Veuillez changer le nom de votre image pour des raisons de securite");
    	}
     
    	//dossier où sera déplacé le fichier
    	$content_dir = 'img/devis_upload/';
    	$tmp_file = $_FILES['upload']['tmp_name'];
    	$name_file = $_FILES['upload']['name'];
     
     
    	//si le fichier est upload
    	if(is_uploaded_file($tmp_file))
    	{
     
     
    		if(!move_uploaded_file($tmp_file, $content_dir . $name_file))
    		{
        		echo "Impossible de copier le fichier dans $content_dir";
    			exit;
    		}
    		else 
    		{
    		rename("/img/devis_upload/" . $_FILES['upload']['tmp_name'] , "/img/devis_upload/image" . $_SESSION["nom"] );
    		}
    	}
    }
    J'espère avoir fourni correctement les explications qui me pose pb.

    Une fois que la rename est réalisée, je pourrais créer une variable pour le nom de l'image ? parce que je précise que tout doit être automatique et donc que je ne connais pas le nom de l'image qui va être envoyée au début donc je ne peux pas la renommer manuellement.

    Dans le cours de l'envoi de mail, j'ai remarqué justement que pour envoyer une piece jointe on devait connaitre son nom.
    Cf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pièce jointe
    $file_name = 'image.jpg';
    c'est pour ça que je bloque vraiment.

    En gros pour tout récapituler. Comment procéder pour renommer l'image sans que je connaisse son nom ? Ensuite je suis normalement censé la stocker dans une variable que je pourrais réutiliser pour l'envoi de pièce jointe en remplaçant je pense le code précédent de la façon suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pièce jointe
    $file_name = '$fichier_image';
    J'espère ne pas m'être trompé dans ma démarche.

    Merci par avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    c'est la fonction "move_uploaded_file" qui s'occupe de déplacer l'image vers son endroit défintif donc tu peux faire le changement de nom à ce moment, il suffit de mettre le nom que tu veux dans la variable $name_file comme ça par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $name_file = $_SESSION['nom'] . time() . $_FILES['upload']['name'];

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Salut! Merci de ton coup de pouce cependant j'ai modifié un petit peu ton code pour modifier le type de date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $name_file = $_SESSION['nom'] . date("dmy") . $_FILES['upload']['name'];
    Je préférais donner une date en jour, mois et année plutôt qu'en seconde ^^'

    Mais ça marche super c'est sympa!

    Maintenant je peux réutiliser la variable $name_file dans l'envoi du mail pour la pièce jointe non ? ce qui devrait donner quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pièce jointe
    $file_name = $name_file;
    si je ne me trompe pas ?

    Autre chose, je remarque que le nom du fichier envoyé est encore présent, il y'aurait moyen de supprimer carrément le nom de l'image pour le remplacer totalement ? je m'explique :
    Quand je teste et que j'envoie le fichier image suivant "Auvent.JPG", le fichier va être renommée en "fkdfko100707auvent.JPG" où fkdfko est le nom de la personne, 100707 la date de l'envoi et auvent.JPG, le nom de l'image

    Mais j'aimerais juste à la limite supprimer le nom de l'image pour garder juste la partie précédente et donc "fkdfko100707auvent.JPG" deviendrait "fkdfko100707.JPG" si c'est possible ? parce que je sais pas si en modifiant comme ça je perdrais l'extension du fichier ?
    Si ce n'est pas possible, pas grave je m'en contenterais sans problème. C'est juste pour que ça soit plus propre

    Euh beh wala en gros sinon je vais essayer de faire l'envoi de l'image en pièce jointe et je vous tiens au courant !

  4. #4
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Alors j'ai utilisé le tutorial suivant Envoyer un mail en PHP mais cependant je n'arrive pas à obtenir de résultat.

    En effet une fois que j'appuie sur le bouton envoyer la redirection s'effectue mais le mail n'arrive plus alors qu'avant si.

    D'où peut provenir le souci ? Je pensais au début à un envoi en retard et/ou long du mail mais nan ça ne doit pas être le problème apparemment

    Ci-dessous le code que j'ai repris du tutorial. Si vous remarquez une erreur je suis tout ouïe lol.

    Merci par avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    // Destinataire 
    $to = "marketing@blablablou_antispam_bloublou.com"; 
     
    //Objet
    $subject = "Demande de devis provenant de M./Mlle/Mme : " .$nom."\r\n";
     
    // clé aléatoire de limite
    $boundary = md5(uniqid(microtime(), TRUE));
     
    // Headers
    $headers .= 'Mime-Version: 1.0'."\r\n";
    $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
    $headers .= "\r\n";
     
    //Accuse de reception
    X-Confirm-Reading-To: $_SESSION["adresse"]."\r\n";;
     
    // Message
    $msg .= '--'.$boundary."\r\n";
    $msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
    $msg .= 'Content-transfer-encoding:8bit'."\r\n";
    $msg .= 
    'Coordonnees\n
    nom : $nom
    prenom : $prenom 
    adresse : $adresse 
    ville : $ville 
    departement : $departement 
    tel : $tel 
    email : $email \n
     
    L\'installation\n
    type d\'installation : $choix_photovoltaique 
    type d\'installation : $autre_photovoltaique Wc
    type de pose : $pose_photovoltaique \n
     
    Le batiment\n
    type de batiment : $type_batiment 
    type de batiment : $autre_batiment \n
     
    La toiture \n
    type de toiture : $type_toiture 
    orientation toiture : $orientation_toiture 
    inclinaison toiture : $inclinaison_toiture 
    hauteur toiture : $hauteur_toiture 
    surface de la toiture : $toiture_A m de long pour $toiture_B m de large \n
     
    Le projet\n
    date de projet : $delai_projet 
    commentaires : $commentaires'."\r\n";
     
    // Pièce jointe
    $file_name = $name_file;
    if (file_exists($file_name))
    {
    	$file_type = filetype($file_name);
    	$file_size = filesize($file_name);
     
    	$handle = fopen($file_name, 'r') or die('Le fichier '.$file_name.'ne peut pas etre ouvert');
    	$content = fread($handle, $file_size);
    	$content = chunk_split(base64_encode($content));
    	$f = fclose($handle);
     
    	$msg .= '--'.$boundary."\r\n";
    	$msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
    	$msg .= 'Content-transfer-encoding:base64'."\r\n";
    	$msg .= $content."\r\n";
    } 
     
    // Fin
    $msg .= '--'.$boundary."\r\n";
     
    mail($to,$subject,$msg,$headers);
    header('Location: merci.html');

  5. #5
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Avec les conseils d'une autre personne, j'ai essayé de changer la fonction mais le résultat est toujours le même! Quelqu'un aurait-il une solution svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    function get_extension($filename)
    {  $parts = explode('.',$filename);
       $last = count($parts) - 1;
       $ext = $parts[$last];
       return $ext;
    }
     
    $file_name = $name_file;
    $extension=get_extension($file_name);
    $file_type="image/png";
    if($extension=="gif"){$file_type="image/gif";}
    else if($extension=="bmp"){$file_type="image/bmp";}
     
    // Destinataire 
    $to = "marketing@blablablou_antispam_bloublou.com"; 
     
    //Objet
    $subject = "Demande de devis provenant de M./Mlle/Mme : " .$nom."rn";
     
    // clé aléatoire de limite
    $boundary = md5(uniqid(microtime(), TRUE));
     
    // Headers
    $headers  = "From: $email <$email>"."rn";
    $headers .= "MIME-Version: 1.0rn";
    $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."rn";
    $headers .= "rn";
     
    //Accuse de reception
    $headers .= "X-Confirm-Reading-To: ".$_SESSION["adresse"]."rn";
     
    // Message
    $msg = "--$boundaryrn";
    $msg .= "Content-Type: text/plain; charset="iso-8859-1" rn";
    $msg .= "Content-Transfer-Encoding:8bitrn";
    $msg .= "Coordonnees\n
    nom : $nom
    prenom : $prenom 
    adresse : $adresse 
    ville : $ville 
    departement : $departement 
    tel : $tel 
    email : $email\n
     
    L'installation\n
    type d'installation : $choix_photovoltaique 
    type d'installation : $autre_photovoltaique Wc
    type de pose : $pose_photovoltaique\n
     
    Le batiment\n
    type de batiment : $type_batiment 
    type de batiment : $autre_batiment\n
     
    La toiture\n
    type de toiture : $type_toiture 
    orientation toiture : $orientation_toiture 
    inclinaison toiture : $inclinaison_toiture 
    hauteur toiture : $hauteur_toiture 
    surface de la toiture : $toiture_A m de long pour $toiture_B m de large\n
     
    Le projet\n
    date de projet : $delai_projet 
    commentaires : $commentaires"."rn";
     
    // Pièce jointe
     
    if (file_exists($file_name))
    {    $file_size = filesize($file_name);
     
         $handle = fopen($file_name, 'r') or die('Le fichier '.$file_name.'ne peut pas etre ouvert');
         $content = fread($handle, $file_size);
         $f = fclose($handle);
     
         $content = chunk_split(base64_encode($content));
         $msg .= "--$boundaryrn";
         $msg .= "Content-type:$file_type;name="$file_name"rn";
         $msg .= "Content-transfer-encoding: base64rn";
         $msg .= "Content-Disposition: inline; filename="$file_name"rn";
         $msg .= "rn";
         $msg .= $content."rn";
         $msg .= "--$boundary--rn";
    } 
    // Fin 
    mail($to,$subject,$msg,$headers);
    header('Location: merci.html'); 
     
    //on détruit la session quand les infos sont envoyées
    session_destroy();
    }
    ?>
    Merci

Discussions similaires

  1. [Upload] renommer un fichier uploader !
    Par keishah dans le forum Langage
    Réponses: 3
    Dernier message: 04/10/2006, 21h22
  2. [Upload] renommer un fichier uploadé
    Par spawns dans le forum Langage
    Réponses: 13
    Dernier message: 08/07/2006, 20h29
  3. Réponses: 4
    Dernier message: 28/05/2006, 19h51
  4. [Upload] Renommer un fichier avant de l'envoyer
    Par wishmastah dans le forum Langage
    Réponses: 10
    Dernier message: 02/04/2006, 01h25
  5. [Upload] Upload, renommer le fichier
    Par Alain15 dans le forum Langage
    Réponses: 15
    Dernier message: 14/02/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo