belca / finfo
用于 Dios CMS 的 Fileinfo
Requires (Dev)
- phpunit/phpunit: ^6.0
This package is auto-updated.
Last update: 2024-09-23 17:37:32 UTC
README
FInfo(即文件信息)- 用于从文件元数据或文件内容中提取信息的可扩展包。
FInfo最初是为Dios CMS开发的,但也可以独立在任何PHP项目中使用。
FInfo能做什么?
默认情况下,包具有处理文件的最小功能(可以从文件中提取最少的信息)。
包用于提供统一接口以从不同MIME类型的文件中提取信息。因此,为了处理特定属性或文件类型,需要安装或开发自己的类或包,然后通过Fileinfo类的方法使用它们。
Fileinfo类
Fileinfo类提供了一组用于处理类处理程序(从文件中提取数据的类)和用于从文件中提取信息的方法。
表中列出了类的主要方法。更详细的信息可以在类本身中找到。
如何使用FInfo?
通过composer(Packagist存储库)安装FInfo或从GitHub仓库克隆。
Fileinfo使用静态方法,因此您不需要初始化类,可以在任何连接的类可用的地方添加和提取文件数据。
// Подключите основной класс Fileinfo и классы-обработчики
use Belca\FInfo\Fileinfo; // Основной
use Belca\FInfo\BasicFileinfo; // Базовый класс-обработчик
...
// Добавьте классы-обработчики в список обработчиков
Fileinfo::addClass(BasicFileinfo::class);
...
// Извлеките всю информацию о файле
Fileinfo::file($filename);
// Output:
// [
// [created] => 1531556313
// [edited] => 1531556313
// [size] => 9399
// [filesize] => 9399
// ]
// Получите информацию о конкретных виртуальных свойствах
Fileinfo::file($filename, ['created', 'size');
// Output:
// [
// [created] => 1531556313
// [size] => 9399
// ]
// Если вы укажите несуществующее виртуальное свойство, то ошибок не будет. Свойство не будет возвращено.
Fileinfo::file($filename, ['created', 'edited', 'size', 'length');
// Output:
// [
// [created] => 1531556313
// [edited] => 1531556313
// [size] => 9399
// [filesize] => 9399
// ]
// Получите информацию только об одном виртуальном свойстве
Fileinfo::getFileinfo($filename, 'size');
// Output: 9399
// Или
Fileinfo::file($filename, ['size']);
// Output:
// [
// [size] => 9399
// ]
// Или
Fileinfo::file($filename, 'size');
// [
// [size] => 9399
// ]
扩展Fileinfo和FileExplorer
正如您所猜测的,正如上面所提到的,包可以轻松扩展并补充其他虚拟属性处理程序。
您可以查看BasicFileinfo类的源代码。它相当简单,很好地展示了如何创建用于提取虚拟属性的新类处理程序。
// Используйте абстрактный класс для создания нового обработчика
use Belca\FInfo\FileExplorer;
class ImageColorFileinfo extends FileExplorer
{
// При необходимости, вы можете задать алиасы существующих виртуальных свойств или указать используемые методы извлечения виртуального свойства
protected static $aliases = [
'humanColor' => 'color',
// or
'colorForHuman' => 'getColorProperty',
];
// Если обработчик работает только с определенными типами данных, то их можно перечислить в $mimes;
protected static $mimes => ['image/png', 'image/jpeg'];
// Реализуйте метод проверки совместимости с файлом
public function checkCompatibility()
{
// Код проверяющий возможность обработки файла
// При успешной проверке верните true.
// Если обработчик работает со всеми типами файлов, то также верните true, желательно проверив существование файла в этом методе или в методе извлекающим виртуальное свойство файла
return true;
}
// Добавьте необходимые "извлекаторы" (методы извлекающие свойства файла) в класс
public function getColorProperty()
{
if ($this->checkCompatibility() {
// Код метода с возвращением полученного значения
return $color;
}
// При неудачной обработке или проверки совместимости верните false
return false;
}
如所示,实现自己的处理程序确实很简单,只需放置处理文件和提取文件属性的代码。
在添加类处理程序的位置连接要实现的类,并使用addClass方法将其添加到Fileinfo类中。
use Belca\FInfo\Fileinfo; // Основной
use Belca\FInfo\ImageColorFileinfo; // Класс извлекающий цвет из изображения
...
// Добавляем в список обработчиков файла
Fileinfo::addClass(ImageColorFileinfo::class);
FInfo定义
为了更易于使用FInfo包,引入了一些抽象概念。
虚拟属性、提取方法、别名和值
使用虚拟属性、别名和提取方法来获取文件信息(文件属性)。
虚拟属性和文件参数(它们也称为计算属性和计算值) - 包中引入的概念,用于定义获取的值和文件属性。虚拟值可以从现有文件数据(例如,文件大小、文件更改日期、文件所有者等)中获得,或基于文件内容定义。
实际上,虚拟属性是获取可测量属性值的方法的类名,这些值可以是单个值或值集(数组),而虚拟值是基于文件数据和特定方法(虚拟属性)计算或提取的值。
虚拟值的示例
虚拟属性的示例包括
- 图像的人的平均颜色;
- 图像的主要颜色;
- 文件创建者(图像、音频文件、视频文件等);
- 照片创建地点的坐标;
- 文件大小;
- 文件持续时间(音频文件、视频文件、动画等);
- 文件创建日期等。
如上所述,像文件大小、地理位置、文件创建者等这样的值可以在文件元数据或文件本身的信息中定义,而像图像的平均颜色、图像的主要颜色等这样的属性在文件中不存在,需要使用特殊的工具(库、模块、类等)处理文件来获取这些值。
许可
本包按MIT许可证分发。