J'ai un fichier appelé 94BF663A100E848FB59920209F8CDC2B5.WMV. Je sais pathinfo code> ne me donnera pas l'extension si je viens d'utiliser le nom 94bf663a100e848fb599209af8CDC2B5. Je crois que
glob code> 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)? P>
4 Réponses :
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);
Cela suppose que l'extension correspond au type MIME. Et échoue à des variantes telles que .jpeg code> vs
.jpg code>. 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 () CODE> 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); code> la même extension fonctionne avec GLOB
Comme exemple sur le page manuelle PHP Glob suggère, Voici une modification de l'exemple sur Cette page pour vos besoins: p> Ceci suppose qu'il y en a un ( et un seul fichier avec ce nom (avec toute extension em>), 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. . p> p> glob code> fait pas strud> Vérifiez simplement si le fichier existe, il renvoie chaque fichier correspondant à l'expression.
Ça marche rocker. Juste ce que je cherchais à peu près. Chaque nom de fichier est unique, donc je pense que GLOB serait suffisant.
Les premiers caractères du fichier (binaire) vous donneront généralement une indication de ce type de fichier. P>
Essayez-le en ouvrant des fichiers binaires (rar, zip, mp3, etc.) dans le bloc-notes. P>
Ouais mais j'essaie d'obtenir l'extension de PHP de manière efficace.
Essayez FileType () CODE> ou
MIME_Content_Type () Code> Fonction dans PHP ...
Passez le chemin de fichier et renvoie le type de fichier. P>
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 code>,
foo.bar code>,
foo.bar.tar code>,
foo.bar.tar.gz code>,
foo.bar.tar.gz.sig code>, 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 i> 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.