Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 16/01/2011, 10h29   #1
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Par défaut renommer l'extension de fichiers en minuscules

Bonjour,

j'ai codé un script qui permet d'envoyer un mail avec une pièce attachée ; je dois tenir compte de l'extension du fichier ; pour simplifier, j'aimerais la convertir en minuscules. Or si je le fais :
Code :
1
2
3
4
5
 $format="%[^.].%s";
 $nom=$_FILES['file']['name'];
 $nb=sscanf($nom,$format,$nomfichier,$ext);
 $ext=strtolower($ext);
 $nom=$nomfichier.".".$ext;
puis
Code :
1
2
3
	$chemin_destination = './';	
	$res_upload=move_uploaded_file($_FILES['file']['tmp_name'], $nom);
	$adr_file=$chemin_destination.$nom;
(le script nécessite un upload du fichier), le mail se fait bien, mais le nom du fichier est déformé (ex : copie_de_xxx.JPG devient copie). Quelle est la solution ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 10h39   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
As-tu debugué un minimum ? En particulier a quel moment perds-tu un bout du nom de fichier ?

Au passage il y a quelque chose d'incoherent dans ton script :
si le fichier n'a pas besoin d'etre conservé, il n'y a pas lieu de le renommer ni d'utiliser move_uploaded_file() : c'est juste le nom de la pièce jointe qui change.
Si le fichier doit etre conservé, le move_uploaded_file() doit se faire vers le repertoire de destination avec le nouveau nom.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 12h45   #3
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Je viens de faire un nouvel essai : l'upload marche bien ; c'est après que le nom est perdu. (et du coup, je ne comprends pas).
D'autre part, tu dis que l'upload ne sert à rien si le fichier ne doit pas être conservé : c'est bien le cas, vu qu'après l'envoi du mail, je l'efface (unlink), mais si je supprime l'upload, il n'y a plus de mail...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 13h17   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Si ton fichier sert juste pour le mail, il n'y a pas lieu de renommer, de deplacer ou de supprimer le fichier uploadé.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 13h56   #5
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Je renomme l'extension du fichier, car les majuscules sont souvent employées et que je préfère éviter de les gérer ; c'est déjà assez long comme ça :
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
switch ($ext) {
case "avi": $mime="video/avi"; break;
case "bmp": $mime="image/bmp"; break;
case "c": $mime="text/x-c"; break;
case "com": $mime="text/plain"; break;
case "css": $mime="text/css"; break;
case "doc": $mime="application/msword"; break;
case "dot": $mime="application/msword"; break;
case "eps": $mime="application/postscript"; break;
case "exe": $mime="application/octet-stream"; break;
case "gif": $mime="image/gif"; break;
case "gz": $mime="application/x-compressed"; break;
case "h": $mime="text/x-h"; break;
case "hlp": $mime="application/hlp"; break;
case "htm": $mime="text/html"; break;
case "html": $mime="text/html"; break;
case "ico" : $me="image/x-icon"; break;
case "jpeg": $mime="image/jpeg"; break;
case "jpg":$mime="image/jpeg"; break;
case "log": $mime="text/plain"; break;
case "m2v": $mime="video/mpeg"; break;
case "mht": $mime="message/rfc822"; break;
case "mime": $mime="message/rfc822"; break;
case "mov": $mime="video/quicktime"; break;
case "mpeg":  $mime="video/mpeg"; break;
case "mpg": $mime="video/mpeg"; break;
case "pdf": $mime="application/pdf"; break;
case "png": $mime="image/png"; break;
case "pot": $mime="application/mspowerpoint"; break;
case "pps": $mime="application/mspowerpoint"; break;
case "ppt": $mime="application/powerpoint"; break;
case "ps": $mime="application/postscript"; break;
case "rtf": $mime="application/x-rtf"; break;
case "tar": $mime="application/x-tar"; break;
case "tiff": $mime="image/tiff"; break;
case "wav" : $mime="audio/wav"; break;
case "wmv" : $mime="audio/wmv"; break;
case "xls": $mime="application/excel"; break;
case "xml": $mime="application/xml"; break;
case "zip": $mime="application/zip"; break;
case "wga": $mime="application/wga"; break;
case "rar": $mime="application/rar"; break;
default: echo "extension non pr&eacute;vue<br>";
 
}
d'où mon souhait de renommer les majuscules en minuscules et je supprime le fichier uploadé car je ne l'uploade que pour envoyer le mail et je ne souhaite pas encombrer l'espace FTP...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 14h00   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Les fichiers uploadés sont déjà supprimés a la fin du script ; il n'y a pas lieu de le faire à la main.

