Вот моя функция:
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 );
}
Но в этот момент функция уже запустила неизвестныйколичество раз (50 или 60 иногда), прежде чем оно достигнет условия else
.
Я, конечно, могу сделать это
static $previousProgress = 0;
$count = $previousProgress++;
if ($count == 1) { echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }
И это работает, чтобы эхо только один раз ..но проблема в CURL
не в том, чтобы переменные $downloaded_size
или $download_size
были установлены и отображались как 0 bytes
- поэтому он должен быть в другом состоянии.
Я пытался использовать true
/ false
переменных, как это обычно делается для вывода чего-то один раз в цикле for
или foreach
, но поскольку функция просто рекурсивно работает до истечения времени ожидания, функция запускается снова, и это не работает.
Как я уже сказал, я могу вставить массив переменных в эту функцию, чтобы помочь мне... но я не уверен, как я могу это сделать, учитывая, что функция запускается снова и запускается каждый раз ..
Пробовал другие случайные вещи, но я явно что-то упустил.Как я могу повторить размер загрузки только один раз в повторяющейся функции?