petrknap/php-filestorage

此包已被废弃且不再维护。作者建议使用 petrknap/php-splitfilesystem 包。

PHP 文件存储

v1.1.2 2016-06-27 14:53 UTC

README

关于已解决的问题

我需要使用一个可以存储大约60,000个文件,平均大小为30kb的单个目录中的解决方案(这是一个要求,所以不能简单地将它们拆分成包含较少文件数量的子目录)。

文件将被随机访问,但一旦创建,将不会有对同一文件系统的写入操作。我目前正在使用Ext3,但发现它非常慢。有什么建议吗?

-- Filesystem large number of files in a single directory - bugmenot77, voretaq7

这个文件存储简单解决了这个问题 - 它 在文件系统和应用程序之间创建了一个虚拟层。每个路径都被转换为由许多只包含少量子目录的目录组成的路径。

如果您希望在一个目录中存储1,000,000个文件,这个文件存储将转换路径并将它们存储在巨大的树结构中。每个目录(不包括叶子)最多包含256个子目录。叶子目录只包含文件。

优点

  • 可以在单个目录中存储大量文件
  • 可以使用完全本地化的文件路径(例如:/シックス.log
  • 自然保护存储之外的文件
  • 每个用户都可以有独立和隔离的文件存储
  • 完全兼容,基于 League\Flysystem

缺点

  • 实际的文件结构不直观
  • 不能有效地按任何键对文件进行排序(没有DBMS)

php-filestorage 使用方法

标准使用

<?php

use League\Flysystem\Adapter\Local as LocalAdapter;
use PetrKnap\Php\FileStorage\FileSystem;
use PetrKnap\Php\FileStorage\Plugin\SQLiteIndexPlugin;

$fileSystem = new FileSystem(new LocalAdapter(__DIR__ . "/temp"));
SQLiteIndexPlugin::register($fileSystem, __DIR__ . "/temp/index.sqlite"); // optional

$fileSystem->write("/file.txt", null);
$fileSystem->update("/file.txt", "Hello World!");

printf("%s", $fileSystem->read("/file.txt"));

foreach ($fileSystem->listContents() as $metadata) {
    $fileSystem->delete($metadata["path"]);
}

如何安装

运行 composer require petrknap/php-filestorage 或手动将此JSON代码合并到您的项目 composer.json 文件中,然后运行 composer install。您可以使用 已发布的版本之一 而不是 dev-master

{
    "require": {
        "petrknap/php-filestorage": "dev-master"
    }
}

或者通过 git clone https://github.com/petrknap/php-filestorage.git 手动克隆此存储库,或者下载 此存储库作为ZIP文件,并将文件提取到您的项目中。