Esta no es una de las preguntas habituales si se cuenta el tiempo de espera por tiempo de espera o cosas por el estilo. Bien, este es el problema: he establecido max_execution_time para PHP como 15 segundos e idealmente esto debería agotar el tiempo cuando cruza el límite establecido, pero no es así. Apache se ha reiniciado después del cambio al archivo php.ini y un ini_get ('max_execution_time') está bien. A veces, el script se ejecuta hasta 200 segundos, lo cual es una locura. No tengo comunicación de base de datos de ningún tipo. Todo lo que hace el script es buscar archivos en el sistema de archivos Unix y, en algunos casos, redirigirlos a otra página JSP. No hay sleep() en el script.PHP max_execution_time no timeout
que calcular el tiempo total de ejecución del script PHP como esto:
Al comienzo de la secuencia de comandos puse:
$_mtime = microtime();
$_mtime = explode(" ",$_mtime);
$_mtime = $_mtime[1] + $_mtime[0];
$_gStartTime = $_mtime;
y la hora de finalización ($ _ gEndTime) se calcula de manera similar.
El tiempo total se calcula de una función de desconexión que me he registrado:
register_shutdown_function('shutdown');
.............
function shutdown()
{
..............
..............
$_total_time = $_gEndTime - $_gStartTime;
..............
switch (connection_status())
{
case CONNECTION_NORMAL:
....
break;
....
case CONNECTION_TIMEOUT:
....
break;
......
}
}
Nota: no puedo usar $ _SERVER [ 'REQUEST_TIME'] porque mi versión de PHP es incompatible. Eso apesta, lo sé.
1) Bueno, mi primera pregunta, obviamente, es ¿por qué se ejecuta mi script PHP incluso después del límite establecido de tiempo de espera?
2) Apache tiene la directiva Timeout, que es de 300 segundos, pero el binario de PHP no lee la configuración de Apache y esto no debería ser un problema.
3) ¿Existe la posibilidad de que algo esté enviando PHP a un modo de suspensión?
4) ¿Estoy calculando el tiempo de ejecución de forma incorrecta? ¿Hay una mejor manera de hacer esto?
Estoy perplejo en este momento. Asistentes PHP - por favor ayuda.
Edit: Acabo de descubrir que las operaciones de flujo no son la causa con unos pocos registros. La demora es solo aleatoria dentro del script incluso cuando no se realizan operaciones de transmisión. El cambio de contexto puede ser la razón. Pero todavía no tengo una respuesta clara. Miré Real max_execution_time for PHP on linux pero no estoy seguro de querer probarlo. ¿Cualquier otra sugerencia?
Creo que las operaciones del sistema de archivos tampoco se cuentan en los cálculos de límite de tiempo. – lonesomeday
Ya sabes, puedes usar 'microtime (true)' para recuperar un 'float' de inmediato ... – deceze
@lonesomeday: ¿Estás seguro de eso? –