begin process at 2010 09 06 06:17:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > TYPE DU FICHER

TYPE DU FICHER


 Information sur la source

Note :
3 / 10 - par 3 personnes
3,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Classé sous :type, fichier, mime, extension, point Niveau :Débutant Date de création :13/07/2006 Date de mise à jour :13/07/2006 18:46:13 Vu :14 180

Auteur : yannvag

Ecrire un message privé
Site perso
Commentaire sur cette source (31)
Ajouter un commentaire et/ou une note

 Description

Cette petite fonction toute simple vous determine l'extension (et donc le type) d'un fichier.
Il vous suffira d'entrer l'adresse d'un fichier en tant qu'argument.

Type de fonction :
string file_type($file)
$file est l'adresse du fichier

ATTENTION, ce code ne retoune pas le type MIME mais l'extension du fichier

Source

  • <?php
  • /**
  • * Description : Trouve le type d'un fichier
  • * Auteur : YannVag
  • * Begin : 13/07/06, Jeudi, 17h43
  • * Merci de laisser le copyright
  • */
  • function file_type($file)
  • {
  • $file=basename($file);
  • if(eregi(".",$file)
  • {
  • $file_extension_tab=explode(".",$file);
  • $file_extension=$file_extension_tab[count($file_extension_tab)-1];
  • $file_extension=strtolower($file_extension);
  • return $file_extension;
  • }
  • else
  • {
  • return "NULL";
  • }
  • }
  • ?>
<?php

/**
 * Description : Trouve le type d'un fichier
 * Auteur      : YannVag
 * Begin       : 13/07/06, Jeudi, 17h43
 * Merci de laisser le copyright
 */

function file_type($file)
{
	$file=basename($file);
	if(eregi(".",$file)
	{
		$file_extension_tab=explode(".",$file);
		$file_extension=$file_extension_tab[count($file_extension_tab)-1];
		$file_extension=strtolower($file_extension);
		return $file_extension;
	}
	else
	{
		return "NULL";
	}
}

?>

 Conclusion

Pour utiliser la fonction, vous faites :
$type=file_type("Mon document.txt");
$type est txt

Cette fonction est sans faille :
- il met en miniscule le type de fichier (fichier.HTML)     -> retourne html
- vous pouvez rentrer des adresse tel que dossier/fichier.rtf
- si le fichier a plusieurs "points", la fonction marche toujours
   (exemple : fichier.blablabla.txt     -> retourne txt et pas blablabla.txt
- si le fichier n'a pas de type, la fonction retourne NULL
- si le fichier est "fichier.NULL"    -> retourne null et pas NULL

Pour faire vos tests :

if(file_type($_POST["fichier"]) == "jpg")
{
  //
}
else
{
  //
}


 Historique

13 juillet 2006 17:12:31 :
Probleme dans la ligne 13 : erreur : cout() n'existe pas ! c'est count() !
13 juillet 2006 17:45:42 :
Un petit copyright ne fait jamais de mal ;) !
13 juillet 2006 18:06:21 :
Ligne 18; je ne dois pas retourner $file_extension_tab mais $file_extension
13 juillet 2006 18:46:13 :
Modification des copyright

 Sources du même auteur

NOMBRE_PREMIER
Source avec Zip Source avec une capture SIMPLECALENDRIER

 Sources de la même categorie

Source avec Zip COMPRESSER (MINIMISER) UN FICHIER CSS par shevabam
RÉCUPÉRER UNE IMAGE EN LIGNE (OU AUTRES FICHIERS) par RaftY
Source avec Zip Source avec une capture LISTAGE DE FICHIERS par jeromin75
Source avec Zip CODE POUR HÉBERGEUR D'IMAGE par bonhommecrea
Source avec Zip EFFACER LES FICHIERS IMAGES ( .PNG ), D'UN RÉPERTOIRE TEMPS ... par christophe0511

 Sources en rapport avec celle ci

Source avec Zip RÉCUPÉRER LE TYPE D'UN FICHIER (3 FONCTIONS DIFFÉRENTES) par bad_dark_spirit
PARCOURIR UN RÉPERTOIRE ET SES SOUS SOUS SOUS... RÉPERTOIRE ... par micmonay
CONNAITRE SI LE FICHIER UPLOADER N'EST PAS UN FICHIER PHP par amezghal
TRI PAR TYPE DE FICHIER / EXTENSION par Evangun
UPLOAD CHEZ FREE QUI MARCHE!! par Nifhell

Commentaires et avis

Commentaire de yannvag le 13/07/2006 17:09:57

Pour une meilleure colorisation syntaxique, allez voir sur
http://yannvag.free.fr/PHPManual/hightlightphp.php
et copiez/collez votre code ;-) .

Commentaire de yannvag le 13/07/2006 17:33:44

À 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

Commentaire de MyXiLo le 13/07/2006 17:54:14

( 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. )

Commentaire de yannvag le 13/07/2006 18:05:25

Ah oui, t'a raison, je me suis trompé

Commentaire de garfield90 le 13/07/2006 18:35: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

Commentaire de garfield90 le 13/07/2006 18:36:55

Oula, on part quelque temps avant de poster et voila que mon texte devient de la redite :(

Commentaire de MyXiLo le 13/07/2006 20:07:04

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";
}

Commentaire de MyXiLo le 13/07/2006 20:08:21

(Plutot ceci en verite:
function file_type($file)
{
$file=basename($file);
return (strpos($file, '.') && $file!='') ? strtolower((array_pop(explode('.',$file))) : 'NULL';
}
Excusez moi)

Commentaire de coucou747 le 13/07/2006 20:12:43

return "NULL"

ouah... tu cartonnes...

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

comme 0, "", false et NULL...

Commentaire de guill76 le 13/07/2006 20:17:12

en 1 ligne :
return ( strpos($file,'.')!==false)? strtolower(array_pop(explode('.',$file))):null ;

Commentaire de guill76 le 13/07/2006 20:18:44

ah excuses moi myXylo j'avais pas vu ton post.

Commentaire de guill76 le 13/07/2006 20:24:43

Par contre, si on met une seule ligne c'est moins beau niveau coloration syntaxique :-).

Commentaire de coucou747 le 14/07/2006 01:47:48

entre nous, là, il renvoi l'extension et non le type...

Commentaire de kankrelune le 14/07/2006 03:01:49

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°

Commentaire de malalam le 14/07/2006 11:24:15 administrateur CS

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.

Commentaire de malalam le 14/07/2006 11:25:27 administrateur CS

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.

Commentaire de kankrelune le 14/07/2006 15:24:29

"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°

Commentaire de jeca le 14/07/2006 15:36:43

Et ça, ce n'est pas suffisant ?

$element = pathinfo($fichier);
echo $element['extension'];

Commentaire de kankrelune le 14/07/2006 15:45:35

Merde je connaissais pas celle là... comme quoi on en apprend tous les jours sur php... .. . ;o)

@ tchaOo°

Commentaire de guill76 le 14/07/2006 16:21:26

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

Commentaire de guill76 le 14/07/2006 16:25:12

oh j'avais pas vu strpos au lieu de strrpos ,  désolé!

Commentaire de yannvag le 14/07/2006 17:53:37

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
<input type="file" accept="image/gif" />

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.

Commentaire de Evangun le 14/07/2006 20:53:37

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.

Commentaire de coucou747 le 14/07/2006 21:38:53

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...

Commentaire de coucou747 le 14/07/2006 21:40:42

#  * 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é...

Commentaire de guill76 le 15/07/2006 11:00:04

Pour conclure sur cette source, je mettrais cette annotation:

    echo substr((file_type(''),0,3));

Commentaire de coucou747 le 15/07/2006 11:50:50

?? une extention ne fait pas forcément trois caractères...

un .gz par exemples, un .data, un .tar.gz... un .php3 un .html

Commentaire de malalam le 15/07/2006 12:08:32 administrateur CS

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).

