379 votes

Le suivi du délai d'exécution des scripts en PHP

PHP est évidemment le suivi de la quantité de temps CPU qu'un script est utilisé (pour faire respecter le max_execution_time limite). Est-il un moyen d'obtenir l'accès à l'intérieur du script? J'aimerais inclure certains enregistrement avec mes tests sur la façon d'UC a été brûlée dans le PHP (le temps n'est pas incrémenté lorsque le script est assis et d'attendre pour la base de données).

Mise à jour: voulais Juste préciser que c'est sur une machine Linux.

716voto

talal7860 Points 1127

Si vous avez besoin de l'horloge murale, plutôt que le PROCESSEUR, temps d'exécution, il est simple à calculer:

//place this before any script you want to calculate time
$time_start = microtime(true); 

//sample script
for($i=0; $i<1000; $i++){
 //do anything
}

$time_end = microtime(true);

//dividing with 60 will give the execution time in minutes other wise seconds
$execution_time = ($time_end - $time_start)/60;

//execution time of the script
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

Notez que cette période que PHP est assis en attente de ressources externes, telles que des disques ou des bases de données, ce qui n'est pas utilisé pour max_execution_time.

278voto

phihag Points 89765

Sur unixoid systèmes, vous pouvez utiliser getrusage, comme:

// Script start
$rustart = getrusage();

// Code ...

// Script end
function rutime($ru, $rus, $index) {
    return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000))
     -  ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000));
}

$ru = getrusage();
echo "This process used " . rutime($ru, $rustart, "utime") .
    " ms for its computations\n";
echo "It spent " . rutime($ru, $rustart, "stime") .
    " ms in system calls\n";

Notez que vous n'avez pas besoin de calculer une différence, si vous êtes de frai php instance pour chaque test.

152voto

Squirtle Points 1169

Version plus courte de talal7860 réponse

<?php
// At start of script
$time_start = microtime(true); 

// Anywhere else in the script
echo 'Total execution time in seconds: ' . (microtime(true) - $time_start);

Comme l'a souligné, c'est la "wallclock temps" pas "de temps cpu'

73voto

joan16v Points 161

La façon la plus simple:

<?

$time1 = microtime(true);

//script code
//...

$time2 = microtime(true);
echo "script execution time: ".($time2-$time1); //value in seconds

?>

47voto

Daniel Dzussa Points 149
<?php
// Randomize sleeping time
usleep(mt_rand(100, 10000));

// As of PHP 5.4.0, REQUEST_TIME_FLOAT is available in the $_SERVER superglobal array.
// It contains the timestamp of the start of the request with microsecond precision.
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

echo "Did nothing in $time seconds\n";
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X