J'ai écrit une fonction qui vérifie la durée d'exécution restante.
Avertissement: Le comptage du temps d'exécution est différent sur Windows et sur la plate-forme Linux.
/**
* Check if more that `$miliseconds` ms remains
* to error `PHP Fatal error: Maximum execution time exceeded`
*
* @param int $miliseconds
* @return bool
*/
function isRemainingMaxExecutionTimeBiggerThan($miliseconds = 5000) {
$max_execution_time = ini_get('max_execution_time');
if ($max_execution_time === 0) {
// No script time limitation
return true;
}
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// On Windows: The real time is measured.
$spendMiliseconds = (microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]) * 1000;
} else {
// On Linux: Any time spent on activity that happens outside the execution
// of the script such as system calls using system(), stream operations
// database queries, etc. is not included.
// @see http://php.net/manual/en/function.set-time-limit.php
$resourceUsages = getrusage();
$spendMiliseconds = $resourceUsages['ru_utime.tv_sec'] * 1000 + $resourceUsages['ru_utime.tv_usec']/1000;
}
$remainingMiliseconds = $max_execution_time * 1000 - $spendMiliseconds;
return ($remainingMiliseconds >= $miliseconds);
}
utilisant:
while (true) {
// so something
if (!isRemainingMaxExecutionTimeBiggerThan(5000)) {
// Time to die.
// Safely close DB and done the iteration.
}
}
Si la valeur à la fin être soustrait de la valeur au début du script? Je reçois des chiffres vraiment bizarres si je ne le fais pas. Comme une page qui a pris 0.05 secondes pour générer c'est dire qu'il a fallu 6s de temps CPU ... est-ce correct? Voir ici: http://blog.rompe.org/node/85 –
@Darryl Hein: Oh, et vous obtenez des résultats bizarres parce que vous utilisez la concaténation de chaînes au lieu de l'addition;) – phihag
Depuis * .tv_usec est en microsecondes (1 000 000 par second) et * .tv_sec est en secondes, n'avez-vous pas besoin de multiplier par 1000000 (ou 1e6) au lieu de 1000? –