LoginSignup
1
1

More than 3 years have passed since last update.

Laravel のFTP接続で FTP_USEPASVADDRESS を false にする

Posted at

経緯

Laravel の Storage ファサードを使ってFTP操作をしようとした際に以下のようなエラーが出た。

>>> Storage::disk('ftp')->files()
PHP Warning:  ftp_rawlist(): php_connect_nonb() failed: No error (0) in /*****/vendor/league/flysystem/src/Adapter/Ftp.php on line 570

PHPからFTPSで接続したときのエラー対応

この記事を参考にして調べたところ、自分が接続しようとしている環境でも ftp_set_option()FTP_USEPASVADDRESSfalse にすれば正常に動作する事が分かった。

Laravel での設定方法

Laravel 公式ドキュメントの設定例 にはそれらしいオプションは見当たらなかったが、ソースを追ったところ設定している箇所を発見し、ignorePassiveAddress というオプションがある事が分かった。

これを config/filesystems.php に設定してやると FTP_USEPASVADDRESS が設定され、FTP操作ができるようになった。

'ftp' => [
    'driver' => 'ftp',
    'host' => 'ftp.example.com',
    'username' => 'your-username',
    'password' => 'your-password',
    'passive' => true,
    'ssl' => true,
    'ignorePassiveAddress' => true, // FTP_USEPASVADDRESS を false にするには true を指定する
],

おまけ

後から知ったが、League\Flysystem のドキュメント のサンプルコードには ignorePassiveAddress の記述があった。

その他設定可能なオプションを調べたい場合は \League\Flysystem\Adapter\Ftp::$configurable を参照すると良い。

    protected $configurable = [
        'host',
        'port',
        'username',
        'password',
        'ssl',
        'timeout',
        'root',
        'permPrivate',
        'permPublic',
        'passive',
        'transferMode',
        'systemType',
        'ignorePassiveAddress',
        'recurseManually',
        'utf8',
        'enableTimestampsOnUnixListings',
    ];

1
1
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
1