3

ファイル転送を実際に試行せずにlibcurlでSFTPコマンドを実行することは可能ですか?

CURLOPT_QUOTE を使用してコマンドを実行する (実際にはファイルを削除する) ように設定しましたが、操作を実行した後 (そして、正常に実行され、ファイルが削除された後)、curl が (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

2 に答える 2

4

CURLOPT_NOBODYは、「ボディ」が転送されないように要求するためのキーです。

于 2012-11-22T15:25:46.973 に答える
1

純粋な PHP SFTP 実装である phpseclib を試すことができます。

<?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
?>
于 2012-11-26T06:01:25.407 に答える