ial*_*xpw 5 php post curl progress
我目前正在运行一个个人文件上传网站,它大致执行以下操作;
我在第 3 步中遇到问题。目前,当文件上传到网站时,我有一个进度条,我想要另一个百分比来显示 cURL 传输到存储服务器的情况。我已经看到你可以使用 CURLOPT_PROGRESSFUNCTION - 但经过大量搜索后我无法让它工作。
我当前的代码如下;
// Prepare the POST data
$data = array(
'file' => new CurlFile('/path/to/local.zip', 'application/zip', 'uploaded_archive.zip'),
'upload_folder' => 'folder_name'
);
// Send the POST
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com/upload.php");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progressCall');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 160);
curl_setopt($ch, CURLOPT_TIMEOUT, 160);
$res = curl_exec($ch);
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)
这会用进度调用“progressCall”,如下所示进行测试;
// Function to save the output of progress from CURLOPT_PROGRESSFUNCTION
function progressCall($ch, $dltotal, $dlnow, $uptotal, $upnow) {
$progress = "$ch/$dltotal/$dlnow/$uptotal/$upnow";
file_put_contents('tmp/curlupload.txt', 'PERC: ' . $progress . "\n", FILE_APPEND);
}
Run Code Online (Sandbox Code Playgroud)
问题是,我得到下面的输出;
https://gist.github.com/ialexpw/6160e32495d857cc0d8984373f3808ae
PERC: Resource id #15/0/0/0/65532
PERC: Resource id #15/0/0/0/65532
PERC: Resource id #15/0/0/0/131064
PERC: Resource id #15/0/0/0/131064
PERC: Resource id #15/0/0/0/196596
Run Code Online (Sandbox Code Playgroud)
这似乎显示上传量在增加(这没关系),但总上传量为 0。我在网上尝试了很多例子,但我无法弄清楚为什么要上传的总量总是0。我尝试设置一个Content-Length,尽管它是相同的。
如果上述内容有问题,任何帮助将不胜感激。
谢谢!
小智 0
您好,很抱歉两年后的回复,但正在努力!
可以上传,但正如前面提到的,我们在本例中没有总文件大小。
如果可能的话,最简单的方法是在回调函数上获取文件大小,例如全局:
function progressCall($ch, $dltotal, $dlnow, $uptotal, $upnow) {
// You will get this before with | $fsize = filesize($thefile);
global $fsize;
$percent = round($upnow / $fsize * 100);
echo $percent . ' % downloaded';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |