2016-06-22

FlysystemをLaravelで使う

開発サイトの規模が大きくなってきたり、よりセキュアなサーバー環境を整えるためにサーバーを「ウェブサーバー」と「データサーバー」で物理的に分割する場合があると思います。

そして、PHPでファイルをリモートで読み込み/書き込みをするためには「Flysystem」という有名なパッケージを利用すればとても簡単にできるのですが、今回はこの「Flysystem」をLaravel(5.2)で使う方法をお届けしたいと思います。

※ちなみに今回はSFTPを使ってリモートサーバーとの連携をしますが、Flysystemは他にもaws」や「Azure」、その他には「DropBox」との連携までサポートしています。


【環境】

Laravel 5.2
SFTPで自分のVPSへSFTPを使って接続

【インストール】

まずは composer でパッケージのインストールです。
ここではLaravelと統合されているものをインストールします。
(ちなみにGitHubはこちら)
composer require graham-campbell/flysystem
次に私の場合はSFTPでの接続ですので、Flysystemのサブパッケージをインストールします。
league/flysystem-sftp:^1.0
はい。これでインストールは完了です。


【準備】

いつものように ServiceProvider と aliases を config/app.php に設置しましょう。

(ServiceProvider)
 GrahamCampbell\Flysystem\FlysystemServiceProvider::class  


(Aliases)
 'Flysystem' => GrahamCampbell\Flysystem\Facades\Flysystem::class  


そして、以下のコマンドで専用の設定ファイルを publish します。
php artisan vendor:publish
実行すると、configフォルダの中に「flysystem.php」というファイルが作成されていると思いますのでこの中で接続情報を保存します。

※もしコマンドを実行しても flysystem.php が作成されない場合は、以下のコマンドを実行してからもう一度トライしてみてください。
  • composer dumpautoload -o
  • php artisan config:cache

では、実際の中身です。

今回はSFTPでの接続なので「SFTP」のエリアを探して、必要な情報を入力すればOKです。
変更する場所としては、

  • host(IPアドレスなど)
  • port(変えている場合)
  • username
  • password
  • privateKey(プライベート・キーファイルのパス)
  • root(リモートサーバーの保存したいフォルダパス)

あたりになるかと思います。

はい、これで設定は完了です。


【使い方】

(基本的な使い方)

使い方はとても直感的でシンプルです。
次の例は、「test.txt」というファイルを作り、さらにそこに「bar」という文字列を書き込む手準になります。

 \Flysystem::connection('sftp')->put('test.txt', 'bar');  

たったこれだけです。
では逆にその保存した内容を読み込んでみましょう。

 echo \Flysystem::connection('sftp')->read('test.txt');  

これで「bar」が表示されます。


(フォルダを指定して保存)

もし、フォルダを指定して保存したい場合はこのようになります。

 \Flysystem::connection('sftp')->put('test_dir/test.txt', 'bar');  

この場合は、test_dir/test.txt にファイルが保存されます。


(画像を保存)

これもテキストファイルなどとやり方はほぼ同じで、

 $content = file_get_contents(public_path('images/my_photo.jpg'));  
 \Flysystem::connection('sftp')->put('me.jpg', $content); 

とやればOK。
とてもシンプルです。

ちなみに、Laravelを使って保存した画像をサーバーから呼び出して表示するには以下のようにすればいいでしょう。

(コントローラ)
 public function flysystem_image() {  
      $image_contents = \Flysystem::connection('sftp')->read('me.jpg');  
      return response($image_contents, 200)->header('Content-Type', 'image/jpeg');  
 }  

以上、Laravel と Flysystem を使ったサーバーの連携方法でした。
ではでは!



0 件のコメント:

コメントを投稿