Commentaire de guill76 le 16/07/2006 01:19:39

c'est pas grave coucou, je crois tu m'as pas suivi là dessus.

Commentaire de guill76 le 17/07/2006 00:00:15

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);  

Commentaire de webdeb le 28/09/2007 11:20:40

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.

++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

comment insérer une pièce jointe dans l'envoi d'un mail ? [ par arnold002 ] Bonjour &#224; tous,J'utilise un formulaire sur ma page form.php. Les donn&#233;es sont transmises &#224; ma 2&#232;me page mail.php, qui contient le Header Content type [ par xactise ] Bonjours je voudrai savoir si toute les extension de fichier on un content-type ? parce que j'aimerai proposer en upload sur mon site des fichier a l' pb avec le type mime [ par kyript ] Bonjour à tousj'ai un formulaire qui permet d'envoyer un fichier mp3je verifie son type mime afin de ne pas avvoir de pb " if($_FILES['data_extr']['ty Probleme type MIME [ par Cisaks ] Bonjour,Je ne comprend pas car lors de l'envoi d'un email j'attache un fichier qui à été prealablement uploader sur mon serveur. Après l'envoi j'ai af Piece jointe dans mailer [ par morgan_18 ] Salut j'ai creer un mailler avec une piece jointe j'ai donc un formulaire avec diverse information nom, prenom, .... et une piece jointe...J'ai un sou Type mime d'un fichier [ par mmaximum ] Salut à tous,J'aimerai savoir comment on fait pour trouver le type mime d'un fichier en php.Y a-t-il une fonction pour?? si oui laquelle.J'aimerai un Problème d'upload d'image [ par akiedispowa ] J'ai testé un script d'upload d'image que j'ai trouvé sur le web, mais je vais cracker ... J'ai deux images .jpg, l'une peut s'uploader et l'autre imp Trouver le type d'un fichier [ par zonebleue ] Bonjour,comment faire pour trouver le type d'un fichier ?merci d'avance ! bouton qui fait 2 actions [ par vinz78 ] Salut alors voici mon code &lt;?php// Constantesdefine('TARGET', 'E://wamp/www/Projet/Projet2/');     // Repertoire cibledefine('MAX_SIZE', 512000);   affichage d'un message non desire [ par guisx00 ] Bonjour, Je suis entrain de me remettre dans le php et je n'arrive plus à faire fonctionne correctement mon code J'avais cree avec des bout de code


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales