belca/finfo

用于 Dios CMS 的 Fileinfo

v1.1.3 2019-04-30 14:28 UTC

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许可证分发。