#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().