Während der Entwicklung müssen wir häufig den MIME -Typ der Datei erhalten, insbesondere wenn Dateien -Uploads, Downloads oder Dateiüberprüfung behandelt werden. PHP liefert zwei häufig verwendete Funktionen, um MIME -Typen zu erhalten, nämlich mime_content_type () und finfo_file () (normalerweise von FinFO -Klassen verwendet). Obwohl der Zweck dieser beiden Funktionen der gleiche ist, wird Finfo bei vielen Entwicklern eher in der tatsächlichen Verwendung empfohlen. Als nächstes werden wir diese beiden ausführlich vergleichen und analysieren, warum Finfo mehr respektiert ist.
mime_content_type () ist eine frühere Funktion in PHP, um einen MIME -Typ zu erhalten. Es erraten den MIME -Typ nach der Erweiterung der Datei oder beurteilt den MIME -Typ aus den Header -Informationen (Magic Bytes).
<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>
Während diese Funktion bei der Arbeit mit Dateien sehr einfach zu verwenden ist, hat sie einige potenzielle Probleme, insbesondere bei einigen Kantenfällen:
Veraltete Implementierung : MIME_CONTENT_TYPE () ist in einigen Fällen nicht immer korrekt. Die Implementierung kann vom Datei -Repository im System abhängen, wodurch seine Erkennungsfunktionen wahrscheinlich von System- und PHP -Versionen variieren.
Es werden nur übliche MIME -Typen unterstützt : MIME_CONTENT_TYPE () werden möglicherweise nicht korrekt für einige ungewöhnliche Dateitypen oder neuere Dateien erkannt.
Nicht flexibel genug : Diese Funktion unterstützt keine flexible Mime -Typ -Überprüfung und -verlängerung.
finfo_file () ist eine Funktion, die von der FinFO -Erweiterung von PHP bereitgestellt wird, um den MIME -Typ einer Datei zurückzugeben. Im Gegensatz zu MIME_CONTENT_TYPE () verwendet Finfo die libmagische Bibliothek, die MIME -Typen identifizieren kann, indem der tatsächliche Inhalt einer Datei gelesen wird, anstatt sich auf Dateierweiterungen oder begrenzte magische Bytes zu verlassen.
<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">// Offen MIME Art der Abfrage</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 () bietet leistungsstärkere Funktionen, hauptsächlich einschließlich:
Höhere Genauigkeit : Finfo verwendet die Bibliothek Libmagic , die den MIME -Typ durch Überprüfung des Dateiinhalts beurteilt und eine höhere Erkennungsgenauigkeit aufweist.
Unterstützt mehr Typen : Es ist in der Lage, verschiedene Dateitypen zu identifizieren, einschließlich einiger ungewöhnlicher Dateiformate.
Flexibilität : Finfo unterstützt mehr Optionen, und Entwickler können verschiedene Dateiinformationstypen (z. B. MIME -Typen, Dateicodierung usw.) entsprechend ihren Anforderungen festlegen.
PLATFORM : Finfos libmagic ist plattformübergreifend und kann die Konsistenz über verschiedene Betriebssysteme hinweg aufrechterhalten.
Hier ist ein Vergleich von mime_content_type () und finfo_file () in einigen wichtigen Aspekten:
Merkmal | mime_content_type ()) | Finfo_file () |
---|---|---|
Implementierungsmethode | Magische Bytes basierend auf Dateierweiterungen oder Dateien | Verwenden Sie die Bibliothek Libmagic , um MIME -Typen basierend auf Dateiinhalten zu identifizieren |
Genauigkeit | Relativ niedrig, leicht nach Erweiterung beeinflusst | Hoch, in der Lage, mehrere Dateiformate genau zu identifizieren |
Flexibilität | Es werden keine Anpassungsoptionen mehr unterstützt | Unterstützt mehrere Optionen wie MIME -Typ, Codierung usw. |
Plattformkompatibilität | Systemabhängige MIME-MIME-Datenbank | Plattformübergreifend unter Verwendung einer einheitlichen Bibliothek |
Veraltete Probleme | Ja, es wurde als veraltet gekennzeichnet | Kein Problem, es ist eine empfohlene Lösung für die moderne PHP -Entwicklung |
Für die meisten Szenarien, in denen der MIME -Typ genau erhalten wird, sollten Entwickler die Verwendung von Finfo_file () Priorität geben. Insbesondere in den folgenden Situationen ist Finfo_file () besonders wichtig:
Hoch genaues Dateitypurteil : Wenn Sie beispielsweise Bilder, Videos, Audio- und andere Dateien hochladen, kann die Verwendung von FinFO sicherstellen, dass das Dateitypurteil genauer ist.
Behandeln Sie ungewöhnliche Dateiformate : Wenn Sie sich mit einigen unpopulären Dateitypen befassen müssen, kann Finfo eine bessere Unterstützung bieten.
Plattformübergreifende Anwendung : Wenn die von Ihnen entwickelte Anwendung in verschiedenen Betriebssystemen ausgeführt wird, kann Finfo auf allen Plattformen eine Konsistenz sicherstellen.
Obwohl mime_content_type () eine relativ einfache Funktion in PHP ist, da sie veraltet ist und in einigen Fällen möglicherweise nicht genau ist, empfehlen Entwickler die Verwendung von FinFO_File () , um MIME -Typen zu erhalten. finfo_file () bietet eine höhere Genauigkeit, größere Flexibilität und unterstützt mehr Dateiformate, sodass sie für die moderne Entwicklung besser geeignet sind.
In der tatsächlichen Entwicklung kann die Auswahl eines leistungsstärkeren Finfo_File () potenzielle Probleme, die durch MIME -Beurteilungsfehler verursacht werden, effektiv vermeiden, insbesondere wenn Sie sich mit Datei -Uploads und Dateiüberprüfung befassen.