PHP - CURLOPT_BUFFERSIZE 已忽略

PHP - CURLOPT_BUFFERSIZE ignored

我想每上传 X 字节执行一次回调函数,但我不明白为什么 php 总是更频繁地调用回调函数。

这是我的代码:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$converter); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'callback');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 10485764);
$result=curl_exec ($ch); 

//$info = curl_getinfo($ch);
//print_r($info);
curl_close ($ch);

function callback($resource, $download_size, $downloaded, $upload_size, $uploaded) {
    echo $uploaded . '/' . $upload_size ."\r";
}

要上传的文件大约 68 MB,回调函数应该执行 68 次(10485764 字节 = 1 MB),但执行了大约 9k 次...

该函数应该将进度写入 mysql 数据库,这就是为什么我需要它来缩短执行时间。

正如 Barman 所说,CURLOPT_BUFFERSIZE 与下载有关,不适用于上传。

解决方案是检查大小,只有在上传了一定数量的字节后才做一些事情。

示例:

$i= 0;
$up = 0;

function callback($resource, $download_size, $downloaded, $upload_size, $uploaded) {
        global $i, $up;
        if ($uploaded > ($up + 1048576)){
            $i++;
            $up = $uploaded + 1048576;
            echo $i . ' => ' . formatBytes($uploaded) . '/' . formatBytes($upload_size) ."\r";
        }
}