Skip to content

xlii-chl/flysystem-pdo-adapter

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flysystem PDO Database Adapter

Build Status License

PDO database adapter for Flysystem filesystem abstraction. No additional dependencies, only PDO extension required.

Installation

composer require integral/flysystem-pdo-adapter

Database Configuration

At the beginning you have to create a table that will be used to store files.

SQL table schema examples for MySQL, SQLite and PostgreSQL are presented below.

MySQL

CREATE TABLE files (
  id int(11) NOT NULL AUTO_INCREMENT,
  path varchar(255) NOT NULL,
  type enum('file','dir') NOT NULL,
  contents longblob,
  size int(11) NOT NULL DEFAULT 0,
  mimetype varchar(127),
  timestamp int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (id),
  UNIQUE KEY path_unique (path)
);

SQLite

CREATE TABLE files (
    id INTEGER PRIMARY KEY,
    path TEXT NOT NULL UNIQUE,
    type TEXT NOT NULL,
    contents BLOB,
    size INTEGER NOT NULL DEFAULT 0,
    mimetype TEXT,
    timestamp INTEGER NOT NULL DEFAULT 0
)

PostgreSQL

CREATE TABLE public.files (
  id serial NOT NULL,
  path varchar(255) NOT NULL,
  type varchar(4) NOT NULL,
  contents bytea,
  size integer NOT NULL DEFAULT 0,
  mimetype varchar(127),
  "timestamp" integer NOT NULL DEFAULT 0,
  is_compressed boolean NOT NULL DEFAULT true,
  update_ts timestamp(0) with time zone DEFAULT NOW(),
  CONSTRAINT files_pkey PRIMARY KEY (id),
  CONSTRAINT type_check CHECK (type='dir' or type='file'),
  CONSTRAINT path_unique UNIQUE (path)
);

Usage

Create an adapter by passing a valid PDO object and table name as constructor arguments:

MySQL

// http://php.net/manual/pl/ref.pdo-mysql.connection.php
$pdo = new PDO('mysql:host=hostname;dbname=database_name', 'username', 'password');
$adapter = new PDOAdapter($pdo, 'files');

SQLite

// http://php.net/manual/pl/ref.pdo-sqlite.connection.php
$pdo = new PDO('sqlite:/absolute/path/to/database.sqlite');
$adapter = new PDOAdapter($pdo, 'files');

PostgreSQL

// http://php.net/manual/pl/ref.pdo-pgsql.php
$pdo = new PDO('pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass');
$adapter = new PDOAdapter($pdo, 'public.files');

Then simply pass the created adapter to \League\Flysystem\Filesystem:

$filesystem = new Filesystem($adapter);

Done! At this point the $filesystem is ready to use.

Note

This implementation emulates a tree structured filesystem, therefore some of the operations (like renaming or deleting a folder) produce quite a lot of database queries, which may result in a poor performance for some scenarios.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%