libssh2 — PHP SSH2 операции сбой при попытке загрузить файл на сервер

В настоящее время я борюсь с использованием встроенных библиотек SSH2 для PHP (работает версия 5.5). Я пытаюсь загрузить файл на SFTP-сервер, так как в заголовке указано, но я получаю сообщение об ошибке «сбой потоковой операции».

После попытки отладки самого кода соединение работает, ресурсу sftp правильно присваивается идентификатор, однако при вызове fopen для записи файла непосредственно на удаленный сервер происходит сбой.

// open Live environment if we are not in dev
$connection = ssh2_connect($this->_settings['source_host'], 22);
$authSuccess = ssh2_auth_password($connection, $this-  >_settings['source_user'], $this->_settings['source_password']);
$sftp = ssh2_sftp($connection);

И, наконец, вызов fopen ():

if($operation == 'export') {
$handle = fopen("ssh2.sftp://".$sftp."/remotecopy/IN/".$filename, $mode);
}

Я добавил сообщения отладки в свой собственный код, чтобы проверить, правильно ли используются данные из массива _settings, но я не могу объяснить ошибку потока.

Message:  fopen(): Unable to open ssh2.sftp://Resource id #173/PATH GOES HERE/filename.xxx on remote host

Message:  fopen(ssh2.sftp://Resource id #173/PATH GOES HERE/filename.xxx): failed to open stream: operation failed

Как примечание, файл не существует на удаленном хосте, но, насколько мне известно, режим ‘w’ в PHP fopen () должен создать файл, если он не существует.

Я не могу использовать другую библиотеку PHP, так как весь наш проект использует встроенные библиотеки ssh2, и ответственный сотрудник сказал мне не использовать ее, поскольку она отлично работает везде.

2

Решение

я думаю, тебе было бы легче, если бы ты использовал phpseclib, чистая реализация PHP SFTP. например.

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
exit('Login Failed');
}

// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');
// puts an x-byte file named filename.remote on the SFTP server,
// where x is the size of filename.local
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE);
?>

Одна из приятных вещей в phpseclib — это логирование, так что если это не сработает, вы можете сделать define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX); после включения Net / SFTP.php, а затем сделать echo $sftp->getLog() после того момента, когда это не удается. Это может дать некоторое представление о том, что происходит, если оно все еще не работает.

2

Другие решения

Ответ был прост, у меня был неверно отформатированный путь на удаленном сервере. После проверки моих настроек все работает нормально.

Спасибо всем за подсказки и помощь.

1

По вопросам рекламы [email protected]