我似乎无法使用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()
只是一行,但通常就是这样;)
答案 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]);
...