Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/07/2007, 12h21   #1
Invité de passage
 
Étudiant
Inscription : juin 2007
Messages : 8
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 8
Points : 0
Points : 0
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
Citation:
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 :
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 :
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 :
1
2
// Pièce jointe
$file_name = '$fichier_image';
J'espère ne pas m'être trompé dans ma démarche.

Merci par avance
draedalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 12h27   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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 :
$name_file = $_SESSION['nom'] . time() . $_FILES['upload']['name'];
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 13h26   #3
Invité de passage
 
Étudiant
Inscription : juin 2007
Messages : 8
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

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

Code :
$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 :
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 !
draedalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 14h20   #4
Invité de passage
 
Étudiant
Inscription : juin 2007
Messages : 8
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 8
Points : 0
Points : 0
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 :
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');
draedalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 12h26   #5
Invité de passage
 
Étudiant
Inscription : juin 2007
Messages : 8
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 8
Points : 0
Points : 0
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 :
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
draedalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h26.


 
 
 
 
Partenaires

Hébergement Web