【问题标题】:Cannot delete a SFTP file using cURL无法使用 cURL 删除 SFTP 文件
【发布时间】:2020-01-31 18:36:04
【问题描述】:

我在删除或使用带有 cURL 的 rm 时遇到了一个奇怪的问题。当我尝试在 FileZilla 上使用相同的凭据删除或移动文件时,它工作得很好,但在通过 cURL 运行它时不起作用。我的代码有什么问题吗?

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $sftp_server.$file_name);
    curl_setopt($ch, CURLOPT_USERPWD,$user_pwd);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch, CURLOPT_PROTOCOLS,CURLPROTO_SFTP);
    curl_setopt($ch, CURLOPT_QUOTE, array('rm ~/folder/' . $file_name));

    curl_exec($ch);

    curl_close($ch);

我也没有任何问题使用 cURL 下载 SFTP 文件。

当我var_dump() curl 结果时,我得到一个权限被拒绝“curl: (21) rm command failed: Permission denied”。

感谢您的帮助!

【问题讨论】:

  • 如果使用与 FileZilla 相同的凭据也能正常工作,那么它看起来像是权限问题。
  • @Triby 这就是我的想法,但权限在什么级别? PHP服务器?我应该寻找什么?
  • 我认为是关于服务器权限(Apache,IIS,nginx),通常只有root user和文件所有者可以删除文件。
  • “不起作用”到底是什么意思?你得到什么样的回应?
  • @ArSeN 它不会删除文件,并显示权限被拒绝,但是当我使用 FileZilla 时我没有收到错误,我能够成功删除文件。

标签: php curl sftp


【解决方案1】:

我能够通过使用 ssh2_sftp 而不是 cURL 以不同的方式连接到 SFTP,从而找到解决方案。如果有人可以从中受益,这是我使用的代码的 sn-p:

$connection = ssh2_connect('SFTP-Server-name', 22);
ssh2_auth_password($connection, $username, $password);
$sftp = ssh2_sftp($connection);

ssh2_sftp_unlink($sftp, $file_path.$file_name);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多