Nie wiem, czy próbujesz zrobić oszacowanie lub przekazać użytkownikowi "żywą" informację zwrotną.
Jeśli robisz szacunek, myślę, że możesz po prostu pójść drogą OS i wykonać polecenie "exec" (jak zasugerowano @kost), które powie ci bieżące obciążenie. Nie trzeba go przemyśleć!
Więc, przejdźmy do live solution :)!
Przede wszystkim zajrzyj do ReactPHP (http://reactphp.org/), a następnie do implementacji strumieniowej ReactPHP (https://github.com/reactphp/stream).
Chodzi o to, aby stworzyć czytelny strumień, w którym będziesz czytał fragmenty danych ze swojego źródła (DropBox?), A gdy to zrobisz, będziesz obliczał pozostały czas i zapisywał go oraz zapisywalny strumień, który może być na przykład gniazdo sieciowe.
Oto mały przykład odczyt z dużego pliku lokalnego, obliczanie% i piśmie do stdoud:
<?php
require 'vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$read = new \React\Stream\Stream(fopen('hugefile.txt', 'r+'), $loop);
$fileStats = fstat($read->stream);
$totalSize = $fileStats['size'];
$chunkSize = $totalSize/100;
$currChunk = 1;
$write = new \React\Stream\Stream(fopen('php://stdout', 'w+'), $loop);
$totalReadBytes = 0;
$read->on('data', function ($data, $read) use ($write, &$totalReadBytes, $totalSize, &$currChunk, $chunkSize) {
$totalReadBytes += strlen($data);
if($totalReadBytes > ($chunkSize * $currChunk)){
$currChunk = ceil(($totalReadBytes/$totalSize)*100);
$write->write(sprintf('%010d',$totalReadBytes).'/'.sprintf('%010d',$totalSize).' - '.$currChunk.'%'.PHP_EOL);
}
});
$loop->run();
pamiętać, że wszystkie trzeba by zrobić, to zmienić wejście w czytelnej Stream i wyjście strumienia pisywalnego.
Możesz również potokować czytelny strumień do pliku (który później prześlesz na youtube) lub nawet lepiej, jeśli youtube na to pozwoli, po prostu wyłóż go do youtube (to byłoby niesamowite: D).
EDIT dodając kilka moich uwag na widoczność:
od ReactPHP jest po prostu bezczelny kopia NodeJS pojęcie kod i pomysł napisałem może być łatwo realizowane w NodeJS (kod powinien wyglądać podobnie). Z tym nie próbuję powiedzieć ReactPHP jest gorszy lub lepszy :) Po prostu myślę, że możesz osiągnąć ten sam wynik z Węzłem, a ich dokumentacja jest DUŻO lepsza, z ReactPHP przekonasz się, że wkopiesz się w kod, by wymyślić coś na zewnątrz.
Myślę, że rdzeń ReactPHP jest wystarczająco stabilny, ale rozumiem Twój problem z numerem . Biorąc to pod uwagę, jeśli będę tam, to zdecydowanie spróbuję użyć NodeJS . Jeśli znasz podstawy JS, to powinna być praktycznie ta sama krzywa uczenia, którą miałbyś z ReactPHP (jeśli nie mniej, ponieważ tam jest więcej zasobów dla Node niż ReactPHP).
Chcesz więc przekazać informację o postępie na żywo (czy to szybkość, pozostały KB, itp.)? Ponieważ myślę, że ReactPHP byłby właściwym narzędziem :) Jeśli tak, mógłbym udowodnić mały przykład. W przeciwnym razie, jeśli chcesz tylko oszacować na podstawie aktualnego obciążenia, zrób to, co powiedział @kost i nie przemyśleć go;) –