CFFTP эквиваленты в Laravel

У меня есть страница ColdFusion, на которой установлено безопасное FTP-соединение с удаленным ftp-сервером, и перечислены имена всех файлов в определенном каталоге на этом сервере (в объекте запроса). Это относительно просто в CF — вы используете тег cfftp, чтобы открыть соединение ftp, а затем снова используете тег cfftp, чтобы перечислить файлы, которые находятся в определенном каталоге:

<cfftp action = "open"username = "username"connection = "myConnection"password = "password"fingerprint = "(eight pairs of hexadecimal values in the form
hh:hh:hh:hh:hh:hh:hh:hh)"server = "xxx.xxx.xx.xx"secure = "yes">

<cfftp action = "listDir"connection="myConnection"directory="Output_Directory"name="qDir" />
<!--- Files in the specified directory are now stored in a query object named "qDir", and their filenames can be pulled using a CF query of query --->

Я новичок в PHP / Laravel и пытаюсь понять, как сделать то же самое в Laravel. До сих пор я не нашел ни одного видео или учебных пособий, которые объясняют, как открывать FTP-соединения в Laravel (обычные или безопасные) или как просматривать файлы в каталоге после того, как это соединение было установлено.

Я нашел что-то в https://laravel.com/docs/5.6/filesystem#downloading-files, о том, что поместить в страницу filesystems.php для конфигурации драйвера SFTP. Который, я так понимаю, должен быть настроен, прежде чем я смогу открыть любое соединение SFTP на моем сайте Laravel. Но я нахожу это немного запутанным. Как видно из приведенного ниже, этот код требует значения для «privateKey» и «пароля» и не содержит дополнительных настроек для «отпечатка пальца», который я включил в тег CFFTP выше.

//include on filesystems.php:

'sftp' => [
'driver' => 'sftp',
'host' => 'example.com',
'username' => 'your-username',
'password' => 'your-password',

// Settings for SSH key based authentication...
// 'privateKey' => '/path/to/privateKey',
// 'password' => 'encryption-password',

// Optional SFTP Settings...
// 'port' => 22,
// 'root' => '',
// 'timeout' => 30,
],

Я могу безопасно подключиться к серверу ftp через клиент ftp (Bitvise), который запрашивает только имя пользователя, пароль, IP-адрес хоста и порт (22). Поэтому я не уверен, какие значения «privateKey» или «password» необходимо указывать в приведенном выше коде … и как в массиве ‘sftp’ могут быть две переменные с именем «password» (одна для «your-password»). «и один для» шифрования-пароль «).

Похоже, что у Laravel есть хорошие обучающие видео в целом — кто-нибудь может подсказать мне где-нибудь, где рассматривается ftp / sftp, особенно действия типа «open» и «listDir»? (Я ищу Laravel в частности — я могу понять, как это делается в vanilla PHP самостоятельно). Большое спасибо.

(Приложение) добавив это здесь позже, чтобы я мог обернуть ниже в формате кода. Я думаю, что мне нужно сделать, это использовать драйвер файловой системы ftp, а не драйвер файловой системы sftp, и установить для ssl значение true. Так что на filesystems.php у меня должно быть что-то вроде:

'ftp' => [
'driver'   => 'ftp',
'host'     => env('FTP_SERVER'),
'port'     => 22,//env('FTP_PORT'),
'username' => env('FTP_USERNAME'),
'password' => env('FTP_PASSWORD'),
'passive'  => true,
'ssl'      => true,
'timeout'  => 30,
'root'     => '/',
],

Все еще работаю над установлением соединения; хоть. Когда я пытался это сделать, я получал сообщение об ошибке: «Использование неопределенной константы FTP_BINARY — предполагается, что« FTP_BINARY »». Выяснил, что проблема — потому что мне нужно было включить php_ftp.dll в конфигурации php, так как это не включено по умолчанию в Windows. Но теперь я получаю другое сообщение об ошибке — «Не удалось подключиться к порту xxx.xxx.xx.xx узла: 22». Окунусь в это, посмотрим в чем проблема и доложу.

(Позже) Похоже, у меня какая-то проблема с аутентификацией. Я пытался подключиться к тому же FTP-серверу, используя только vanilla PHP, то есть функцию ftp_ssl_connect (). Эта функция возвращает false, что означает, что при подключении произошла ошибка. (До того, как я включил php_ftp.dll, я только что получил сообщение об ошибке, в котором говорилось, что ftp_ssl_connect () была неопределенной функцией). Интересно, опуская отпечаток пальца, который мы ранее включали в качестве параметра с тегом Coldfusion cfftp, как-то связано с ним. Но это не возможный параметр в Laravel или основных функциях PHP. Копаем … доложим …

(4/11/18)
Кажется, что ключевой вопрос заключается в том, что именно происходит с тэгом cfftp, и как он устанавливает свое соединение (sFTP или FTPS?), Потому что, тем не менее, он работает — это то, что мы хотим воссоздать в PHP / Laravel. Я задал отдельный вопрос по этому поводу.

Документация по тегу cfftp ничего не говорит об этом при использовании sFTP или FTPS. Это только говорит о том, что когда вы указываете secure = «yes», тогда вы можете открыть соединение с сервером Secure Shell (SSH) с помощью симметричного или асимметричного шифрования. При использовании симметричного шифрования (что мы и делаем), вы передаете имя пользователя, пароль и отпечаток пальца (что мы и делаем).

Вы можете указать порт в теге cfftp; если порт не указан, то по умолчанию он равен 21. В качестве теста я явно передал порт как 21 и 22, и соединение работало нормально в обоих случаях. Я не уверен, почему это так; Я ожидаю, что это сработает в одном или другом случае, но не в обоих.

Между тем, если нам действительно нужно использовать SFTP, я попытался установить SFTP-соединение с ftp-сервером в ядре PHP с помощью функции ssh2_connect (). Я получаю сообщение об ошибке, в котором говорится, что эта функция не определена, хотя я добавил и включил расширение php_ssh2.dll, так что это еще одна вещь, которую нужно рассмотреть.

0

Решение

privateKey поле, если вы используете аутентификацию с открытым ключом на
ваше соединение SSH. Аутентификация с открытым ключом используется в качестве альтернативы стандартной аутентификации по имени пользователя и паролю. Обычно он считается более безопасным, чем просто имя пользователя / пароль. Вот достойный учебник для начинающих.

Драйвер файловой системы SFTP Laravel использует PHP League flysystem-sftp:
https://github.com/thephpleague/flysystem-sftp

Если вы решите не использовать аутентификацию с открытым ключом, вы можете оставить это поле закомментированным. Второй password запись, вероятно, просто опечатка в документации; увидеть flysystem-sftp проект для фактического синтаксиса конфигурации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector