integral / flysystem-pdo-adapter
Flysystem文件抽象层的PDO适配器
1.0.4
2019-02-19 07:24 UTC
Requires
- ext-pdo: *
- league/flysystem: ^1.0
Requires (Dev)
- phpunit/phpunit: ~4.8
This package is not auto-updated.
Last update: 2024-09-11 08:37:02 UTC
README
Flysystem文件系统的PDO数据库适配器。[Flysystem](https://github.com/thephpleague/flysystem) 文件抽象。无需额外依赖,仅需要PDO扩展。
安装
composer require integral/flysystem-pdo-adapter
数据库配置
开始时,您需要创建一个将用于存储文件的表。
以下提供了MySQL、SQLite和PostgreSQL的SQL表模式示例。
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) );
用法
通过传递有效的PDO
对象和表名作为构造函数参数来创建适配器
MySQL
// https://php.ac.cn/manual/pl/ref.pdo-mysql.connection.php $pdo = new PDO('mysql:host=hostname;dbname=database_name', 'username', 'password'); $adapter = new PDOAdapter($pdo, 'files');
SQLite
// https://php.ac.cn/manual/pl/ref.pdo-sqlite.connection.php $pdo = new PDO('sqlite:/absolute/path/to/database.sqlite'); $adapter = new PDOAdapter($pdo, 'files');
PostgreSQL
// https://php.ac.cn/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');
然后只需将创建的适配器传递给\League\Flysystem\Filesystem
$filesystem = new Filesystem($adapter);
完成!此时,$filesystem
已准备好使用。
注意
此实现模拟了树状结构的文件系统,因此一些操作(如重命名或删除文件夹)会产生大量的数据库查询,这可能导致某些场景的性能不佳。