Mesurer le temps d'exécution du script PHP qui sert de contenu web

Je suis en essais, le temps d'exécution de certains scripts PHP dont le but est de servir du contenu web sur mon site web.

Cependant j'obtiens des résultats incohérents.

Le temps d'exécution est mesuré et enregistré dans un fichier texte.

Un des scripts de coeur de lecture d'une image jpeg à partir du disque et sert au client.

Ici est une version simplifiée du script avec le code:

<?php

//save initial time 
$t1 = microtime(true);

//set header for a jpeg image
header('Content-Type: image/jpeg');

//read a file from the hard drive and send content
//(the real code serves every time a different image based on the request)
readfile( 'the_image.jpg' );

//flush output buffer
flush();
ob_flush();

//save final time
$t2 = microtime(true);

//elapsed time in milliseconds
$te = round( ( $t2 - $t1 ) * 1000 );

//write a line to the log file
$handle = fopen( 'log.txt', 'a' );
fwrite( $handle, $te . "\n" );
fclose( $handle );

Images servis sont à chaque fois différents. Ils sont autour de 100 ko de taille.

Je me connecte au site web à partir d'un emplacement distant et le chargement de certaines images.

Quand je regarde le fichier journal temps d'exécution en millisecondes ressemble à ceci

45
63
40
3
3
67
40
3
5

Je m'attends (mais sans doute que je me trompe sur ce) que lorsque le script PHP envoie des données au client d'exécution attend jusqu'à ce que les données ont été envoyées.

Donc, dans le code ci-dessus, $t2 est récupérée lorsque l'image a été complètement envoyée au client.

Alors pourquoi, parfois, l'image prend juste 3 ms à être envoyé?
3 ms est impossible à réaliser compte tenu de la connexion internet, je suis en utilisant lorsqu'il est connecté au serveur.

Est PHP envoi de toutes les données instantanément vers le serveur web (c'est nginx dans mon cas) et puis ce dernier prend son temps pour envoyer les données au client?


Mise à jour

Il semble que le problème est lié à nginx faire tampon.

Lorsque cela arrive nginx "mange" la mémoire tampon de sortie de PHP aussi vite que possible, puis envoie le contenu au client.

Cela permet à l'PHP instance d'être fermé plus tôt.

Le script PHP ne voit pas le temps nécessaire pour transférer le contenu vers le client.

Malheureusement, il semble y avoir aucun moyen de désactiver nginx de mise en mémoire tampon. J'ai trouvé beaucoup de "recettes" googler autour, mais personne ne travaille.

OriginalL'auteur Paolo | 2014-09-01