Sto scrivendo uno script che trasmetterà un file da un indirizzo Web attraverso il mio server all'utente. Nel suo stato attuale funziona, ma è molto lento.Lo streaming di un file da Internet tramite PHP è lento
Ecco il codice rilevante:
/* Bytes per second */
define('TRANSFER_CAP', 1048576);
/* Hard part... stream the file to the user */
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . $filesize);
$file = fopen($fileLocation, 'rb');
if(!$file) {
// TODO: handle errors
}
while(!feof($file)) {
echo fread($file, TRANSFER_CAP/2);
ob_flush();
flush();
/* Limit the download speed by sleeping */
usleep(500);
}
Questo script è in esecuzione sulla mia macchina locale. Quando richiedo il file nel mio browser (non passando attraverso lo script) ottengo una velocità di download di circa 2,5 MB/s, che è la velocità massima del mio interno. Tuttavia, se eseguo lo script e provo a scaricare lo stesso file, ottengo solo circa 240-250KB/s.
So che non è lo script che limita la velocità di trasferimento, perché ho impostato su 1 MB/s. Inoltre non riesco a pensare a nulla in questo script che produca un sovraccarico che rallenterebbe la velocità.
Edit: Qualcosa di interessante, se faccio questo con readfile()
invece ho ottenere quasi tutta la mia velocità di download:
readfile('http://cachefly.cachefly.net/100mb.test');
quindi deve essere un problema con l'utilizzo di fopen
e fread
?
la velocità di caricamento è la stessa del download? in molti posti del mondo non lo sono. Puoi http://speedtest.net testare. –
Non lo è, ma non sto facendo alcun caricamento in questo script. Sto semplicemente scaricando il file, ma per qualche motivo è molto più lento che se scarico il file direttamente attraverso il mio browser. –
scusami frainteso. se non è un file di grandi dimensioni, prova \t file_get_contents() invece –