Pendant le développement, nous devons souvent obtenir le type MIME du fichier, en particulier lors de la gestion des téléchargements de fichiers, des téléchargements ou de la vérification du fichier. PHP fournit deux fonctions couramment utilisées pour obtenir des types MIME, à savoir mime_content_type () et finfo_file () (généralement utilisé par les classes FINFO ). Bien que le but de ces deux fonctions soit le même, FINFO est plus recommandé dans une utilisation réelle par de nombreux développeurs. Ensuite, nous comparerons les deux en détail et analyserons pourquoi FINFO est plus respecté.
MIME_CONTENT_TYPE () est une fonction antérieure en PHP pour obtenir le type MIME. Il devine le type MIME par l'extension du fichier, ou juge le type MIME à partir des informations d'en-tête (octets magiques).
<span><span><span class="hljs-variable">$mime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mime_content_type</span></span><span>(</span><span><span class="hljs-string">'example.jpg'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$mime</span></span><span>;
</span></span>
Bien que cette fonction soit très simple à utiliser lorsque vous travaillez avec des fichiers, il a des problèmes potentiels, en particulier lorsqu'il s'agit de certains cas de bord:
Implémentation obsolète : mime_content_type () n'est pas toujours exact dans certains cas. Son implémentation peut dépendre du référentiel de fichiers sur le système, ce qui fait que ses capacités de reconnaissance varient probablement selon les systèmes et les versions PHP.
Seuls les types de mime courants sont pris en charge : MIME_CONTENT_TYPE () peut ne pas être correctement reconnu pour certains types de fichiers peu communs ou des fichiers plus récents.
Pas assez flexible : cette fonction ne prend pas en charge la vérification et l'extension de type MIME flexibles.
finfo_file () est une fonction fournie par l'extension FINFO de PHP pour retourner le type de mime d'un fichier. Contrairement à MIME_CONTENT_TYPE () , FINFO utilise la bibliothèque Libmagic , qui peut identifier les types MIME en lisant le contenu réel d'un fichier au lieu de s'appuyer sur des extensions de fichiers ou des octets magiques limités.
<span><span><span class="hljs-variable">$finfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">finfo_open</span></span><span>(FILEINFO_MIME_TYPE); </span><span><span class="hljs-comment">// Ouvrir MIME Type de requête</span></span><span>
</span><span><span class="hljs-variable">$mime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">finfo_file</span></span><span>(</span><span><span class="hljs-variable">$finfo</span></span><span>, </span><span><span class="hljs-string">'example.jpg'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$mime</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">finfo_close</span></span><span>(</span><span><span class="hljs-variable">$finfo</span></span><span>);
</span></span>
Finfo_file () fournit des fonctions plus puissantes, y compris principalement:
Précision plus élevée : FINFO utilise la bibliothèque Libmagic , qui juge le type MIME en vérifiant le contenu du fichier et a une précision de reconnaissance plus élevée.
Prend en charge plus de types : il est en mesure d'identifier divers types de fichiers, y compris certains formats de fichiers rares.
Flexibilité : FINFO prend en charge plus d'options, et les développeurs peuvent définir différents types d'informations de fichier (tels que les types de mime, le codage des fichiers, etc.) en fonction de leurs besoins.
Plate-plateforme : Libmagic de Finfo est multiplateforme et peut maintenir la cohérence entre divers systèmes d'exploitation.
Voici une comparaison de mime_content_type () et finfo_file () dans certains aspects clés:
caractéristiques | mime_content_type () | finfo_file () |
---|---|---|
Méthode d'implémentation | Octets magiques basés sur des extensions de fichiers ou des fichiers | Utilisez la bibliothèque Libmagic pour identifier les types de mime en fonction du contenu de fichier |
précision | Relativement bas, facilement affecté par l'extension | High, capable d'identifier avec précision plusieurs formats de fichiers |
flexibilité | Plus d'options de personnalisation ne sont prises en charge | Prend en charge plusieurs options, telles que le type MIME, le codage, etc. |
Compatibilité de la plate-forme | Base de données de type MIME dépendant du système | Multiplateforme, en utilisant une bibliothèque libmagique unifiée |
Problèmes obsolètes | Oui, il a été marqué comme obsolète | Pas de problème, c'est une solution recommandée pour le développement de PHP moderne |
Pour la plupart des scénarios où le type MIME est obtenu avec précision, les développeurs devraient donner la priorité à l'utilisation de finfo_file () . Surtout dans les situations suivantes, Finfo_file () est particulièrement important:
Jugement de type de fichiers très précis : par exemple, lors du téléchargement des images, des vidéos, de l'audio et d'autres fichiers, l'utilisation de FINFO peut garantir que le jugement de type de fichier est plus précis.
Gérer les formats de fichiers inhabituels : si vous avez besoin de gérer certains types de fichiers impopulaires, FINFO peut fournir un meilleur support.
Application multiplateforme : Si l'application que vous développez doit s'exécuter dans différents systèmes d'exploitation, FINFO peut garantir la cohérence sur toutes les plateformes.
Bien que MIME_CONTENT_TYPE () soit une fonction relativement simple dans PHP, car elle est obsolète et peut ne pas être précise dans certains cas, les développeurs recommandent d'utiliser FinFo_File () pour obtenir des types MIME. FINFO_FILE () offre une précision plus élevée, une plus grande flexibilité et prend en charge plus de formats de fichiers, il convient donc plus aux besoins dans le développement moderne.
Dans le développement réel, le choix d'un FINFO_FILE () plus puissant peut éviter efficacement les problèmes potentiels causés par les erreurs de jugement de type MIME, en particulier lorsqu'ils traitent des téléchargements de fichiers et de la vérification des fichiers.