Поместите файл на SFTP-сервер

#php #sftp #fopen #wrapper

#php #sftp #открыть #оболочка

Вопрос:

Я бы хотел поместить файл на сервер STFP после аутентификации с помощью открытого ключа (не пароля). Работает SFTP вручную в командной строке. Во-первых, я не могу использовать phpseclib. ‘allow_url_fopen’ = 1 в моем PHP.ini

stream_get_wrappers() выдает мне: https,ftps,compress.zlib,compress.bzip2,php,file,glob,data,http,ftp,phar,ssh2.shell,ssh2.exec,ssh2.tunnel,ssh2.scp,ssh2.sftp,zip

все работает (по порядку: ssh2_connect, ssh2_auth_pubkey_file, ssh2_sftp), но этот код не работает:

 $sftp = ssh2_sftp($connection);
$dest = 'test.txt';
--> $sftpStream = fopen('ssh2.sftp://'.$sftp.$dest, 'w'); <---
PHP Warning:  fopen(ssh2.sftp://Resource id #32test.txt): failed to open stream: 
  

Есть идеи?

Спасибо S.

Комментарии:

1. Вы выполняете этот код с тем же пользователем, который, по вашим словам, работает в командной строке? Если вы запускаете эту страницу через веб-сервер, она выполняется от имени того же пользователя процесса веб-сервера (обычно www-data в debian / ubuntu или httpd в rhel / centos)

Ответ №1:

Простая ошибка: вы забыли / между $resource amp; $dest . Итак, это сработает:

 $sftpStream = fopen('ssh2.sftp://'.$sftp.'/'.$dest, 'w');
  

.. при условии, что у вас есть доступ на запись в корень вашей файловой системы. Возможно, от вас потребуется указать полный путь к файлу, помимо выполнения cwd по ssh-соединению, мне еще предстоит найти способ поместить файл в каталог по умолчанию после подключения.

Ответ №2:

phpseclib использует fsockopen, который allow_url_fopen не должен действовать. разрешить_url_fopen предназначено для таких вещей, как file() и file_get_contents() — не для fsockopen().