% Всего% Получено% Xferd Средняя скорость Время Время Время Текущая загрузка загрузки Всего затрачено Оставшаяся скорость 100 12,4 млн 100 12,4 млн 0 0 4489k 0 0:00:02 0:00:02 -: -: - 4653k
Приведенный выше вывод CURL из командной строки при загрузке файла. Я запечатлел это с помощью PHP, но мне сложно понять, как использовать pre_match для извлечения выполненного процента.
$handle = popen('curl -o '.VIDEOPATH.$fileName.'.flv '.$url, 'rb');
while(!feof($handle))
{
$progress = fread($handle, 8192);
//I don't even know what I was attempting here
$pattern = '/(?<Total>[0-9]{1,3}\.[0-9]{1,2})% of (?<Total>.+) at/';
//divide received by total somehow, then times 100
if(preg_match_all($pattern, $progress, $matches)){
fwrite($fh, $matches[0][0]."\r\n");
}
}
Как я могу это сделать? Обратите внимание, я понятия не имею, что я делаю с вышеупомянутым preg_match_all!
Спасибо
Обновлять
Благодаря помощи ylebre. У меня это пока есть.
$handle = popen('curl -o '.VIDEOPATH.$fileName.'.flv '.$url.' 2>&1', 'rb');//make sure its saved to videos
while(!feof($handle))
{
$line = fgets($handle, 4096); // Get a line from the input handle
echo '<br>Line'.$line.'<br>';
$line = preg_replace("/s+/", " ", $line); // replace the double spaces with one
$fields = explode(" ", $line); // split the input on spaces into fields array
echo '<br>Fields: '.$fields[0];
fwrite($fh, $fields[0]); // write a part of the fields array to the output file
}
Я получаю этот вывод в браузере:
Строка% Всего% Получено% Xferd Средняя скорость Время Время Время Текущее
Поля: Общая израсходованная оставшаяся скорость при загрузке линии
Поля: Строка 0 1340k 0 4014 0 0 27342 0 0:00:50 -: -: - 0:00:50 27342 41 1340k 41 552k 0 0 849k 0 0:00:01 -: -: - - 0:00:01 1088k 100 1340k 100 1340k 0 0 1445k 0 -: -: - -: -: - -: -: - 1711k
Поля: Линия
Как мне извлечь только процентную часть? Может быть, CURL сможет это сделать сам - хм, задам вопрос по этому поводу.