PHPでファイルアップロード・・・めんどくさいですね。
ましてやAmazonS3にアップロード、パフォーマンスまたはコストの為にローカルキャッシュを持たせる..
ローカルに保存していたファイルをクラウドに移行、または別のクラウドサービスに移行..
すごくめんどくさい
そんな時の抽象レイヤー
Gaufrette - https://github.com/KnpLabs/Gaufrette
ローカルファイルシステム
<?php
use Gaufrette\Filesystem;
use Gaufrette\Adapter\Local as LocalAdapter;
$adapter = new LocalAdapter('/var/media');
$filesystem = new Filesystem($adapter);
$content = $filesystem->read('hoge.txt');
$content = 'Hello gaufrette';
$filesystem->write('hoge.txt', $content);
アダプターを変えるだけで、色々なファイルシステムにアクセスできます
Amazon S3
<?php
$service = S3Client::factory(['key' => 'key_here', 'secret' => 'secret_here']);
$adapter = new Gaufrette\Adapter\AwsS3($service, 'bucket-name');
移行も簡単にできてしまうのが容易に想像できますね!
キャッシング
<?php
$ttl = 3600;
$adapter = new Gaufrette\Adapter\Cache($slowAdapter, $localAdapter, $ttl);
$filesystem = new Gaufrette\Filesystem($adapter);
他にもアダプタはたくさん
- Rackspace
- OpenStack
- Dropbox
- DoctrineDbal
- Ftp
- etc
https://github.com/KnpLabs/Gaufrette/tree/master/src/Gaufrette/Adapter
SymfonyにはKnpGaufretteBundleもあります
https://github.com/KnpLabs/KnpGaufretteBundle
アダプタをサービスにする手間が省ける他に、LiipImagineBundle(サムネイルを生成するバンドル)上でGaufretteを使う事も容易になります。
KnpGaufretteBundle
でStreamWrapper
を定義LiipImagineBundle
で1のStreamWrapper
をデータソースとするStreamDataLoader
を定義
何も困る事はありませんね!
詳しくはドキュメントにあります。
https://github.com/liip/LiipImagineBundle/blob/master/Resources/doc/data-loader/stream.md
ローカルファイルシステムにしか使わないとしても便利なのでおすすめです。