wgenial / php-mimetyper
PHP MIME 类型与扩展映射库:与 Symfony 兼容,由 jshttp/mime-db 提供支持
Requires
This package is auto-updated.
Last update: 2024-09-25 05:48:29 UTC
README
PHP MIME 类型与扩展映射库:使用 jshttp/mime-db 构建。
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 类型映射,并构建一个全面且简单的接口。
此包深受 dflydev/dflydev-apache-mime-types 和 adrienrn/php-mimetyper 的工作启发,并扩展了它们。
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
与 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 类型。
出于安全原因,在检测文件的 MIME 类型时,请勿信任浏览器,例如 $_FILES['your_file']['type']
。
为了安全地检测文件的 MIME 类型,. Symfony 通过其 MimeTypeGuesser 实现的 finfo 提供了很好的示例。
它们最终都会检查文件,使用 finfo 并依赖于魔法数据库文件。PHP 将根据您的环境使用其自己的魔法数据库或系统魔法数据库。
其他 PHP MIME 类型库
-
dflydev/dflydev-apache-mime-types
使用 Apache 的
mime.types
文件,提供全面的 API。如前所述,php-mimetyper 受此启发,通过使用外部映射和更广泛的接口扩展了它。 -
Symfony 提供了一个友好的接口来猜测 MIME 类型和解析扩展名,但它仅使用基于 Apache 注册表的本地映射,请参见上文以将其与该包关联。
-
媒体处理和 MIME 类型及扩展名猜测的库。使用 FreeDesktop magic.db 文件进行后者。
-
用于处理 MIME 类型的 Hoa 包。使用 Apache 的
mime.types
文件(本地回退)并依赖于静态方法。 -
使用 Apache 的
mime.types
文件和 finfo,要求 PHP >=5.4。 -
检测文件的 MIME 类型:内部使用 finfo_file、mime_content_type 或 file 命令来猜测 MIME 类型。