Pour le renommage, il ne sert a rien puisque le nom du fichier dans le mail est défini par le script d'envoi du mail et non par le nom que porte réellement le fichier.
C'est au niveau de la conception du mail que tu dois éliminer tes majuscules, renommer physiquement le fichier n'a pas d'intérêt.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 14h27   #7
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
OK, mais pour l'envoi du mail, j'avais utilisé un code (venant justement de ce forum), et je ne sais pas quelle variable changer. Peux-tu m'aider ?
Code actuel :
Code php :
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
	$base=basename($adr_file);
 
 $format="%[^.].%s";
 $nom=$_FILES['file']['name'];
 $nb=sscanf($nom,$format,$nomfichier,$ext);
 $ext=strtolower($ext);
 	echo "ext=".$ext."<br>";
 $nom=$nomfichier.".".$ext; 	
 
 
switch ($ext) {
case "avi": $mime="video/avi"; break;
case "bmp":etc...
default: echo "extension non pr&eacute;vue<br>";
 
}
 
	$message.='--'.$frontiere."\n";
	$message.= 'Content-Type: '.$mime.'; name='.$base."\n";
	$message.= 'Content-Transfer-Encoding: base64'."\n";
	$message.= 'Content-Disposition:attachement; filename='.$base."\n\n";
	$message.= chunk_split(base64_encode(file_get_contents($adr_file)))."\n";
	$message.='--'.$frontiere.'--'."\n";}
	else $message=$msg;
 
	$sujet="formulaire";
 
 
 
 
	(@mail($destinataire,$sujet,$message,$headers));
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 15h49   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
juste une petite question, ce code la il sort d'où ?

Code :
1
2
3
4
5
6
$format="%[^.].%s";
$nom=$_FILES['file']['name'];
$nb=sscanf($nom,$format,$nomfichier,$ext);
$ext=strtolower($ext);
echo "ext=".$ext."<br>";
$nom=$nomfichier.".".$ext;
ca fait plusieurs fois que je le vois, donc si on peu le surpimer a la source ca serait pas mal, vu que pathinfo fait le meme boulot...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 16h08   #9
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Le code est de moi, vu que je ne connaissais pas pathinfo. Je viens de le remplacer par :
Code :
1
2
3
4
 $nom=$_FILES['file']['name'];
$ext== pathinfo($nom);
 $nom=$nomfichier.".".$ext;
  	echo "ext=".$ext."<br>";
mais ça me retourne une extension vide : quelle est l'erreur ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 16h12   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par laurentSc Voir le message
Le code est de moi, vu que je ne connaissais pas pathinfo. Je viens de le remplacer par :
Code :
1
2
3
4
 $nom=$_FILES['file']['name'];
$ext== pathinfo($nom);
 $nom=$nomfichier.".".$ext;
  	echo "ext=".$ext."<br>";
mais ça me retourne une extension vide : quelle est l'erreur ?
déja y'a 2 égales, et pathinfo te revoie un tableau,
d'ailleur active les erreurs PHP parce que la il devrait pas aimé tout ce que ta mis, verifie ton display_errors et error_reporting
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 16h18   #11
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonjour,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php 
 
$fichier="test.php";
 
$ext= pathinfo($fichier, PATHINFO_EXTENSION);
 
if(empty($ext)) 
{
	echo "pas d'extension !";
}
else 
{
	echo "extension : ".$ext;	
}
 
?>
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 16h28   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par ska_root Voir le message
Bonjour,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php 
 
$fichier="test.php";
 
$ext= pathinfo($fichier, PATHINFO_EXTENSION);
 
if(empty($ext)) 
{
	echo "pas d'extension !";
}
else 
{
	echo "extension : ".$ext;	
}
 
?>
c'est ce qu'il veut, il veut le nom du fichier entier mais avec l'extension en minuscule
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 18h17   #13
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Sans avoir lu les 2 derniers posts, j'ai trouvé une solution :
Code php :
1
2
3
4
$nom=$_FILES['file']['name'];
$ext= pathinfo($nom);
$ext=$ext['extension'];
echo "ext=".$ext."<br>";
mais par contre, j'ai encore le souci de transformer l'extension en minuscules...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 18h33   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par laurentSc Voir le message
Sans avoir lu les 2 derniers posts, j'ai trouvé une solution : mais par contre, j'ai encore le souci de transformer l'extension en minuscules...
pourtant tu l'as fait dans ton premier code...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 18h51   #15
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Oui, je l'avais fait (strtolower), mais ce que je n'ai pas compris, c'est que si le fichier que j'uploade a le bon nom (avec une extension en minuscule), le fichier joint dans le mail a un mauvais nom (même si quand on ouvre le fichier, il est bon).
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 19h01   #16
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

