Non so davvero se si sta tentando di fare un preventivo o di fornire un feedback "live" all'utente.
Se si sta facendo una stima, penso che si può semplicemente andare al percorso del sistema operativo e fare un "exec" (come @kost suggerito) che vi dirà il carico corrente. Non c'è bisogno di pensarlo troppo!
Quindi, passiamo alla soluzione live :)!
Prima di tutto, dare un'occhiata a ReactPHP (http://reactphp.org/) e quindi all'implementazione dei flussi di ReactPHP (https://github.com/reactphp/stream).
L'idea sarebbe quella di creare un flusso leggibile in cui si possano leggere blocchi di dati dalla fonte (DropBox?) E, come si fa, si continuerà a calcolare il tempo rimanente e lo si scrive e il flusso scrivibile che potrebbe essere un Web Socket per esempio.
Ecco un piccolo esempio la lettura da un grande file locale, calcolando il% e iscritto al 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();
Nota che tutto quello che avrebbe bisogno di fare è cambiare l'ingresso del flusso leggibile ed il output del flusso writabble.
Inoltre, è possibile reindirizzare il flusso leggibile a un file (che in seguito verrà caricato su youtube) o, meglio ancora, se lo consente lo youtube, basta collegarlo a YouTube (sarebbe fantastico: D).
EDIT l'aggiunta di alcuni dei miei commenti per la visibilità:
dal ReactPHP è sostanzialmente una copia spudorata di NodeJS, il concetto di il codice e l'idea che ho postato potrebbe essere facilmente essere implementato in NodeJS (il codice dovrebbe anche assomigliarsi). Con questo non sto cercando di dire ReactPHP è peggio o meglio :) Penso solo che tu possa ottenere lo stesso risultato con Node e la loro documentazione sia MOLTO migliore, con ReactPHP ti troverai a scavare nel codice per capire cose su.
Penso che il core di ReactPHP sia abbastanza stabile ma capisco il vostro problema . Detto questo, se dovessi provare a usare il nostro NodeJS. Se conosci le nozioni di base di JS, dovrebbe essere praticamente la stessa curva di apprendimento che avresti con ReactPHP (se non di meno, dal momento che lo è più risorse là fuori per Node che ReactPHP).
Quindi, si desidera fornire un feedback in tempo reale sul progresso (che si tratti di velocità, restante kb, ecc.)? Perché penso che ReactPHP sarebbe lo strumento giusto :) Se sì, potrei provare un piccolo esempio. Altrimenti, se tutto ciò che vuoi è di fare una stima in base al carico corrente, fai quello che @kost ha detto e non pensarlo troppo) –