У меня есть этот код и его файл для скачивания. Но я хочу показать индикатор при загрузке файла с внешнего сервера. В моем существующем коде отображается индикатор выполнения, но он не эффективен (например, если я пытаюсь загрузить два файла мультимедиа, одно видео и другое аудио, а размер видео больше размера аудио, аудио заканчивается первым, а индикатор выполнения также показывает 100% падает до 50%, поскольку видео все еще загружается). Я имею в виду, что это на самом деле показывает два прогресса, и мне нужен один. Если бы я мог получить среднее значение в два процента прогресса, было бы лучше. Любое предложение по этому поводу будет принята с благодарностью.
function define_progress_callback($i) {
global $conn;
curl_setopt($conn[$i], CURLOPT_PROGRESSFUNCTION, function ($resource,$download_size, $downloaded, $upload_size, $uploaded)
{
if($download_size > 0)
$progress = round($downloaded / $download_size * 100);
echo '<script language="javascript">$(".loader").loader("setProgress", '.$progress.');</script>';
echo str_pad("",1024," ");
flush();
usleep(20000);
});
}
$urls = array("http:/example.com/file.mp3",
"http:/example.com/file.mp4");
$save_to='./tmp/';
$conn = array();
$fp = array();
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$g = $save_to . basename($url);
$conn[$i]=curl_init($url);
$fp[$i]=fopen ($g, "wb");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // No certificate
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt ($conn[$i], CURLOPT_FILE, $fp[$i]);
curl_setopt ($conn[$i], CURLOPT_HEADER ,0);
curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,60);
curl_setopt ($conn[$i], CURLOPT_MAXCONNECTS, 10);
curl_setopt($conn[$i], CURLOPT_NOPROGRESS, false);
define_progress_callback($i);
curl_multi_add_handle ($mh,$conn[$i]);
}
do {
$n=curl_multi_exec($mh,$active);
}
while ($active);
foreach ($urls as $i => $url) {
curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]);
fclose($fp[$i]);
}
curl_multi_close($mh);
Задача ещё не решена.
Других решений пока нет …