D'après les lignes ci-dessous :
Code :
1
2
3
$message.= 'Content-Type: '.$mime.'; name='.$base."\n";
//
$message.= 'Content-Disposition:attachement; filename='.$base."\n\n";
Le résultat de la transformation du nom du fichier (nom + extension) en minuscules devra se situer dans la variable $base.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 19h01   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par laurentSc Voir le message
Oui, je l'avais fait (strtolower), mais ce que je n'ai pas compris, c'est que si le fichier que j'uploade a le bon nom (avec une extension en minuscule), le fichier joint dans le mail a un mauvais nom (même si quand on ouvre le fichier, il est bon).

parce que tu va chercher $base dans le mail
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 23h02   #18
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Ca ne marche toujours pas si l'extension est en majuscule ; sauriez-vous me dire pourquoi :

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
 $nom=$_FILES['file']['name'];
$pathinfo= pathinfo($nom);
$ext=$pathinfo['extension'];
$nomfichier=$pathinfo['basename'];
$format="%[^.].%s";
$nb=sscanf($nomfichier,$format,$basename,$extension);
$nom=$basename.".".$ext;
$adr_file=$nom; // avant changer l'ext
$ext=strtolower($ext);
$nom=$basename.".".$ext;
$base=basename($nom);	// après chgt
switch ($ext) {
case "avi": $mime="video/avi"; break;
case "bmp":etc...
default: echo "extension non pr&eacute;vue<br>";
}
	$message.='--'.$frontiere."\n";
	$message.= 'Content-Type: '.$mime.'; name='.$base."\n";
	$message.= 'Content-Transfer-Encoding: base64'."\n";
	$message.= 'Content-Disposition:attachement; filename='.$base."\n\n";
	$message.= chunk_split(base64_encode(file_get_contents($adr_file)))."\n";
	$message.='--'.$frontiere.'--'."\n";}
	else $message=$msg;
 
	$sujet="formulaire";
 
	@mail($destinataire,$sujet,$message,$headers);
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2011, 23h31   #19
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Il ne faut pas modifier la variable $adr_file.
Code :
$adr_file=$nom; // avant changer l'ext
Car elle est utilisée pour accéder au fichier comme on peut le voir dans la ligne ci-dessous :
Code :
$message.= chunk_split(base64_encode(file_get_contents($adr_file)))."\n";
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 00h32   #20
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par laurentSc Voir le message
Ca ne marche toujours pas si l'extension est en majuscule ; sauriez-vous me dire pourquoi :

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
 $nom=$_FILES['file']['name'];
$pathinfo= pathinfo($nom);
$ext=$pathinfo['extension'];
$nomfichier=$pathinfo['basename'];
$format="%[^.].%s";
$nb=sscanf($nomfichier,$format,$basename,$extension);
$nom=$basename.".".$ext;
$adr_file=$nom; // avant changer l'ext
$ext=strtolower($ext);
$nom=$basename.".".$ext;
$base=basename($nom);	// après chgt
switch ($ext) {
case "avi": $mime="video/avi"; break;
case "bmp":etc...
default: echo "extension non pr&eacute;vue<br>";
}
	$message.='--'.$frontiere."\n";
	$message.= 'Content-Type: '.$mime.'; name='.$base."\n";
	$message.= 'Content-Transfer-Encoding: base64'."\n";
	$message.= 'Content-Disposition:attachement; filename='.$base."\n\n";
	$message.= chunk_split(base64_encode(file_get_contents($adr_file)))."\n";
	$message.='--'.$frontiere.'--'."\n";}
	else $message=$msg;
 
	$sujet="formulaire";
 
	@mail($destinataire,$sujet,$message,$headers);

pareil pourquoi tu gardes $base ???
Code :
$message.= 'Content-Type: '.$mime.'; name='.$base."\n";
relis toi...
en pslus tu garde ton ancien code melangé avec le nouveau, c'est du grand n'importe quoi
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h46.


 
 
 
 
Partenaires

Hébergement Web