adrienrn/php-mimetyper

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

0.2.2 2018-09-27 09:45 UTC

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

    Symfony提供了一种猜测MIME类型和扩展名的良好接口,但仅使用基于Apache注册表的本地映射,请参见上方以将其与此包连接。

  • davidpersson/mm

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

  • Hoa/Mime

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

  • karwana/php-mime

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

  • PEAR/MIME_Type

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