70 votes

Différence entre set_time_limit() et ini_set('max_execution_time', ...)

Y a-t-il une réelle différence entre ces deux lignes de code ?

 ini_set('max_execution_time', 20*60);
set_time_limit(20*60);

41voto

mario Points 76989

En regardant la source actuelle :

 /* {{{ proto bool set_time_limit(int seconds)
   Sets the maximum time a script can run */
PHP_FUNCTION(set_time_limit)
{
    zend_long new_timeout;
    char *new_timeout_str;
    int new_timeout_strlen;
    zend_string *key;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_timeout) == FAILURE) {
        return;
    }

    new_timeout_strlen = zend_spprintf(&new_timeout_str, 0, ZEND_LONG_FMT, new_timeout);

    key = zend_string_init("max_execution_time", sizeof("max_execution_time")-1, 0);
    if (zend_alter_ini_entry_chars_ex(key, new_timeout_str, new_timeout_strlen, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC) == SUCCESS) {
        RETVAL_TRUE;
    } else {
        RETVAL_FALSE;
    }
    zend_string_release(key);
    efree(new_timeout_str);
}
/* }}} */

set_time_limit() n'est en effet qu'un emballage pratique autour de l'appel ini_set() Il ne semble même pas effectuer la réinitialisation de la minuterie annoncée. (Mais je suppose que le "timer" n'est en fait pas une entité distincte, mais la valeur ini elle-même est utilisée comme telle.)

23voto

webbiedave Points 28781

Non, il n'y en a pas.

 echo ini_get('max_execution_time'); // 30
set_time_limit(100);
echo ini_get('max_execution_time'); // 100

Concernant la réinitialisation de la minuterie, elle est réinitialisée dans les deux cas :

 ini_set('max_execution_time', 10);

for ($i=0; $i<50000000; $i++) {

}

ini_set('max_execution_time', 10); // timer is reset, just as it would be with set_time_limit

for ($i=0; $i<50000000; $i++) {

}

echo 'done';

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