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 18/12/2006, 12h23   #1
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Par défaut Fiabiliser la détection du type Mime d'un fichier

Bonjour,

je demande votre avis sur un problème que je rencontre. En effet, je cherche la methode la plus efficace pour connaite le mime d'un fichier uploadé :

- il y a $_FILES['userfile']['type'] : ca fonctionne mais on peut le detourner facilement en changeant l'extension du fichier ou en dedouillant les parametres du navigateur

- Se baser sur l'extension du fichier : coté sécurité, c'est meme pas la peine

- mime_content_type : ca fonctionne avec un moyen inferieur à 1/10 et dans la plus part des cas elle renvoi une chaine vide

- les fonctions finfo (PECL) : la version actuelle est buguée (elle renvoi tout le temps 'application/x-dpkg'), mais meme si on contourne le probleme en supprimant tous les ! du fichier magic.mime, le resultat est tres loin d'etre satisfaisant

- je suis sur windows (apache), alors les commandes genre 'file -bi $filename' ne sont pas possible

voila, vous pouvez remarquez que je postule pas par hasard mais apres une longue recherche et des nombreuses experiences. C'est pour cette raison que je me tourne vers vous pour vous demander si vous connaissez soit : une autre methode fiable pour trouver le mime d'un fichier, ou tout simplement comment améliorer les resultats d'une des methodes citées ci-dessus.

merci bcp d'avance
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 12h43   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Eternel problème... Même sous *nix, le "file -bi" ne retourne pas toujours un résultat cohérent (genre Word pour un Powerpoint )
Tu peux éventuellement jeter un oeil à
http://www.freedesktop.org/wiki/Stan..._2dinfo_2dspec
http://www.freedesktop.org/wiki/Soft...ared-mime-info

__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 13h00   #3
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
les quelques premier octect contient souvant des trucs genre
GIF, JFIF...

c'est vrais que ça ne sera de toute façon jamais fiable...

Personnellement, je te conseillerai d'établir un liste des entêtes de fichier type
puis avec un file() de prendre la première ligne et de contrôlé cette entête avec les types que tu à établies.

(certain fichier n'ont pas d'entête)
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h05   #4
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
c'est bien ce que je disais, c pas du cadeau!! mais bon j'ai un peu l'habitude maintenant!
Citation:
Personnellement, je te conseillerai d'établir un liste des entêtes de fichier type
oui ce genre de liste sont deja disponibles dans mon programme
Citation:
file() de prendre la première ligne et de contrôlé cette entête avec les types que tu à établies
j'utilisais bien ce principe pour identifier les fichiers OpenOffice, c'est pas parfait ma ca fonctionne pas mal. Bon bein si vous dites qu'il y a que ça à faire, alors j'essayerai de le generaliser sur tous les autres types
Citation:
(certain fichier n'ont pas d'entête)
tu veux dire qu'il y a des types de fichier qui n'ont pas d'etetes? parce que à la limite si j'arrive à les identifier je pourrais utiliser une autre methode pour connaitre leurs mimes!!
mais si tu veux dire que dans le meme type de fichier (word par exemple), il y a des documents qui ont des entetes et d'autres ne l'ont pas! ça ca va me tuer!
en tout cas je vais me plonger à developper un petit algo qui fera l'affaire, je vais le tester et ensuite vous le proposer pour une éventuelle vérification

comme on dit plusieurs tetes qui pensent c'est tjs mieu qu'une

EDIT : pour j'avoue que je comprend que dale de ce qu'ils cherchent à faire mais promis je regarderai ca de plus pres ce soir
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h12   #5
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Ou comment reinventer la roue
C'est justement le role de magic.mime
Code magic.mime :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
...
# msword: file(1) magic for MS Word files
#
# Contributor claims:
# Reversed-engineered MS Word magic numbers
#
 
0       string          \376\067\0\043                  application/msword
0       string          \320\317\021\340\241\261        application/msword
0       string          \333\245-\0\0\0                 application/msword
 
...
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h12   #6
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
Les fichiers textes par exemples, n'ont pas d'entête par il sont brute.

Mais malheureusement, beaucoup de fichiers ne peuvent être identifié uniquement grâce à leur extension

Je pense qu'il faudrait crée une base, avec 2 types d'informations en fonction du type de fichier:
les éléments que l'on retrouve à coup sure (JFIF, GIF)
le nombre de d'octet maximum ou trouvé ses éléments (11, 3)
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h29   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
... ce que propose magic.mime et http://www.freedesktop.org/wiki/Soft...ared-mime-info
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h46   #8
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
désolé :p on a posté en même temps :p j'avais pas vue
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h48   #9
lr
Membre du Club
 
Inscription : octobre 2003
Messages : 329
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 329
Points : 69
Points : 69
Envoyer un message via ICQ à lr
Salut,

Qqun aurait-il un exemple pour utiliser magic mime ?
lr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h51   #10
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
http://php.net/mime_content_type

