Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je développe un module de newsletter permettant à l'aide d'un formulaire html d'envoyer des mails.
J'ai donc des <input type='file' ...> permettant d'insérer des pièces jointes.
Lorsque j'envoi le formulaire je récupère bien les fichiers mais je voudrais savoir si on est obligé de renseigner le type de fichier à la méthode createAttachment ou pas.
En effet, je ne sais pas à l'avance le type de fichier qui sera envoyé par les utilisateurs et je veux qu'ils puissent envoyer n'importe quel type.
Auriez vous une solution de script qui permettrait d'avoir un genre de sélection de type automatique ou truc du genre ?
Car tester toutes les extensions possibles c'est moyen :s
Merci !
Hors ligne
J'ai trouvé cette solution pour récupérer le type mime du fichier uploadé, ça fonctionnne très bien !
Si ça peut aider quelqu'un
function typeMime($nomFichier)
/* retourne le type MIME à partir de l'extension de fichier contenu dans $nomFichier
Exemple : $nomFichier = "fichier.pdf" => type renvoyé : "application/pdf" */
{
// on détecte d'abord le navigateur, ça nous servira plus tard
if(preg_match("@Opera(/| )([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats))
$navigateur="Opera";
elseif(preg_match("@MSIE ([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats))
$navigateur="Internet Explorer";
else $navigateur="Mozilla";
// on récupère la liste des extensions de fichiers et leurs types Mime associés
$mime=parse_ini_file("mime.ini");
$extension=substr($nomFichier, strrpos($nomFichier, ".")+1);
/* on affecte le type Mime si on a trouvé l'extension sinon le type par défaut (un flux d'octets).
Attention : Internet Explorer et Opera ne supporte pas le type MIME standard */
if(array_key_exists($extension, $mime)) $type=$mime[$extension];
else $type=($navigateur!="Mozilla") ? 'application/octetstream' : 'application/octet-stream';
return $type;
}
Et maintenant le fichier "mime.ini" :
[textes]
txt = text/plain
htm = text/html
html = text/html
css = text/css
[images]
png = image/png
gif = image/gif
jpg = image/jpeg
jpeg = image/jpeg
bmp = image/bmp
tif = image/tiff
[archives]
bz2 = application/x-bzip
gz = application/x-gzip
tar = application/x-tar
zip = application/zip
[audio]
aif = audio/aiff
aiff = audio/aiff
mid = audio/mid
midi = audio/mid
mp3 = audio/mpeg
ogg = audio/ogg
wav = audio/wav
wma = audio/x-ms-wma
[video]
asf = video/x-ms-asf
asx = video/x-ms-asf
avi = video/avi
mpg = video/mpeg
mpeg = video/mpeg
wmv = video/x-ms-wmv
wmx = video/x-ms-wmx
[xml]
xml = text/xml
xsl = text/xsl
[microsoft]
doc = application/msword
rtf = application/msword
xls = application/excel
pps = application/vnd.ms-powerpoint
ppt = application/vnd.ms-powerpoint
[adobe]
pdf = application/pdf
ai = application/postscript
eps = application/postscript
psd = image/psd
[macromedia]
swf = application/x-shockwave-flash
[real]
ra = audio/vnd.rn-realaudio
ram = audio/x-pn-realaudio
rm = application/vnd.rn-realmedia
rv = video/vnd.rn-realvideo
[autres]
exe = application/x-msdownload
pls = audio/scpls
m3u = audio/x-mpegurl
Dernière modification par MaitreTsiang (29-05-2008 11:38:16)
Hors ligne
Bonjour,
L'autre solution, plus fiable mais plus difficile à mettre en place, est d'utiliser la librairie fileInfo.
D'un point de vue purement théorique, quand on change l'extension d'un fichier, ça ne change pas son mime type. Donc on ne peut normalement pas se fier à l'extension pour déterminer le mime.
La libraire fileinfo (regarde dans PECL) permet de détecter le type du fichier en fonction de certains bits caractéristiques...
Dans la pratique ta solution est quasiment tjrs suffisante...
A+, Philippe
Hors ligne
Oui je connaissais fileinfo mais pour cela il faut avoir le contrôle du serveur (ce qui n'est pas toujours le cas) , comme tu l'a dis ma solution devrait passer un peu partout surtout dans mon cas (service local).
Merci et bonne continuation !
Hors ligne
Pages: 1