softcreatr / php-mime-detector
Mime 检测解码器
4.0.0
2024-09-01 17:19 UTC
Requires
- php: >=8.1.0
Requires (Dev)
- phpunit/phpunit: >=10.0
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.7
README
检测(二进制)文件的真实类型并不困难。检查文件的扩展名并不可靠,可能会导致严重的安全问题。
此包通过逐字节读取文件(最多4096字节)并检查魔术数字来帮助您确定文件的正确类型。
然而,此包不能替代任何安全软件。它仅仅旨在产生比简单扩展名检查更少的误报。
支持的文件类型列表可以在此Wiki页面上找到。
为什么需要一个独立的类?
您可能想知道我们为什么不仅仅依赖于像Fileinfo这样的扩展。以下是一些背景信息
我们为开源PHP框架开发扩展和应用,为大众创建网络软件。我们的许多客户和免费产品的用户在共享托管上没有任何安装或管理PHP扩展的能力。因此,我们的目标是开发依赖性最小化的解决方案,同时提供尽可能多的功能。
在开发允许人们将HEIF/HEIC文件转换为更“标准化”的格式(使用我们自己的外部API)的解决方案时,我们遇到了检测这些文件的问题,因为这种格式大多数网络服务器都不太认识。由于检查文件扩展名并不可靠,我们需要找到一个适用于大多数客户的可重用解决方案。这导致了基于魔术数字检查的Mime检测器的创建。
要求
- PHP 8.1或更高版本
- Composer
安装
在您项目的根目录中使用Composer安装此包
composer require softcreatr/php-mime-detector
用法
以下是一个示例,说明如何使用此包轻松确定给定文件的MIME类型和相应的文件扩展名
<?php use SoftCreatR\MimeDetector\MimeDetector; use SoftCreatR\MimeDetector\MimeDetectorException; require 'vendor/autoload.php'; try { // Create an instance of MimeDetector with the file path $mimeDetector = new MimeDetector('foo.bar'); // Get the MIME type and file extension $fileData = [ 'mime_type' => $mimeDetector->getMimeType(), 'file_extension' => $mimeDetector->getFileExtension(), 'file_hash' => $mimeDetector->getFileHash(), ]; // Print the result echo '<pre>' . print_r($fileData, true) . '</pre>'; } catch (MimeDetectorException $e) { die('An error occurred while trying to load the given file: ' . $e->getMessage()); }
测试
本项目使用PHPUnit进行测试。要运行测试,请使用以下命令
composer test
要运行完整的测试套件,您可以使用提供的测试文件集。这些文件不包括在Composer包或Git仓库中,因此您必须克隆此仓库并初始化其子模块
git clone https://github.com/SoftCreatR/php-mime-detector
cd php-mime-detector
git submodule update --init --recursive
之后,使用composer install
安装必要的依赖项,然后按照上述方法运行PHPUnit。
待办事项
- 尽可能减少方法大小。
- 添加一个接受MIME类型并返回相应文件扩展名的方法。
- 添加一个接受文件扩展名并返回相应MIME类型列表的方法。
- 添加一个返回所有可检测MIME类型及其对应文件扩展名的列表的方法。
贡献
请参阅CONTRIBUTING以获取详细信息。
在添加新的检测时,请至少提供一个示例文件以确保检测按预期工作。
许可证
自由软件,太棒了!