webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 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és20Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention14 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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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és341Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention14 juillet 201114 14 juil. 2006 à 15:36
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 14 juil. 2006 à 03:01
Pourquoi faire un explode... vous vous compliqués la vie... .. ?
@ 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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 14 juil. 2006 à 01:47
entre nous, là, il renvoi l'extension et non le type...
guill76
Messages postés193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és193Date d'inscriptionmercredi 24 août 2005StatutMembreDernière intervention 3 juin 2016 13 juil. 2006 à 20:18
ah excuses moi myXylo j'avais pas vu ton post.
guill76
Messages postés193Date d'inscriptionmercredi 24 août 2005StatutMembreDerniè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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és57Date d'inscriptionvendredi 21 mai 2004StatutMembreDernière intervention28 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és57Date d'inscriptionvendredi 21 mai 2004StatutMembreDernière intervention28 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.
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és388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 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és388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 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és20Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention14 juillet 2006 13 juil. 2006 à 18:05
Ah oui, t'a raison, je me suis trompé
MyXiLo
Messages postés57Date d'inscriptionvendredi 21 mai 2004StatutMembreDernière intervention28 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és20Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention14 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és20Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention14 juillet 2006 13 juil. 2006 à 17:09
28 sept. 2007 à 11:20
Pour récupérer une extension, la meilleure façon est d'utiliser la fonction pathinfo() de PHP.
++
17 juil. 2006 à 00:00
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);
16 juil. 2006 à 01:19
15 juil. 2006 à 12:08
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).
15 juil. 2006 à 11:50
un .gz par exemples, un .data, un .tar.gz... un .php3 un .html
15 juil. 2006 à 11:00
echo substr((file_type(''),0,3));
14 juil. 2006 à 21:40
# * 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é...
14 juil. 2006 à 21:38
Evangun, il y a ici, beaucoup de sources inutiles qui font de la désinformation...
14 juil. 2006 à 20:53
14 juil. 2006 à 17:53
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.
14 juil. 2006 à 16:25
14 juil. 2006 à 16:21
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
14 juil. 2006 à 15:45
@ tchaOo°
14 juil. 2006 à 15:36
$element = pathinfo($fichier);
echo $element['extension'];
14 juil. 2006 à 15:24
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°
14 juil. 2006 à 11:25
14 juil. 2006 à 11:24
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.
14 juil. 2006 à 03:01
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°
14 juil. 2006 à 01:47
13 juil. 2006 à 20:24
13 juil. 2006 à 20:18
13 juil. 2006 à 20:17
return ( strpos($file,'.')!==false)? strtolower(array_pop(explode('.',$file))):null ;
13 juil. 2006 à 20:12
ouah... tu cartonnes...
tu savais que NULL et "NULL" c'était différent ?....
comme 0, "", false et NULL...
13 juil. 2006 à 20:08
function file_type($file)
{
$file=basename($file);
return (strpos($file, '.') && $file!='') ? strtolower((array_pop(explode('.',$file))) : 'NULL';
}
Excusez moi)
13 juil. 2006 à 20:07
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";
}
13 juil. 2006 à 18:36
13 juil. 2006 à 18:35
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
13 juil. 2006 à 18:05
13 juil. 2006 à 17:54
Il serait egalement preferable, je pense, d'utiliser le array_pop pour la rapidite. )
13 juil. 2006 à 17:33
$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
13 juil. 2006 à 17:09
http://yannvag.free.fr/PHPManual/hightlightphp.php
et copiez/collez votre code ;-) .