wgenial/php-mimetyper

PHP MIME 类型与扩展映射库:与 Symfony 兼容,由 jshttp/mime-db 提供支持

2.0.0 2020-07-24 20:06 UTC

This package is auto-updated.

Last update: 2024-09-25 05:48:29 UTC


README

PHP MIME 类型与扩展映射库:使用 jshttp/mime-db 构建。

Packagist GitHub license

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-typesadrienrn/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/javascripttext/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/http-foundation

    Symfony 提供了一个友好的接口来猜测 MIME 类型和解析扩展名,但它仅使用基于 Apache 注册表的本地映射,请参见上文以将其与该包关联。

  • davidpersson/mm

    媒体处理和 MIME 类型及扩展名猜测的库。使用 FreeDesktop magic.db 文件进行后者。

  • Hoa/Mime

    用于处理 MIME 类型的 Hoa 包。使用 Apache 的 mime.types 文件(本地回退)并依赖于静态方法。

  • karwana/php-mime

    使用 Apache 的 mime.types 文件和 finfo,要求 PHP >=5.4。

  • PEAR/MIME_Type

    检测文件的 MIME 类型:内部使用 finfo_file、mime_content_type 或 file 命令来猜测 MIME 类型。