11
votes

Est-il possible d'obtenir une extension de fichier sans le savoir?

J'ai un fichier appelé 94BF663A100E848FB59920209F8CDC2B5.WMV. Je sais pathinfo ne me donnera pas l'extension si je viens d'utiliser le nom 94bf663a100e848fb599209af8CDC2B5. Je crois que glob est uniquement destiné à vérifier si un fichier existe. Il est donc possible d'obtenir une extension de fichier simplement connaître le nom du fichier (94BF663A100E84FB599209AF8CDC2B5)?


2 commentaires

hahahaha c'est bien. Je ne peux pas croire que vous ayez pu quitter cette référence si rapide.


Veuillez noter que toutes les extensions font partie du nom du fichier: Vous pouvez avoir des fichiers nommés foo , foo.bar , foo.bar.tar , foo.bar.tar.gz , foo.bar.tar.gz.sig , et ils se réfèrent tous à différents fichiers. (Ignorant temporairement les fichiers multiples liés.) Si vous ne connaissez aucune extension, vous n'avez pas réellement avoir le nom de fichier. Cette distinction est importante, car c'est pourquoi Les réponses de Michael et de Switz (maintenant supprimées) ne fonctionnent pas pour vous.


4 Réponses :


1
votes

Le Finfo_file () Code> fonction Va inspecter la signature d'octets d'un fichier pour renvoyer son mimeType. De là, vous pouvez généralement déduire la bonne extension de fichier.

// Adapted from the PHP docs
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
echo finfo_file($finfo, $filename);
finfo_close($finfo);


9 commentaires

Cela suppose que l'extension correspond au type MIME. Et échoue à des variantes telles que .jpeg vs .jpg . Cela nécessite également un type de table de recherche avec des extensions de fichier.


FileInfo ne fonctionne pas sans l'extension. Je viens de le tester. $ FileName = / File1 / File2 / 94BF663A100E848FB599209F8CDC2B5


FileInfo fonctionne, peu importe quelle extension a un fichier ou même si le fichier n'a aucune extension. C'est en fait le moyen préféré de trouver / valider le type d'un fichier. Bien que je ne sache pas pourquoi vous essayez d'obtenir l'extension, si c'est pour la validation, tout ce qui n'utilise pas des heuristiques pour valider le type ouvrira un trou de sécurité au système.


Ce n'est pas pour la validation. J'utilise FileInfo pour la validation et je suis tout à fait d'accord avec vous. Je n'ai pas la possibilité d'utiliser $ _files ['FileData'] ['Nom'] à brancher. Le fichier est juste assis dans un dossier.


Ok :) Je voulais juste contribuer ces cents pour m'assurer.


Peut-être une différence sur les fenêtres? Sur Linux FINFO_FILE () ne se soucie pas si une extension est présente.


Michael I Obtenir que le fichier n'existe pas si je branche pas $ FileName = / File1 / File2 / 94BF663A100E848FB599209AF8CDC2B5 et je suis sur une machine Linux. Faites-vous quelque chose de différent?


@Scarface Avez-vous cité votre nom de fichier? Je ne fais rien de différent.


J'ai entré exactement comme ce $ nom = "/ File1 / File2 / 94BF663A100E848FB599209F8CDC2B5"; $ finfo = finfo_open (fichierInfo_mime_type); // Retour MIME TYPE ALA MIMETYPETE Extension ECHO FINFO_FILE ($ FINFO, NOMD); Finfo_Close ($ finfo); la même extension fonctionne avec GLOB



14
votes

Comme exemple sur le page manuelle PHP Glob suggère, glob fait pas Vérifiez simplement si le fichier existe, il renvoie chaque fichier correspondant à l'expression.

Voici une modification de l'exemple sur Cette page pour vos besoins: xxx

Ceci suppose qu'il y en a un ( et un seul fichier avec ce nom (avec toute extension ), mais vous devriez être capable de le modifier si le fichier peut n'existerait pas, ou il peut y avoir plusieurs fichiers avec le même nom et différentes extensions. .


1 commentaires

Ça marche rocker. Juste ce que je cherchais à peu près. Chaque nom de fichier est unique, donc je pense que GLOB serait suffisant.



0
votes

Les premiers caractères du fichier (binaire) vous donneront généralement une indication de ce type de fichier.

Essayez-le en ouvrant des fichiers binaires (rar, zip, mp3, etc.) dans le bloc-notes.


1 commentaires

Ouais mais j'essaie d'obtenir l'extension de PHP de manière efficace.



0
votes

Essayez FileType () ou MIME_Content_Type () Fonction dans PHP ... Passez le chemin de fichier et renvoie le type de fichier.


0 commentaires