Asynchronous filesystem abstraction.

v0.1.2 2018-10-22 12:10 UTC


Build Status Code Climate

ReactPHP's evented asynchronous, non-blocking filesystem access library.

Table of Contents

  1. Introduction
  2. Adapters
  3. Examples
  4. Install
  5. License


react/filesystem is a package to power your application with asynchronous, non-blocking filesystem access. Asynchronous access is enabled by various adapters described below.


  • ChildProcessAdapter - Adapter using child processes to perform IO actions (default adapter if no extensions are installed)
  • EioAdapter - Adapter using ext-eio


Adding examples here over time.

Creating filesystem object


$loop = \React\EventLoop\Factory::create();
$filesystem = \React\Filesystem\Filesystem::create($loop);

File object


$loop = \React\EventLoop\Factory::create();
$filesystem = \React\Filesystem\Filesystem::create($loop);

$file = $filesystem->file(__FILE__); // Returns a \React\Filesystem\Node\FileInterface compatible object

Reading files

$filesystem->getContents('test.txt')->then(function($contents) {

Which is a convenience method for:

$filesystem->file('test.txt')->open('r')->then(function($stream) {
    return \React\Stream\BufferedSink::createPromise($stream);
})->then(function($contents) {
    // ...

Which in it's turn is a convenience method for:

$filesystem->file('test.txt')->open('r')->then(function ($stream) use ($node) {
    $buffer = '';
    $deferred = new \React\Promise\Deferred();
    $stream->on('data', function ($data) use (&$buffer) {
        $buffer += $data;
    $stream->on('end', function ($data) use ($stream, $deferred, &$buffer) {
    return $deferred->promise();

Writing files

Open a file for writing (w flag) and write abcde to test.txt and close it. Create it (c flag) when it doesn't exists and truncate it (t flag) when it does.

$filesystem->file('test.txt')->open('cwt')->then(function ($stream) {

Directory object


$loop = \React\EventLoop\Factory::create();
$filesystem = \React\Filesystem\Filesystem::create($loop);

$dir = $filesystem->dir(__DIR__); // Returns a \React\Filesystem\Node\DirectoryInterface compatible object

List contents

$filesystem->dir(__DIR__)->ls()->then(function (array $list) {
   foreach ($list as $node) {
       echo $node->getPath(), PHP_EOL;


The recommended way to install this library is through Composer. New to Composer?

This will install the latest supported version:

$ composer require react/filesystem:^0.1.1


React/Filesystem is released under the MIT license.