2012-04-18 134 views
1

我試圖重現下面的命令來上傳通過SFTP文件在我的PHP應用程序來解決PHP捲曲的錯誤CURLE_SSH(79):以上如何使用SFTP時上傳文件

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

命令作品很好(我必須在我的ubuntu盒子上重新編譯libcurl才能使它工作)。但是,當我嘗試使用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),我不知道如何解決。你有沒有遇到這個問題?你怎麼修好它的?有任何想法嗎?

謝謝!

+0

你在什麼操作系統上使用什麼curl版本和什麼libssh2版本?您正在使用哪個PHP版本以及PHP curl擴展的哪個版本? – hakre 2012-04-18 16:15:09

+0

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協商國際化域名IPv6大文件NTLM SSL libz – dabito 2012-04-18 17:46:54

+0

通過ubuntu 11.10與PHP 5 ..生病讓我回到你的curl擴展版本 – dabito 2012-04-18 17:47:24

回答

1

這意味着libcurl從「SSH層」(libssh2)中獲得了某種錯誤。如果您啓用VERBOSE,則可能會看到更多詳細信息。

您使用的是相當陳舊的libcurl和libssh2版本,因此您可以通過簡單地將這些問題升級到現代版本來解決此問題,這是不可想象的。

+0

我會做到這一點,看看它讓我。非常感謝! – dabito 2012-04-20 17:08:16

+1

@dabito您使用的是什麼版本的libssh2/1.2.2 ... – ravisoni 2013-01-05 07:38:26

+0

很久以前,這個問題被問到,我不再有權訪問有問題的環境「/添加-vvv連接幫助。 – dabito 2013-02-26 19:14:14