adrienrn / php-mimetyper
PHP MIME类型和扩展映射库:兼容Symfony,由jshttp/mime-db提供支持
Requires
This package is not auto-updated.
Last update: 2024-09-09 13:53:27 UTC
README
PHP MIME类型和扩展映射库:使用 jshttp/mime-db 构建,兼容Symfony和Laravel。
use MimeTyper\Repository\MimeDbRepository; $mimeRepository = new MimeDbRepository(); $mimeRepository->findExtensions("image/jpeg"); // ["jpeg","jpg","jpe"] $mimeRepository->findExtension("image/jpeg"); // "jpeg" $mimeRepository->findType("html"); // "html" $mimeRepository->findType("js"); // 'application/javascript'
最完整、最新的PHP MIME类型映射!
目标是提供完整、最新的PHP MIME类型映射,并为PHP构建一个全面且简单的接口。本包深受 dflydev 工作的影响,并对其进行了扩展。
MIME类型映射,正确的方式。
此库使用 jshttp/mime-db 作为默认映射,它聚合了多个来源的数据,并创建了一个单独的 db.json
文件,使其成为最完整的双向映射,从MIME到扩展名以及从扩展名到MIME类型。
自定义MIME类型和自定义存储库
一些自定义类型(别名)也以相同的JSON格式本地维护,与jshttp/mime-db相同。
use MimeTyper\Repository\ExtendedRepository; $mimeRepostory = new ExtendedRepository(); $mimeRepository->findExtensions("text/x-php"); // ["php", "php2", "php3", "php4", "php5"] $mimeRepository->findTypes("php"); // ["text/x-php", "application/x-php", "text/php", "application/php", "application/x-httpd-php"] $mimeRepository->findType("php"); // "text/x-php"
本地维护别名的目的是帮助MIME类型猜测方法的整体兼容性。检测MIME类型的工具并不总是返回标准MIME类型,或者标准MIME类型不存在。所有这些自定义MIME类型最终可能会被 添加到 jshttp/mime-db 的自定义类型中。
示例: Debian会将PHP文件检测为 text/x-php
,而浏览器会发送 application/x-httpd-php
。JavaScript(application/javascript
vs text/javascript
)或Microsoft Office / Libre Office文件也是如此。
不要犹豫,提出一个pull request来讨论这个问题。
Symfony和Laravel的MIME类型
此库与您的Symfony或Laravel应用兼容,以便享受映射的完整性。
使用 ExtraMimeTypeExtensionGuesser
作为Symfony ExtensionGuesser
和此包 RepositoryInterface
之间的桥梁类。
use Symfony\Component\HttpFoundation\File\MimeType\ExtensionGuesser; use MimeTyper\Repository\ExtendedRepository; use MimeTyper\Symfony\ExtraMimeTypeExtensionGuesser; $symfonyGuesser = ExtensionGuesser::getInstance(); $extraGuesser = new ExtraMimeTypeExtensionGuesser( new ExtendedRepository() ); $symfonyGuesser->register($extraGuesser);
此示例使用 ExtendedRepository
(mime-db和本地自定义MIME类型),您可以使用默认的 MimeDbRepository
,实现自己的或使用 CompositeRepository
来聚合多个存储库。
在PHP中安全地检测MIME类型
在映射类型到扩展名或扩展名到类型之前,您需要能够正确地检测文件的MIME类型。
出于安全原因,不要信任浏览器,例如 $_FILES['your_file']['type']
,当涉及到检测文件的MIME类型时。
要安全地检测文件的MIME类型,. Symfony 以他们的 MimeTypeGuesser 实现为示例
所有这些最终都会检查文件,使用 finfo 和依赖魔法数据库文件。PHP将根据您的环境使用自己的魔法数据库或系统魔法数据库。
其他PHP库用于MIME类型
-
dflydev/dflydev-apache-mime-types
使用Apache的
mime.types
文件,提供全面的API。如前所述,php-mimetyper深受其启发,并通过使用外部映射和更广泛的接口进行了扩展,使其更加完整。 -
Symfony提供了一种猜测MIME类型和扩展名的良好接口,但仅使用基于Apache注册表的本地映射,请参见上方以将其与此包连接。
-
媒体处理库,用于猜测MIME类型和扩展名。使用FreeDesktop的magic.db文件进行后者。
-
处理MIME类型的Hoa包。使用
mime.types
Apache文件(本地后备)并依赖于静态方法。 -
使用
mime.types
Apache文件和finfo,需要PHP >=5.4。 -
检测文件的MIME类型:内部使用finfo_file、mime_content_type或file命令来猜测MIME类型。