Intereting Posts
Поле $ _FILES 'tmp_name' не имеет значения для расширения файла .JPG Laravel 5.2 Вспышка сеанса не работает даже с веб-промежуточным программным обеспечением Регулярное выражение для получения содержимого div-класса в php Как обновить базу данных после обновления страницы в javaScript? удаление пароля из закрытого ключа rsa Как автоматически перенаправить пользователя в Symfony после таймаута сеанса? Yii 2: как объединить удаление данных в виде сетки картика? Невозможно подключиться к неблокирующему сокету Как создать ссылку для добавления записи в календарь? Прозрачное окружное обрезанное изображение с помощью PHP Как эхо-элемент ассоциативного массива в строке? PHP Script для загрузки исходного кода веб-страницы и поиска определенной строки Запись в несколько (разделяющих) CSV-файлов с помощью PHP PHP, HTML-декодер? Определяет ли порядок определения класса в PHP?

Как SFTP с PHP?

Я столкнулся с множеством PHP-скриптов для веб-FTP-клиентов. Мне нужно реализовать SFTP-клиент в качестве веб-приложения в PHP. Поддерживает ли PHP fot SFTP? Я не мог найти образцы. Кто-нибудь может мне с этим помочь?

PHP имеет обтекатели потоков ssh2 (по умолчанию отключен), поэтому вы можете использовать соединения sftp с любой функцией, поддерживающей ssh2.sftp:// потоков, используя ssh2.sftp:// для протокола, например

 file_get_contents('ssh2.sftp://user:pass@example.com:22/path/to/filename'); 

или – когда также используется расширение ssh2

 $connection = ssh2_connect('shell.example.com', 22); ssh2_auth_password($connection, 'username', 'password'); $sftp = ssh2_sftp($connection); $stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r'); 

См. http://php.net/manual/en/wrappers.ssh2.php

С другой стороны, есть еще довольно много вопросов по этой теме:

Функции ssh2 не очень хороши. Трудно использовать и еще труднее установить, использование их гарантирует, что ваш код имеет нулевую мобильность. Моей рекомендацией было бы использовать phpseclib, чистую реализацию PHP SFTP .

Я обнаружил, что «phpseclib» должен помочь вам в этом (SFTP и многие другие функции). http://phpseclib.sourceforge.net/

Чтобы поместить файл на сервер, просто позвоните (пример кода из http://phpseclib.sourceforge.net/sftp/examples.html#put )

 <?php include('Net/SFTP.php'); $sftp = new Net_SFTP('www.domain.tld'); if (!$sftp->login('username', 'password')) { exit('Login Failed'); } // puts a three-byte file named filename.remote on the SFTP server $sftp->put('filename.remote', 'xxx'); // puts an x-byte file named filename.remote on the SFTP server, // where x is the size of filename.local $sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE); в <?php include('Net/SFTP.php'); $sftp = new Net_SFTP('www.domain.tld'); if (!$sftp->login('username', 'password')) { exit('Login Failed'); } // puts a three-byte file named filename.remote on the SFTP server $sftp->put('filename.remote', 'xxx'); // puts an x-byte file named filename.remote on the SFTP server, // where x is the size of filename.local $sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE); 

Я выполнил полное копирование и написал класс, который создает пакетный файл, а затем вызывает sftp через system вызов. Не самый приятный (или самый быстрый) способ сделать это, но он работает для того, что мне нужно, и не требовал установки дополнительных библиотек или расширений в PHP.

Может быть, путь, если вы не хотите использовать расширения ssh2

Если вы можете использовать расширение ssh2 для PHP, я предлагаю проверить это:

idct SFTP-клиент на GitHub

Monsta FTP предлагает SFTP / SCP, а также обычный FTP через веб-клиент, который можно скачать бесплатно. (отказ от ответственности: я участвую в этом проекте)