2017-03-06 1 views
1

j'écrire un script php nommé « download.php » pour pousser les fichiers au client,les performances de php fread et l'écho est très mauvaise

$fd = fopen($path, "rb"); 
if ($fd === false) { 
    echo "404 file not found"; 
    return false; 
} 

Header("Content-type: image/png"); 

while (!feof($fd)) 
{ 
    $buf = fread($fd, 1024); 
    if ($buf === false) { 
     break; 
    } 
    echo $buf; 
} 

fclose($fd); 

Lorsque je teste sur le chrome pour télécharger une image 4M, il sera consomme 1,4s. le serveur Apache est sur mon PC. si je mets l'image dans www/et la télécharge directement, ça ne consomme que 44ms.

J'ai essayé d'augmenter la taille de la fread, mais cela améliore juste un peu les performances.

+0

Au lieu de lire et sortir des morceaux dans une boucle, essayez simplement utiliser readfile. – CBroe

+0

@CBroe readfile consommera 643ms mieux que fread puis echo, mais encore très long, et aussi readfile ne supporte pas le téléchargement partiel, y at-il une meilleure méthode? – yuanjianpeng

+0

Consomme quoi ...? – CBroe

Répondre

0

fpassthru (fd $) est un moyen de transmettre beaucoup plus efficace le contenu d'un flux à php: // sortie sans charger tout le contenu du fichier dans la mémoire