Les commentaires de la doc sont à lire aussi, on trouve parfois des perles.
Par exemple, une version de `file` pour win32 :
http://gnuwin32.sourceforge.net/packages/file.htm
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2006, 17h55   #11
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
[Fichiers] Détecter le type d'un fichier
julp en avait parlé
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 09h39   #12
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
comme Mr N. a dit, on va pas chercher à réinventer la roue. Du coup, je me suis intéressé à la version de `file` pour win32 : Elle est facile à installer et à utiliser, elle utilise aussi le mime.magic mais détecte bcp plus de type qu'avec le mime_content_type ou fileinfo

seul regret pour moi, c'est qu'elle arrive pas à détecter le powerpoint (envoi chaîne vide) : si j'arrive à la faire fonctionner sûrement en bidouillant le magic.mime, ca sera parfait!!

Pour des fichiers de text brute, il renvoi une chaîne qui contient text/plain + d'autres détails, mais bon c pas très grave, il suffit de traiter ensuite la chaîne envoyé en ne récupérant que la première partie

en fait, est ce que quelqu'un a une idée de ce qu'il faut ajouter dans le magic.mime pour détecter le powertpoint?
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 10h22   #13
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par SegmentationFault
Pour des fichiers de text brute, il renvoi une chaîne qui contient text/plain + d'autres détails, mais bon c pas très grave, il suffit de traiter ensuite la chaîne envoyé en ne récupérant que la première partie
file -bi, suivi d'un explode sur le point virgule non ?
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 10h51   #14
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Citation:
Envoyé par Mr N.
file -bi, suivi d'un explode sur le point virgule non ?
tout à fait!

T'as pas une idée pour le powerpoint?!
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 12h03   #15
lr
Membre du Club
 
Inscription : octobre 2003
Messages : 329
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 329
Points : 69
Points : 69
Envoyer un message via ICQ à lr
J'ai fais un test en appelant "file" :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
calc.ods  	application/x-zip
excel.xls 	application/msword
gif.GIF 	image/gif
impress.odp 	application/x-zip
jpg.jpg 	image/jpeg
pdf.pdf 	application/pdf
png.png 	image/png
powerpoint.ppt 	application/msword
rar.rar 	application/x-rar
text.txt 	text/plain
word.doc 	application/msword
writer.odt 	application/x-zip
zip.zip 	application/x-zip
- les documents de OpenOffice Calc, Impress et Writer sont vus comme des zip. Je sais que ce sont effectivement des zip mais du coup, comment peut-on les différencier (j'imagine que le problème sera le même avec le nouveau format de MS Office)
- excel et powerpoint sont vus comme du word

Pensez-vous qu'il existe un moyen d'affiner ça ?
lr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 12h55   #16
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par SegmentationFault
T'as pas une idée pour le powerpoint?!
Non Mis à part la solution de freedesktop (cf liens première réponse)... que je n'ai pas testé.

@lr, quel est ton environnement ? Peut-etre que ton magic.mime n'est pas à jour...
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 14h07   #17
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Citation:
Envoyé par lr
J'ai fais un test en appelant "file" :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
calc.ods  	application/x-zip
excel.xls 	application/msword
gif.GIF 	image/gif
impress.odp 	application/x-zip
jpg.jpg 	image/jpeg
pdf.pdf 	application/pdf
png.png 	image/png
powerpoint.ppt 	application/msword
rar.rar 	application/x-rar
text.txt 	text/plain
word.doc 	application/msword
writer.odt 	application/x-zip
zip.zip 	application/x-zip
- les documents de OpenOffice Calc, Impress et Writer sont vus comme des zip. Je sais que ce sont effectivement des zip mais du coup, comment peut-on les différencier (j'imagine que le problème sera le même avec le nouveau format de MS Office)
- excel et powerpoint sont vus comme du word

Pensez-vous qu'il existe un moyen d'affiner ça ?
c'est bizzare que ca te donne application/msword pour excel et powerpoint! j'ai la derniere version et il me donne une chaine vide pour ces deux là, et entre nous, je prefere
pour openoffice, à mon avis c'est plus simple, personnellement s'il me dit que c'est application/x-zip, alors je le detarre et je regarde s'il contient un fichier META-INF/manifest.xml, et normalement dans ce ficier il y a le mime. je sais c compliqué mais bon j'ai pas d'autres solution

EDIT: pour freedesktop t'es sur Mr N. que cette appli pour fonctionner sur windows? j'ai l'impression que c'est une appli à *nix
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 14h33   #18
lr
Membre du Club
 
Inscription : octobre 2003
Messages : 329
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 329
Points : 69
Points : 69
Envoyer un message via ICQ à lr
Notre serveur tourne sur une Fedora Core 3. Il faut que je regarde comment mettre à jour le fichier, mais si c'est pour avoir des chaînes vides, pas sûr que je le fasse

Merci pour votre aide
lr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 18h44   #19
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Essaie de passe à FC5 ...
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 18h46   #20
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par SegmentationFault
EDIT: pour freedesktop t'es sur Mr N. que cette appli pour fonctionner sur windows? j'ai l'impression que c'est une appli à *nix
Oui c'est à l'origine pour *nix, mais bon c'est du c, ça devrait se compiler sur win32
Et il y a une implémentation en PHP mais le lien est mort
__________________
Get your motor runnin'
Head out on the highway...
Mr N. 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 09h50.


 
 
 
 
Partenaires

Hébergement Web