sajad torkamani

In a nutshell

Flysystem is a PHP library that provides a single API for working with many different types of file systems (e.g., Local, AWS S3, Google Cloud Storage, Azure Blob Storage memory, etc). The benefits are:

  1. Avoid vendor lock-in: Switch between storage providers without changing your application’s code.
  2. Easier time working with files. The Flysystem API provides expressive methods like $flysystem->write($path, $contents) that make working with file systems easier.

You start by:

  • Installing the core library (e.g., composer require league/flysystem:^3.0)
  • Installing an adapter (e.g., composer require league/flysystem-aws-s3-v3:^3.0)

Then you can work with the filesystem like so:

$adapter = new League\Flysystem\Local\LocalFilesystemAdapter($rootPath);
$filesystem = new League\Flysystem\Filesystem($adapter);

$filesystem->write($path, $contents);

In the above example, we used the Local adapter, but using an alternative adapter like AWS S3 looks very similar:

/** @var Aws\S3\S3ClientInterface $client */
$client = new Aws\S3\S3Client($options);

// The internal adapter
$adapter = new League\Flysystem\AwsS3V3\AwsS3V3Adapter(
    // S3Client
    // Bucket name

// The FilesystemOperator
$filesystem = new League\Flysystem\Filesystem($adapter);

Other notes

  • There’s a league/flysystem-bundle Symfony bundle that helps integrate the Flysystem library into Symfony applications.