TYPE DU FICHER

yannvag Messages postés 20 Date d'inscription dimanche 2 janvier 2005 Statut Membre Dernière intervention 14 juillet 2006 - 13 juil. 2006 à 17:09
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 - 28 sept. 2007 à 11:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38550-type-du-ficher

webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
28 sept. 2007 à 11:20
Je suis d'accord avec tout le monde sur le fait que cette source est très mal codée et ne sert à rien en l'état.

Pour récupérer une extension, la meilleure façon est d'utiliser la fonction pathinfo() de PHP.

++
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
17 juil. 2006 à 00:00
je me corrige, vous l'aurais compris :
2 "()" en trop pardon . Faut faire le copier coller à la suite de la source. Ai-je besoin de le préciser?
echo substr(file_type(''),0,3);
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
16 juil. 2006 à 01:19
c'est pas grave coucou, je crois tu m'as pas suivi là dessus.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 juil. 2006 à 12:08
Non non, ce code reste, ne serait-ce que pour la discussion qu'il a engendré.
Après, on est tous d'accord : le code n'est pas bon, le pathinfo (à de Jeca est une bonne solution (j'avais aussi zappé ça, si ça peut te rassurer, Kankrelune, lol), et tester l'extension d'un fichier n'est pas la meilleure des sécurités, loin de là.

Yannvag, pour ce qui est des images, il y a bien mieux à faire : un premier tri côté client, certes, mais un second via getimagesize est nécessaire, est on supprime tout fichier uploadé n'ayant pas le bon mimetype (getimagesize se faisant côté serveur...pas de problème).
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
15 juil. 2006 à 11:50
?? une extention ne fait pas forcément trois caractères...

un .gz par exemples, un .data, un .tar.gz... un .php3 un .html
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
15 juil. 2006 à 11:00
Pour conclure sur cette source, je mettrais cette annotation:

echo substr((file_type(''),0,3));
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 juil. 2006 à 21:40
# * Begin : 13/07/06, Jeudi, 17h43
# * Merci de laisser le copyright

quand on voit l'heure ou la source a été postée... on se dit que pour un bout de code qui porte un (c)... il n'a pas été très très travaillé...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 juil. 2006 à 21:38
avec un include foireux, on peut exécuter n'importe quoi sur le serveur... personellement, c'est pour cette raison que je stoque tout mes fichiers (uploadés) en base de donnée... comme ça, même en cas d'erreur de ma part, le hacker ne peut pas utiliser toutes les portes... (ça ne m'empèche pas de fermer les autres portes : je ne mets pas de variables dans les includes, et pas beaucoup de "fonctions variables" comme $a($b, $c)... ou alors, $a n'est pas fonction de $_GET, POST, SERVER ou COOKIES)

Evangun, il y a ici, beaucoup de sources inutiles qui font de la désinformation...
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
14 juil. 2006 à 20:53
Salut, en toute objectivité, je pense que ce genre de fonctions devrait être supprimé du site: effectivement pathinfo() fait déjà tt le boulot, et ce n'est pas avec ce genre de source que je conseillerais d'apprendre le php... et ça encombre le site aussi.
yannvag Messages postés 20 Date d'inscription dimanche 2 janvier 2005 Statut Membre Dernière intervention 14 juillet 2006
14 juil. 2006 à 17:53
Moi, j'ai une seule chose pour ma défense :
j'utilise cette fonction pour les formulaires d'upload.
En effet, dans la balise INPUT, on peut mettre


Mais si le client modifie accept, il peut uploader des fichier .php ou .exe !

Avec cette fonction, on peut filter les formulaires afin d'éviter toute faille dans un site web.
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
14 juil. 2006 à 16:25
oh j'avais pas vu strpos au lieu de strrpos , désolé!
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
14 juil. 2006 à 16:21
Là Kankrelune c'est faux :
function getExt($fString, $lCase = true)
{
if (!is_string($fString) || false ($pos strrpos($fString, '.')))
return false;
$ext = substr($fString,$pos+1);
return ($lCase) ? strtolower($ext) : $ext;
}

$pos indiquera la valeur de la premiere extension trouvée
donc imagine que ton fichier soit toto.txt.doc, ton extension retournée sera txt.doc . tandis qu'avec array_pop tu es sur d'avoir la derniere extension puisque c'est un dépilement du tableau généré par explode
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 juil. 2006 à 15:45
Merde je connaissais pas celle là... comme quoi on en apprend tous les jours sur php... .. . ;o)

@ tchaOo°
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
14 juil. 2006 à 15:36
Et ça, ce n'est pas suffisant ?

$element = pathinfo($fichier);
echo $element['extension'];
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 juil. 2006 à 15:24
"tu raisonnes en Microsoftien, là. Et peu de serveurs web tournent sous Windows."

Non je raisonne au niveau d'apache... dans le httpd.conf le mimetype est associé à l'extension que tu veux via AddType... si tu veux que tes fichiers html soient interprétés comme du php c'est tout à fait possible... .. .

AddType application/x-httpd-php .html .htm

Quand à l'utilitée c'est pratigue de savoire quel fichier on as, pour y appliquer le traitement adéquate, par exemple lors de l'exploration d'un répertoire ou à l'upload... .. .

@ tchaOo°
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 juil. 2006 à 11:25
Je note 4. Ca ne mérite pas la moyenne, selon moi, en l'état. Il faut réécrire le code pour qu'il puise être réutiliser par des débutants.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 juil. 2006 à 11:24
kankrelune => "l'extension conditionne la façon dont est éxécuté," tu raisonnes en Microsoftien, là. Et peu de serveurs web tournent sous Windows.

Bref...si je ne suis pas convaincu de l'utilité de cette fonction, je suis par contre convaincu qu'elle est mal codée. L'exemple de Kankrelune est meilleur.

Disons que ça montre comment extirper une partie de chaîne dans une autre chaîne, à partir d'un motif...ce qui est toujours utile. Malheureusement, un coup d'oeil à la doc montre des tas d'exemples dans le genre.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 juil. 2006 à 03:01
Pourquoi faire un explode... vous vous compliqués la vie... .. ?

function getExt($fString, $lCase = true)
{
if (!is_string($fString) || false ($pos strrpos($fString, '.')))
return false;
$ext = substr($fString,$pos+1);
return ($lCase) ? strtolower($ext) : $ext;
}

C'est pas plus simple... .. ?

@ garfield90... détrompe toi... ce genre de petite fonction est bien utile pour différentes choses... quand à la sécurité il vaut mieux se baser sur l'extension avec une fonction comme ça que se baser sur le mymetype par exemple lors d'un upload... d'une part parce que ce dernier est transmit par le navigateur et non par le serveur... erreur récurante des scripts d'upload d'ailleurs... d'autre part parce que l'extension conditionne la façon dont est éxécuté, ou non, un fichier... un fichier .txt sera toujours un fichier texte même s'il contient du php (sauf config apache tordue)... .. .

@ tchaOo°
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 juil. 2006 à 01:47
entre nous, là, il renvoi l'extension et non le type...
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
13 juil. 2006 à 20:24
Par contre, si on met une seule ligne c'est moins beau niveau coloration syntaxique :-).
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
13 juil. 2006 à 20:18
ah excuses moi myXylo j'avais pas vu ton post.
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
13 juil. 2006 à 20:17
en 1 ligne :
return ( strpos($file,'.')!==false)? strtolower(array_pop(explode('.',$file))):null ;
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 juil. 2006 à 20:12
return "NULL"

ouah... tu cartonnes...

tu savais que NULL et "NULL" c'était différent ?....

comme 0, "", false et NULL...
MyXiLo Messages postés 57 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 28 juillet 2006
13 juil. 2006 à 20:08
(Plutot ceci en verite:
function file_type($file)
{
$file=basename($file);
return (strpos($file, '.') && $file!='') ? strtolower((array_pop(explode('.',$file))) : 'NULL';
}
Excusez moi)
MyXiLo Messages postés 57 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 28 juillet 2006
13 juil. 2006 à 20:07
Garfield90 > yannvag n'a pas pretendu que son code pouvait servir a un test concernant le type de fichier, il a dit qu'il avait cree une fonction permettant de retourner l'extension d'un fichier (malgre l'abus de langage dans le nom de la fonction), ce qui n'a absolument rien a voir. L'objectif de cette fonction n'est pas du tout denue d'interet meme si la fonction en elle meme est assez peu optimisee, en effet.

Sinon la fonction actuelle doit poser un probleme lorsque la chaine passee en argument est vide puisque explode retourne false dans ce cas > http://fr.php.net/manual/fr/function.explode.php

Que pensez vous de ceci ?
function file_type($file)
{
$file=basename($file);
return (strpos($file, ".") && $file!="") ? strtolower((array_pop(explode(".",$file))) : "NULL";
}
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
13 juil. 2006 à 18:36
Oula, on part quelque temps avant de poster et voila que mon texte devient de la redite :(
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
13 juil. 2006 à 18:35
achement compliquer ta fonction et cela pour pas grand chose ( extension d'un fichier ne signifie rien, a part peut etre pour le systeme de fichier de windows )

rien ne t'empeche d'avoir un fichier texte ( au hasard PHP ) et dire que c'est une image ( toujours au hasard, jpg) et l'inverse est aussi vrai.
Imagine les répercutions d'un test basé uniquement sur ca

si ton fichier s'appelle .htaccess ( htaccess n'est pas une extension a ma connaissance )
tu fais un raccourci rapide entre le type et l'extension ( par exemple un fichier php et de type texte, j'espere ne pas dire de connerie sur ce coup la )

de plus tu utilise une fonction eregi ( expression rationnelle ) pour déterminé la présence ou non d'un point
-> a voir si tu n'as pas fait une erreur sur ta regle, je connais pas les ereg, j'utilise plutot preg, et le point est a échappé (faire précédé de \) car il correspond a n'importe quel caractere
-> un simple strpos suffirait, normalement c'est moins gourmand en ressource

Pour finir, encore un hello world (vu X fois sur le web et Y fois sur code source) copyrighter en plus.

Pour ta défense, tu lui a mis un niveau débutant, il en vaut pas plus
tu fais relativement des tests sur ce qu'il y a a faire, par contre c'est pas réellement optimisé

PS : ca doit pas marché

tu as mis
return $file_extension_tab; au lieu
return $file_extension;

voila, amuse toi autant que tu peux avec les fonctions PHP mais c'est pas parce que tu découvres une nouvelle que tu dois absolument l'utilisé ( je pense en particulier a eregi ) car il existe généralement des fonctions moins gourmande dans certains cas.

Conclusion:
continues dans cette voie, évites les copyrights sur des fonctions aussi simple et bon courage
yannvag Messages postés 20 Date d'inscription dimanche 2 janvier 2005 Statut Membre Dernière intervention 14 juillet 2006
13 juil. 2006 à 18:05
Ah oui, t'a raison, je me suis trompé
MyXiLo Messages postés 57 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 28 juillet 2006
13 juil. 2006 à 17:54
( Il vaudrait mieux retourner $file_extension plutot que $file_extension_tab, n'est-ce pas ?
Il serait egalement preferable, je pense, d'utiliser le array_pop pour la rapidite. )
yannvag Messages postés 20 Date d'inscription dimanche 2 janvier 2005 Statut Membre Dernière intervention 14 juillet 2006
13 juil. 2006 à 17:33
À la place d'écrire
$file_extension=$file_extension_tab[count($file_extension_tab)-1];

J'aurais pu mettre
$file_extension=array_pop($file_extension_tab);

Mais bon, ça revient au même, et je préfère mes trucs à moi
yannvag Messages postés 20 Date d'inscription dimanche 2 janvier 2005 Statut Membre Dernière intervention 14 juillet 2006
13 juil. 2006 à 17:09
Pour une meilleure colorisation syntaxique, allez voir sur
http://yannvag.free.fr/PHPManual/hightlightphp.php
et copiez/collez votre code ;-) .
Rejoignez-nous