php - 使用sftp上传文件时如何修复PHP curl错误CURLE_SSH(79)

标签 php curl ssh sftp libssh2

我正在尝试重现以下命令,以在我的PHP应用程序上通过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),我不知道如何解决。你遇到这个问题了吗?你怎么修好它的?有任何想法吗?

谢谢!

最佳答案

这意味着libcurl从“SSH层”(libssh2)得到了某种错误。如果启用VERBOSE,则可能会看到更多详细信息。

您正在使用相当老的libcurl和libssh2版本,因此可以简单地通过将它们升级到现代版本来解决此问题,这并非不可想象。

关于php - 使用sftp上传文件时如何修复PHP curl错误CURLE_SSH(79),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10213383/

相关文章:

php - 请求页面时出现错误

amazon-web-services - EC2 实例访问和更改 SSH key 对替换

php - 无法使用用户名 : root, 主机登录:<host_ip>

PHP - 类是否需要与文件同名?

php - 在 codeigniter 迁移中创建外键失败

php - 检测上传的图像有多少种颜色

php - 无法 curl 图像。不知道该怎么办

swift - 如何在 Swift 中执行curl 请求?

php CURL 不适用于动态 URL

git - 如何将 Azure DevOps 存储库镜像到 gitlab 存储库