LoginSignup
1
0

More than 3 years have passed since last update.

Laravel5.0のStorageでFTPを利用できるようにする

Last updated at Posted at 2019-10-17

エラーの発生原因と解消方法

レガシーなプロジェクトと戦っている際に遭遇したエラー。
5.1以降だと普通に使えてハマったので誰かの助けになれば…

そのまま利用しようとすると発生するエラー

Laravel5.0でStorage::disk('ftp')->files('/')等を使用すると以下のエラーが発生する。

exception 'ErrorException' with message 'call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Filesystem\FilesystemAdapter' does not have a
 method 'createFtpDriver'' in /sampleApp/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php:232

エラー原因

Laravel5.0に同梱されているLeague\FlySystemはFTPに対応しているが、Illumine/FilesystemがFTPに対応していないのが原因。
※Laravel5.1からは対応している
Laravel5.0 FilesystemManager APIDoc
createFtpDriverメソッドが無い
Laravel5.1 FilesystemManager APIDoc
createFtpDriverメソッドが有る

解消方法

公式ドキュメントに記述がある、カスタムファイルシステムを作成する
Laravel 5.0 ファイルシステム/クラウドストレージ - カスタムファイルシステム

実装方法

カスタムファイルシステムを定義

<?php

namespace App\CustomFileSystems;

use Storage;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Filesystem;
use League\Flysystem\Adapter\Ftp;

class FtpFileSystem extends ServiceProvider
{
    public function boot()
    {
        Storage::extend('ftp', function ($app, $config) {
            return new Filesystem(new Ftp($config));
        });
    }

    public function register() {}
}

ServiceProviderに作成したカスタムファイルシステムを追加

config/app.php

<?php
return [
    'providers' => [
        'App\CustomFileSystems\FtpFileSystem'
    ],
];

Filesystem用コンフィグにFTP接続設定を記述

config/filesystems.php

<?php

return [
    'default' => env('FILE_DISK', 'local'),
    'disks' => [
        'local' => [
            'driver' => 'local',
            'root' => storage_path() . '/app',
        ],
        'ftp' => [
            'driver' => 'ftp',
            'host' => 'hoge.jp',
            'username' => 'user',
            'password' => 'pass',
        ],
    ],
];

呼び出して動かす

use Illuminate\Support\Facades\Storage;

Storage::disk('ftp')->files('/');

レガシープロジェクトからは逃げられないんだなあ わにを。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0