Los servidores FastCGI, por ejemplo, imponen un límite de tiempo de ejecución en scripts PHP que no pueden modificarse usando set_time_limit()
en PHP. IIS también lo cree.PHP: Codificación de secuencias de comandos de larga ejecución cuando los servidores imponen un límite de tiempo de ejecución
Escribí un script de importación para una aplicación PHP que funciona bien bajo mod_php pero falla bajo FastCGI (mod_fcgid) porque el script se cancela después de un cierto número de segundos. Todavía no conozco una forma de detectar cuál es tu límite de tiempo en este caso, y aún no he decidido cómo voy a solucionarlo. Hacerlo en pequeños trozos con redirecciones parece una maldición, pero ¿cómo?
¿Qué técnicas usarías al codificar una tarea de larga duración, como una tarea de importación o exportación, donde el servidor puede finalizar una secuencia de comandos individual después de un determinado número de segundos?
Supongamos que está creando una secuencia de comandos portátil, por lo que no necesariamente sabe si PHP se ejecutará finalmente en mod_php, FastCGI o IIS o si se aplicará un tiempo de ejecución máximo en el nivel del servidor. Probablemente también descarte shell-scripts, etc.
+1 para usar un cron. Las tareas de ejecución prolongada no se deben ejecutar con un script web –
No entiendo cómo puede esto retrasar el límite de tiempo declarado en php.ini, ¿podría ser más específico? gracias – Benoit
@Benoit Me refería a los límites de tiempo impuestos por el servidor (Apache, IIS, etc.) o el módulo de servidor (FastCGI/fcgid).Cuando se ejecuta desde la línea de comandos, no tendría esos límites particulares, y los únicos límites serían sobre los que PHP tiene control. La desventaja de ejecutar desde la línea de comandos es que no es tan portátil: tendrías que configurarlo de forma diferente para los servidores de Windows o modificarlo de acuerdo con la ruta a tu ejecutable de PHP, etc. Aún así, es una opción. – thomasrutter