У меня возникли проблемы с использованием 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.
Чтобы использовать system
команду, вам необходимо:
scp filename1 userid@hostname:filename2
, проверить man scp
. Вы можете сделать то же самое с sftp
но с некоторыми другими опциями