虚拟文件系统

0.12.1 2016-02-20 12:46 UTC

This package is not auto-updated.

Last update: 2024-09-11 12:30:58 UTC


README

Virtual File System

Master branch build status Published version PHP ~5.4 MIT Licensed

VFS 是一个使用流包装器 API 构建的 PHP 虚拟文件系统。流暴露得就像典型的 file://http:// 流一样,对 PHP 内置函数和关键字(如 fopenrequire)同样有效。此实现试图忠实地遵循典型流,包括触发警告并适当地处理边缘情况。

您可以选择您喜欢的任何方式安装,但我推荐使用 Composer

{
    "require": {
        "adlawson/vfs": "*"
    }
}

文档

在创建和挂载文件系统后,您可以通过 PHP 内置函数、VFS 接口或另一个文件系统库提供的接口来操作虚拟文件系统。

<?php
use Vfs\FileSystem;
use Vfs\Node\Directory;
use Vfs\Node\File;

// Create and mount the file system
$fs = FileSystem::factory('vfs://');
$fs->mount();

// Add `/foo` and `/foo/bar.txt`
$foo = new Directory(['bar.txt' => new File('Hello, World!')]);
$fs->get('/')->add('foo', $foo);

// Get contents of `/foo/bar.txt`
$fs->get('/foo/bar.txt')->getContent(); // Hello, World!
file_get_contents('vfs://foo/bar.txt'); // Hello, World!

// Add `/foo/bar` and `/foo/bar/baz.php`
mkdir('vfs://foo/bar');
file_put_contents('vfs://foo/bar.php', '<?php echo "Hello, World!";');

// Require `/foo/bar.php`
require 'vfs://foo/baz.php';

// Works with any other file system library too
$symfony = new Symfony\Component\Filesystem\Filesystem();
$symfony->mkdir('vfs://foo/bar/baz');
$laravel = new Illuminate\Filesystem();
$laravel->isDirectory('vfs://foo/bar/baz'); //true

// Triggers PHP warnings on error just like typical streams
rename('vfs://path/to/nowhere', 'vfs://path/to/somewhere');
// PHP Warning: rename(vfs://path/to/nowhere,vfs://path/to/somewhere): No such file or directory in /srv/index.php on line 1; triggered in /srv/src/Logger/PhpErrorLogger.php on line 32

示例用途

如果您需要了解虚拟文件系统可以用于什么,那么您可能不需要它,但以防万一,我已整理了一份小清单作为示例

  • 在不写入磁盘的情况下测试文件系统库
  • eval 运行时评估(通过 writerequire
  • ...我们需要更多!

待办事项

当前任务列在 github issues 页面上,但这里列出了一些以供参考

  • 符号链接
  • 文件锁
  • 权限/ACL

贡献

通过拉取请求接受贡献,但合并之前必须包含通过单元测试。

$ curl -O https://raw.githubusercontent.com/adlawson/vagrantfiles/master/php/Vagrantfile
$ vagrant up
$ vagrant ssh
...

$ cd /srv
$ composer install
$ vendor/bin/phpunit

许可

此库的内容由 Andrew LawsonMIT 许可证 发布。
您可以在 LICENSEhttp://opensource.org/licenses/mit 中找到此许可证的副本。