Download the PHP package ricwein/filesystem without Composer
On this page you can find all versions of the php package ricwein/filesystem. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package filesystem
FileSystem
This Library provides a Filesystem abstraction layer.
Installation
Overview
Let's begin with a short overview over the supported Filesystem classes and abstractions.
All classes uses the root-namespace ricwein\FileSystem
.
Object-Types
A File is represented as a File
Object and a Directory as a Directory
Object.
Storage
Accessing the Objects (File/Directory) Content is abstracted as Storage
s. A File can be either:
- a
Disk
file/directory at your local filesystem (Storage\Disk
) - a
Memory
file, which only temporary exists in-memory (Storage\Memory
) - a
Stream
a stream which points to a file or resource (Storage\Stream
) - an abstract
Flysystem
file (Storage\Flysystem
)
All Storage-Types must extend the abstract base class Filesystem\Storage
.
WARNING: since storage-objects are mutable and php automatically handles class-objects as references when passed into a function (constructor), it's highly recommended using the
clone
keyword when storages are recycled between to FileSystem-Objects. DO NOT:DO:
Exceptions
Accessing File/Directory Attributes can result in throwing Exceptions. All Exceptions implement the Exceptions\FileSystemException
Interface.
Usage: Files
All FileSystem-base-classes must be initialized using a Storage.
Methods
method | description |
---|---|
read(?$offset, ?$length, $mode) |
read and return file-content, allows partial read with $offset and $length parameters, file is locked while reading with $mode |
stream(?$offset, ?$length, $mode) |
stream file into output-buffer, file is locked while reading with $mode |
write($content, $append, $mode) |
write $content to file, creates new file if it doesn't already exists, allows appended writing if $append isset, locks file with $mode |
copyTo($destination [,Constraint $constraints]) |
copy file to new $destination Storage-adapter |
moveTo($destination [,Constraint $constraints]) |
like copyTo() , but moves files instead |
touch([bool $ifNewOnly]) |
create file if it doesn't exists, updates last-modified timestamp |
remove() |
try to remove file |
getType([bool $withEncoding]) |
guess files mime-type |
getTime([Time $type]) |
get last-modified unix-timestamp |
getDate([Time $type]) |
same as getTime() , but returns a DateTime object instead |
getSize() |
calculate size |
getHash([Hash $mode [,string $algo [,bool $raw]]]) |
calculates a hash over $mode with $algo algorithm |
isReadable() |
is file readable? |
isWriteable() |
is file writeable? |
isSymlink() |
is file a symlink? |
isFile() |
is selected path an actual file? |
isDir() |
is selected path a directory? => always false for File instance |
isDotfile() |
is file a hidden dot-file? |
isValid() |
run constraints validation |
getHandle([string $mode]) |
gets new file-Handle for binary file-access |
storage() |
access internal storage adapter |
getPath() |
fetch filesystem-path |
getStream() |
returns Stream wrapper around internal resource pointing to actual file |
dir([,int $constraints [,string $as [,...$arguments]]]) |
get parent Directory of file |
Open and read a file from the local filesystem
or from in-memory-file
or from stream
or from a Flysystem object
Usage: Directories
Like Files, Directories must be initialized using a Storage.
Methods
method | description |
---|---|
list($recursive) |
returns DirectoryIterator-Object to list directory-content as new File /Directory objects |
mkdir() |
try to create directory |
remove() |
try to remove directory |
copyTo($destination [,Constraint $constraints]) |
copy directory recursively to new $destination Storage-adapter |
getTime([Time $type]) |
get last-modified unix-timestamp |
getDate([Time $type]) |
same as getTime() , but returns a DateTime object instead |
getSize([bool $recursive]) |
calculate size |
getHash([Hash $mode [,string $algo [,bool $raw]]]) |
calculates a hash over $mode with $algo algorithm |
isReadable() |
is directory readable? |
isWriteable() |
is directory writeable? |
isSymlink() |
is directory a symlink? |
isFile() |
is selected path a file? => always false for Directory instance |
isDir() |
is selected path an actual directory? |
isDotfile() |
is directory a hidden dot-file? |
isValid() |
run constraints validation |
storage() |
access internal storage adapter |
getPath() |
fetch filesystem-path |
file(string $filename [,int $constraints [,string $as [,...$arguments]]]) |
get File in current directory by name |
dir(string $dirname [,int $constraints [,string $as [,...$arguments]]]) |
get Directory in current directory by name (clone s storage!) |
check if directory is readable
list all files inside a directory
Security
Using this filesystem-layer also provides some kind of security for usage with user-defined file-paths. Accessing file attributes or content is only done after checking against so called Constraints.
Constraints
Constraints are defined on initialization of File
or Directory
objects and are stored inside the internal Storage
object. This allows Constraints-inheritance, if new FileSystem-objects are accessed from existing ones. Example:
In this example, the $file
object shares the Constraints (inherited) and safepath with $dir
- allowing safely accessing a file in $dir
from user defined parameters. Path traversal is therefore prevented.
The following constraints are set as default (as part of Constraint::STRICT
), but can be overwritten with the second argument of the File($storage, $constraints)
or Directory($storage, $constraints)
constructor:
Constraint::IN_OPEN_BASEDIR
=> the path must be within theopen_basedir
php-ini paths, this allows throwing exceptions before running into php core errorsConstraint::DISALLOW_LINK
=> the path must not be a (symbolic-) linkConstraint::IN_SAFEPATH
=> if a file/directory path is build out of multiple components (parameters), the resulting file/directory destination must be inside the first path-component (called safepath)
Extensions
Directory Extensions
Directory\Command
: Allows running shell-commands inside the given directory.
File Extensions
File\Image
: Allows image-manipulations based onimagemagick
orgd
(later one is default). Requires theIntervention\Image
package.
Be aware: all image-file manipulations are directly mutating the original file!
-
File\Zip
: Allows basic zip-operations, like creating a new archive or extracting an existing one. File\SSLCertificate
: Access some basic x509 SSL Certificate information, either from:- a certificate-file (usually
.crt
) - a Server (by URL) if it's serving a ssl based protocol like
HTTPS
- a certificate-file (usually
Storage Extensions
-
Disk\Current
: Uses current-working-directory (getcwd()
) as safepath. Useful for cli-scripts in combination withDirectory\Command
. -
Disk\Temp
: Uses the system-temp directory to create a temporary file/directory. The file is automatically removed after freeing the object instance! -
Disk\Uploaded
: Provides safe and easy uploaded-files access through php's nativeis_uploaded_file()
andmove_uploaded_file()
functions. Memory\Resource
: Reads resource content into MEMORY on construction. The resource can be closed afterward.
ATTENTION: Usually it's a better idea to just use
Storage\Stream
instead!
All versions of filesystem with dependencies
ext-fileinfo Version *
ext-zip Version *
ext-openssl Version *