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";
}
}
我想每上传 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";
}
}