php恢复ftp上传与curl多

时间:2018-02-01 22:01:36

标签: php curl curl-multi

我似乎无法使用curl恢复FTP上传。它总是将完整的本地文件附加到部分上载的远程文件,导致远程文件比本地文件大。

我想知道我是否遗漏了某个选项,或者curl_multi是否与此有关?

$resume = true

$filesize是远程文件的当前大小(以字节为单位),使用单独的curl ftp请求获取。

我已尝试开启和关闭CURLOPT_FTPAPPEND选项。

任何帮助都会很棒,因为我正试图弄明白这一点:“

...

$ch[$i] = curl_init();

$file = fopen($local_file, 'rb');

if ($resume)
{           
        curl_setopt($ch[$i], CURLOPT_RESUME_FROM, $filesize);

        // move file position forward to resume
        fseek($file, $filesize);
}

curl_setopt($ch[$i], CURLOPT_URL, $remote_file);
curl_setopt($ch[$i], CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch[$i], CURLOPT_USERPWD, "{$ftp['user']}:{$ftp['pass']}");
curl_setopt($ch[$i], CURLOPT_UPLOAD, true);
curl_setopt($ch[$i], CURLOPT_HEADER, false);
curl_setopt($ch[$i], CURLOPT_INFILE, $file);
curl_setopt($ch[$i], CURLOPT_INFILESIZE, filesize($local_file));

curl_multi_add_handle($mh, $ch[$i]);

...

已更新

由于谷歌搜索的时间没有帮助,我想出了一个简单的工作。

使用curl恢复上传的帖子不多,所以我希望这可以帮助别人节省时间。

使用fseek()只是一行,但通常就是这样;)

1 个答案:

答案 0 :(得分:0)

<强>已更新

由于谷歌搜索的时间没有帮助,我想出了一个简单的工作。

使用curl恢复上传的帖子不多,所以我希望这可以帮助别人节省时间。

在调用fseek()

之前,使用curl_setopt($ch[$i], CURLOPT_INFILE, $file);移动文件位置

...

$ch[$i] = curl_init();

$file = fopen($local_file, 'rb');

if ($resume)
{           
        curl_setopt($ch[$i], CURLOPT_RESUME_FROM, $filesize);

        // move file position forward to resume
        fseek($file, $filesize);
}

curl_setopt($ch[$i], CURLOPT_URL, $remote_file);
curl_setopt($ch[$i], CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch[$i], CURLOPT_USERPWD, "{$ftp['user']}:{$ftp['pass']}");
curl_setopt($ch[$i], CURLOPT_UPLOAD, true);
curl_setopt($ch[$i], CURLOPT_HEADER, false);
curl_setopt($ch[$i], CURLOPT_INFILE, $file);
curl_setopt($ch[$i], CURLOPT_INFILESIZE, filesize($local_file));

curl_multi_add_handle($mh, $ch[$i]);

...