phuxtil/splfileinfo

SplFileInfo compatible implementation that allows to work with virtual (non existing) files

3.0.0 2021-05-18 16:17 UTC

This package is auto-updated.

Last update: 2024-12-19 00:07:43 UTC


README

VirtualSplFileInfo allows to use non existing (virtual) paths and still be able to perform all file operations like getSize(), isFile(), getOnwer(), etc, and get predefined results.

It has setters support, and helper methods like isVirtual(), toArray(), fromArray(), fromSplFileInfo().

Installation

composer require phuxtil/splfileinfo 

Note: Use v1.x for compatibility with PHP v7.0.x. Note: Use v2.x for compatibility with PHP v7.2+

Usage

Create virtual file info.

$path = '/tmp/not-yet/existing-path';
$virtualInfo = new VirtualSplFileInfo($path);

Only PathInfo data is set at this point.

$virtualInfo->getPathname();  # /tmp/not-yet/existing-path
$virtualInfo->getPath();      # /tmp/not-yet
...

The rest of the data can be updated with setters.

$virtualInfo->setSize(120);
$virtualInfo->setATime(time());
$virtualInfo->setPerms(0775);
...

Note: All properties besides PathInfo are set to -1 by default.

Check if resource is virtual.

$virtualInfo->getType();      # virtual
$virtualInfo->isVirtual();    # true

Update virtual file info with real resource data

@mkdir($path);

$virtualInfo->fromSplFileInfo(new SplFileInfo($path));

$virtualInfo->isVirtual(); # false

VirtualFileInfo vs \SplFileInfo.

$splInfo = SplFileInfo {
  path: "/tmp/not-yet"
  filename: "existing-path"
  basename: "existing-path"
  pathname: "/tmp/not-yet/existing-path"
  extension: ""
  realPath: "/tmp/not-yet/existing-path"
  aTime: 2019-06-15 22:07:47
  mTime: 2019-06-15 22:07:47
  cTime: 2019-06-15 22:07:47
  inode: 10248205
  size: 64
  perms: 040755
  owner: 0
  group: 0
  type: "dir"
  writable: true
  readable: true
  executable: true
  file: false
  dir: true
  link: false
}

$virtualInfo = Phuxtil\SplFileInfo\VirtualSplFileInfo {
  path: "/tmp/not-yet"
  filename: "existing-path"
  basename: "existing-path"
  pathname: "/tmp/not-yet/existing-path"
  extension: ""
  realPath: "/tmp/not-yet/existing-path"
  aTime: 2019-06-15 22:07:47
  mTime: 2019-06-15 22:07:47
  cTime: 2019-06-15 22:07:47
  inode: 10248205
  size: 64
  perms: 040755
  owner: 0
  group: 0
  type: "dir"
  writable: true
  readable: true
  executable: true
  file: false
  dir: true
  link: false
}

Extra methods

isVirtual(): bool

Returns true if the and does not really exist.

Note: isReadable(), isFile(),... etc, can return true, even if the resource does not exist.

fromSplFileInfo(\SplFileInfo $info)

$path = '/tmp/not-yet/existing-file.txt';
$virtualInfo = new VirtualSplFileInfo($path);
// ... do stuff

// create resource later
file_put_contents($path, 'Lorem Ipsum');

// update virtual file info 
$virtualInfo->fromSplFileInfo(new SplFileInfo($path));

toArray(): array

$info = new VirtualSplFileInfo('/tmp/not-yet/existing-path');
$data = $info->toArray();

fromArray(array $data)

$info = new VirtualSplFileInfo('/tmp/not-yet/existing-path');
$info->fromArray(
    [
        'aTime' => 123,
        'mTime' => 456,
        'cTime' => 789,
        'inode' => 222,
        'size' => 333,
        'perms' => 0755,
        'owner' => 1,
        'group' => 2,
        'type' => 'dir',
        'writable' => true,
        'readable' => true,
        'executable' => true,
        'file' => false,
        'dir' => true,
        'link' => false,
    ]
);

Setter support

You can use setters for all properties besides PathInfo, which is resolved by default in \SplFileInfo. The resource does not have to yet exist for those methods to work.

Properties with setters:

realPath
aTime
mTime
cTime
inode
size 
perms
owner
group
type 
writable
readable
executable
file
dir 
link
linkTarget

Default values

All values besides PathInfo are set to -1 by default.

TDD

See tests for more examples.