WARNING: you're viewing docs for an outdated version. View the docs for the current version.

Mount Manager (V1)

Flysystem comes with a wrapper class to easily work with multiple file system instances from a single object. The League\Flysystem\MountManager is an easy to use container allowing you to simplify more complex cross file system interactions.

Setting up a Mount Manager is easy:

$ftp = new League\Flysystem\Filesystem($ftpAdapter);
$s3 = new League\Flysystem\Filesystem($s3Adapter);
$local = new League\Flysystem\Filesystem($localAdapter);

// Add them in the constructor
$manager = new League\Flysystem\MountManager([
    'ftp' => $ftp,
    's3' => $s3,
]);

// Or mount them later
$manager->mountFilesystem('local', $local);

Now we do all the file operations weโ€™d normally do on a Flysystem\Filesystem instance.

// Read from FTP
$contents = $manager->read('ftp://some/file.txt');

// And write to local
$manager->write('local://put/it/here.txt', $contents);

This makes it easy to code up simple sync strategies.

$contents = $manager->listContents('local://uploads', true);

foreach ($contents as $entry) {
    $update = false;

    if ( ! $manager->has('storage://'.$entry['path'])) {
        $update = true;
    } elseif ($manager->getTimestamp('local://'.$entry['path']) > $manager->getTimestamp('storage://'.$entry['path'])) {
        $update = true;
    }

    if ($update) {
        $manager->put('storage://'.$entry['path'], $manager->read('local://'.$entry['path']));
    }
}

Specialized calls

Copy

The copy method provided by the Mount Manager takes the origin of the file into account. When it detects the source and destination are located on different file systems itโ€™ll use a streamed upload instead, transparently.

$mountManager->copy('local://some/file.ext', 'backup://storage/location.ext');

Move

The move call is the multi-file system counterpart to rename. Where rename must be used on the same file system, the move call provides the same conceptual behavior, but on two different file systems.

$mountManager->move('local://some/upload.jpeg', 'cdn://users/1/profile-picture.jpeg');