Как исправить ошибку PHP curl CURLE_SSH (79) при использовании sftp для загрузки файла

Я пытаюсь воспроизвести следующую команду для загрузки файла через sftp в моем приложении PHP:

curl -T /var/repo/file -u user:password sftp://server.com/folder/

Приведенные выше команды работают просто отлично (хотя мне пришлось перекомпилировать libcurl на моем компьютере с Ubuntu, чтобы заставить его работать). Однако, когда я попытался использовать PHP-библиотеку curl, все пошло не так хорошо.

Код, который я использую, следующий:

$ch = curl_init();
$localfile = 'file';
$fp = fopen($localfile, 'r');

curl_setopt($ch, CURLOPT_URL, 'sftp://server.com/folder/');
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'user:password');
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec ($ch);
$error_no = curl_errno($ch);
curl_close ($ch);

if ($error_no == 0) {
    $error = 'File uploaded succesfully.';
} else {
    $error = 'File upload error.';
}
echo $error.' '.$error_no;

Это возвращает ошибку 79: CURLE_SSH (79), которую я не знаю, как исправить. Вы сталкивались с этой проблемой? Как ты это починил? Любые идеи?

Спасибо!


person dabito    schedule 18.04.2012    source источник
comment
Какую версию curl и какую версию libssh2 вы используете в какой операционной системе? Какую версию PHP вы используете и какую версию расширения PHP curl?   -  person hakre    schedule 18.04.2012
comment
curl 7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 libssh2/1.2.2 Протоколы: tftp ftp telnet dict ldap ldaps http файл https ftps scp sftp Возможности: GSS-согласование IDN IPv6 Largefile NTLM SSL libz   -  person dabito    schedule 18.04.2012
comment
Над Ubuntu 11.10 с PHP 5 .. я свяжусь с вами по версии расширения curl   -  person dabito    schedule 18.04.2012


Ответы (1)


Это означает, что libcurl получил какую-то ошибку от «слоя SSH» (libssh2). Если вы включите VERBOSE, вы можете увидеть дополнительные сведения.

Вы используете довольно старые версии libcurl и libssh2, поэтому не исключено, что вы можете решить эту проблему, просто обновив их до современных версий.

person Daniel Stenberg    schedule 19.04.2012
comment
Я сделаю именно это и посмотрю, куда это меня приведет. Большое спасибо! - person dabito; 20.04.2012
comment
Этот вопрос был задан давно, и у меня больше нет доступа к рассматриваемой среде / помогло добавление -vvv к соединениям. - person dabito; 26.02.2013