tiempo script maximum max_input_time max_execution_time ini_set espera change php

php - script - Diferencia entre set_time_limit() y ini_set(''max_execution_time'',...)



php maximum execution (5)

¿Hay alguna diferencia real entre estas dos líneas de código?

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


Ambos modos "set_time_limit (5)" y "ini_set (''max_execution_time'', ''5'')" restablecen el tiempo, un ejemplo práctico y claro:

//----------------------------------------------------------- //test "max_execution_time": ini_set(''max_execution_time'', 5); for ($i=0; $i<3; $i++) { sleep(1); } ini_set(''max_execution_time'', 5); for ($i=0; $i<3; $i++) { sleep(1); } echo ''<br/>''; echo ''done with max_execution_time''; //----------------------------------------------------------- //test "set_time_limit": set_time_limit(5); for ($i=0; $i<3; $i++) { sleep(1); } set_time_limit(5); for ($i=0; $i<3; $i++) { sleep(1); } echo ''<br/>''; echo ''done with set_time_limit'';

Todo "para" se completa con éxito, esto indica que la hora se restableció en todos los casos, saludos

Ese código solo es verdadero en Windows. El tiempo de suspensión en php linux no consume tiempo de ejecución, por ejemplo, en Linux:

<?php set_time_limit(2); for($i=0; $i<10; $i++) { echo ("$i /n"); sleep(1); }

`se mostrará

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

pero el mismo código en Windows con configuración predeterminada mostrará

1 | 2


De acuerdo con el manual php, set_time_limit () reiniciará el temporizador de ejecución cuando se llame. No creo que ini_set () tenga el mismo efecto secundario, que sería la diferencia entre los dos.

Consulte http://php.net/manual/en/function.set-time-limit.php para obtener más información.

Actualización: desde que examiné varias partes del código fuente php (incluido el referido por la respuesta de Mario), mi conclusión es que ini_set () y set_time_limit () son precisamente equivalentes.

ini_set () realmente restablece el temporizador (aunque todavía no sé cómo funciona cada función para reiniciarlo, tendría que buscar la función que mata al script cuando el temporizador finaliza para resolverlo).


Mirando la source actual:

/* {{{ 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() es simplemente un contenedor de conveniencia alrededor de la llamada ini_set() . Ni siquiera parece realizar el reinicio anunciado del temporizador. (Pero supongo que el "temporizador" en realidad no es una entidad separada, pero el valor ini mismo se usa como tal).


No, no hay.

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

Con respecto al reinicio del temporizador, se restablece en ambos casos:

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'';


Una pequeña diferencia a tener en cuenta es la forma en que se comportan en caso de falla:

  • set_time_limit() no devuelve nada por lo que no puede usarlo para detectar si tuvo éxito. Además, arrojará una advertencia:

    Advertencia: set_time_limit (): no se puede establecer el límite de tiempo en modo seguro

  • ini_set() devuelve FALSE en caso de error y no dispara advertencias.

En la práctica, no debería ser una gran oferta ya que el modo seguro es supuestamente la única situación que puede causar un error y la característica ya está en desuso.

Aparte de eso, la función es solo una envoltura para el cambio de propiedad.