Я использую ssh2_scp_send для передачи файла с одного сервера на другой через SFTP. Хотя я могу подтвердить доступ к удаленному серверу и передать файлы с помощью приложения с графическим интерфейсом (FileZilla), мой вызов ssh2_scp_send не выполняется.
Я думаю, что это может быть из-за того, что я не знаю (и не могу легко узнать) полный путь к удаленному серверу. Я предположил, что если я просто передам имя файла, то по умолчанию к родительскому каталогу у пользователя будет доступ.
$conn = ssh2_connect('domain', 22);
$auth = ssh2_auth_password($conn, 'user', 'password');
if ($auth) {
//send the file
$send = ssh2_scp_send($conn, $file, $data['xml_filename']);
}
Я пытался с помощью ssh2_exec($ssh_conn, 'ls -la');
извлечь каталог и попытаться выяснить местоположение, но это не удается (учетные данные доступа, которые я имею, не разрешают команды SSH кроме SFTP).
Мои вопросы:
ssh2_scp_send
не делает SFTP — он делает SCP. Вы не можете сделать SCP без доступа к оболочке.
Если вы настаиваете на использовании libssh2 vs phpseclib, вам придется использовать ssh2.sftp://
fopen обертка, а затем сделать fwrite()
или же fputs()
,
Что касается получения полного удаленного пути по умолчанию … ssh2_sftp_realpath('.')
должен сделать свое дело.
Других решений пока нет …