Как SFTP загружать файлы с PHP

У меня возникли проблемы с использованием PHP для загрузки файлов SFTP на удаленный сервер. Когда я использую cURL, я получаю описанную здесь ошибку:

SFTP из PHP – неопределенные константы CURLOPT_PROTOCOLS и CURLPROTO_SFTP?

Я также пробовал phpseclib, как это было предложено в:

SFTP из PHP

Но когда я пытаюсь использовать phpseclib, я получаю следующие ошибки:

Warning: require_once(Math/BigInteger.php) [function.require-once]: failed to open stream: No such file or directory in /home/john/public_html/test/Net/SSH2.php on line 53 Fatal error: require_once() [function.require]: Failed opening required 'Math/BigInteger.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/john/public_html/test/Net/SSH2.php on line 53 

Затем я попытался использовать системные команды в php, но ничего не произошло:

 <?php echo system('sftp user@ftp.domain.com'); echo system('password'); echo system('put file.csv'); ?> 

Я также пробовал

 <?php $connection = ssh2_connect('shell.example.com', 22); ssh2_auth_password($connection, 'username', 'password'); ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644); ?> 

но мой php-сервер говорит, что ss2_connect не определен.

Я попытался сделать следующее из терминала

 scp file.csv user@ftp.remote.com password 

Но сервер не разрешает команду scp. У меня нет доступа к оболочке для создания ключей ssh.

Все, что я могу сделать прямо сейчас, это sftp с терминала и загрузить вручную. Но я действительно хочу автоматизировать это, поэтому сайт PHP может все это сделать.

Существует не так много руководств по загрузке SFTP с PHP. Это потому, что это плохо? Если да, что мне делать? Сервер, который я хочу загрузить, позволяет только подключать sftp.

http://phpseclib.sourceforge.net/documentation/intro.html#intro_usage_correct

В соответствии с этим корневой каталог phpseclib должен находиться в вашем include_path. С этой страницы:

 <?php set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); include('Net/SFTP.php'); ?> в <?php set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib'); include('Net/SFTP.php'); ?> 

Вы действительно должны ознакомиться с такой техникой включения – это довольно стандартно для библиотек PEAR и Zend.

но мой php-сервер говорит, что ss2_connect не определен.

Для этой ошибки вы должны установить расширение ssh2 на php вашего сервера.

Используйте встроенную библиотеку SSH. Использование функции scp будет проще, чем инициировать сеанс sftp.

http://www.php.net/manual/en/function.ssh2-scp-send.php

Чтобы использовать system команду, вам необходимо:

  1. Настройка без пароля ssh
  2. Выполнить команду, например scp filename1 userid@hostname:filename2 , проверить man scp . Вы можете сделать то же самое с sftp но с некоторыми другими опциями