这是我的功能:
curl_setopt( $curl, CURLOPT_PROGRESSFUNCTION, function ( $resource, $download_size, $downloaded_size, $upload_size, $uploaded_size) use ($array)
{
static $previousProgress = 0;
if ( $download_size == 0 ) {
$progress = 0;
} else {
$progress = round( $downloaded_size * 100 / $download_size );
}
如您所见,我在函数末尾用use
插入了自己的变量。
我想做的只是在else
条件之后回显此行
echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') ';
我尝试过诸如
static $previousProgress = 0;
$count = $previousProgress++;
} else {
if ($count == 1) { echo echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }
$progress = round( $downloaded_size * 100 / $download_size );
}
但是,在达到else
条件之前,此功能已经运行了未知次数(有时50次,有时60次)。
我当然可以做到
static $previousProgress = 0;
$count = $previousProgress++;
if ($count == 1) { echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }
它只回显一次。.但问题是CURL
没有设置$downloaded_size
或$download_size
变量并显示为0 bytes
-因此需要处于else状态。
我尝试使用true
/ false
变量,因为通常会在for
或foreach
循环中输出一次,但是由于函数只是递归运行,直到超时,该功能再次重新开始,这不起作用。
正如我所说,我可以在此函数中插入变量数组以帮助我...但是由于函数重新启动并每次都重新运行,因此我不确定如何做到这一点。
尝试了其他随机的东西,但是我显然缺少了一些东西。如何在重复功能中仅回显一次下载大小?
答案 0 :(得分:1)
静态布尔变量应该可以执行您想要的操作。
static $firstTime = true;
if ($firstTime) {
echo "something";
$firstTime = false;
}
您的代码存在问题,可能是因为您使用的是后递增。如果$previousProgress
是0
,则行:
$count = $previousProgress++;
将$count
设置为0
的同时将$previousProgress
设置为1
(旧值)。因此,if ($count == 1)
条件直到 second 迭代才成立。
如果您使用++$previousProgress
,则会将它们都设置为1
。那就是前增加和后增加之间的区别。