2012-11-22 75 views
3

如果沒有實際的文件傳輸嘗試,是否可以在libcurl中執行SFTP命令?在沒有實際傳輸的情況下在libcurl中執行SFTP/FTP命令

我將要執行的命令(刪除文件實際上)使用CURLOPT_QUOTE,但在執行操作(和它成功執行,文件將被刪除)捲曲試圖上傳或下載文件後(根據CURLOPT_UPLOAD),所以我得到CURLE_REMOTE_FILE_NOT_FOUND錯誤錯誤代碼。

我到目前爲止所嘗試的 - 沒有設置URL導致「格式錯誤的URL錯誤」,設置CURLOPT_CONNECT_ONLY導致報價不被執行。有沒有標準的方法?

curl_global_init(CURL_GLOBAL_DEFAULT); 

char temp[2000]; 
_snprintf(STRPARAM(temp),"%s://%s:%d/%s","sftp",m_url,m_port,a_ftpPath); 
curl_easy_setopt(m_curl, CURLOPT_URL,temp); 
_snprintf(STRPARAM(temp),"%s:%s",m_name,m_pass); 
curl_easy_setopt(m_curl, CURLOPT_USERPWD, temp); 
curl_easy_setopt(m_curl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD); 

curl_easy_setopt(m_curl, CURLOPT_UPLOAD, 0L); 
curl_easy_setopt(m_curl, CURLOPT_READFUNCTION, NULL); 
curl_easy_setopt(m_curl, CURLOPT_NOBODY, 1L); 
curl_easy_setopt(m_curl, CURLOPT_HEADER, 1L); 

struct curl_slist *headerlist=NULL; 
_snprintf(STRPARAM(temp),"rm /%s",a_ftpPath); 
headerlist = curl_slist_append(headerlist, temp); 
curl_easy_setopt(m_curl, CURLOPT_QUOTE, headerlist); 

m_res = curl_easy_perform(m_curl); 

curl_easy_setopt(m_curl, CURLOPT_QUOTE, NULL); 
curl_easy_setopt(m_curl, CURLOPT_HEADER, 0L); 
curl_easy_setopt(m_curl, CURLOPT_NOBODY, 0L); 
curl_slist_free_all (headerlist); 

curl_global_cleanup(); 

回答

4

CURLOPT_NOBODY是要求沒有「身體」被轉移的關鍵。

+0

隨着CURLOPT_NOBODY集libcurl的報價不執行,以及,文件保持不變 – elevener

+0

這可能是要考慮的一個bug ...... –

+0

看起來,他們認爲這是正常的,報價沒有傳輸是不可能的:(Curl faq http://curl.haxx.se/docs/faq.html#How_do_I_tell_curl_to_run_custom不得不繞過該問題 – elevener

1

你可以嘗試phpseclib, a pure PHP SFTP implementation

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

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

$sftp->delete('filename.remote'); // doesn't delete directories 
// recursive delete 
$sftp->delete('dirname.remote', true); // deletes a directory and all its contents 
?> 
+1

對不起,需要SFTP for win32 C++應用程序,所以PHP庫不適合 – elevener

相關問題