Проблема с FTP-соединением при загрузке файла с использованием Laravel 7 - PullRequest
0 голосов
/ 19 июня 2020

Я хочу загрузить файл с Laravel на другой сервер, используя FTP.

Это кажется очень простой задачей, поэтому давайте взглянем на мои конфигурации:

.env файл

FTP_HOST=dl.myserver.com
FTP_USERNAME=beni@dl.myserver.com
FTP_PASSWORD=somePass

файловая система. php

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'ftp' => [
            'driver' => 'ftp',
            'host' => env('FTP_HOST'),
            'username' => env('FTP_USERNAME'),
            'password' => env('FTP_PASSWORD'),
            'passive'  => true,
            'port' => 21,
            'root' => '/home/myserver/public_html/podcasts'
        ],
       .
       .
       .

и наконец мой контроллер

        $year = Carbon::now()->year;
        $month = Carbon::now()->month;
        $day = Carbon::now()->day;

        //podcast
        $podcast = $request->file('podcast');
        $filename = $podcast->getClientOriginalName();
        $purename = substr($filename, 0, strrpos($filename, '.'));


        $filenametostore = $purename . '_' . $year .'_' . $month . '_' . $day . '.' . $podcast->getClientOriginalExtension();

        Storage::disk('ftp')->put($filenametostore, fopen($request->file('podcast'), 'r+'));

.
.
.

, но у меня такая ошибка:

League \ Flysystem \ ConnectionRuntimeException

Не удалось войти в систему с подключением: dl.myserver.com::21, имя пользователя: beni@dl.myserver.com

Моя FTP учетная запись и информация верны, потому что я вошел в систему, используя FileZilla.

В качестве упоминания, мой dl.server.com использует CPANEL.

Есть какие-нибудь идеи по этому поводу?

Заранее спасибо

1 Ответ

0 голосов
/ 20 июня 2020

На удивление проблема решилась, когда я заменил env('FTP_HOST'), env('FTP_USERNAME') и env('FTP_PASSWORD') эквивалентными строковыми значениями в filesystems.php файле!

I попробовал чистый PHP FTP functions и понял:

        $conn_id = ftp_connect("dl.myserver.com");
        ftp_login($conn_id, "beni@dl.myserver.com", "somePass");
        dd(ftp_put($conn_id, $filenametostore, $request->file('podcast'), FTP_ASCII));

Итак, мой Laravel filesystem.php выглядит так:

        'ftp' => [
            'driver' => 'ftp',
            'host' => "dl.myserver.com", //env('FTP_HOST'),
            'username' => "beni@dl.myserver.com", //env('FTP_USERNAME'),
            'password' => "somePass", //env('FTP_PASSWORD'),
        ],

, и он отлично работает в моем случае .

...