Zend Framework Apache PHP TimeOut (Error 200)

Muy buenas gente! ¿Quien no se ha encontrado con el típico error de timeout en un script php?...

Cuando estamos intentando ejecutar un script que excede un poco del tiempo por defecto de Apache (que creo recordar que son 30 segundos), nos encontramos con un error de timeout. Como muchos de vosotros ya sabreis se puede solucionar cambiando directivas en el php.ini del servidor Apache, en este caso es el máximo tiempo de ejecución del script (en segundos, en el ejemplo 30 segundos):

max_execution_time = 30

Vaaaale, puede que ni siquiera tengas que editar el php.ini y reiniciar el servidor, también puedes usar la función:

set_time_limit(30); 

en el propio script que dura algo más de tiempo, por ejemplo, si son dos minutos:

set_time_limit(120);

Qué fácil!... ya, pero usando Zend Framework... OMFG... no es suficiente, y encontrar la solución requiere saber buscar bien y perder el tiempo en ello. Este es el "super-descriptivo" error que nos lanza Zend:

200 OK
The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.

Gracias Zend!!!  Eres muy descriptivo, con eso entiendo que lo que me quieres decir es que el tiempo de script no era suficiente y has petado, ¿no?. Vale, vale.

Os dejo un esquemita de cómo funciona el servidor al procesar las peticiones (sin entrar en detalles) y después os doy la solución de dónde y qué hay que tocar.


Como se ve en el esquema anterior, hay un ficherito de Zend que interviene en el requestTimeout. El ficherito en cuestión es ZendEnablerConf.xml y se suele encontrar en Windows en la ruta C:\Program Files\Zend\ZendServer\etc

Bueno, pues en ese fichero tenemos que cambiar la siguiente directiva, aumentando el tiempo de ejecución:

<Timeouts connectionTimeout="120" requestTimeout="600" />

Lo que hay que hacer es aumentar ambos parámetros, pero fundamentalmente el segundo. Yo lo he configurado a 600 segundos (10 minutillos), pues tengo que lazar un parser de un XML kilométrico y el script muere.

Eso es todo, espero que a alguien le sirva, y no haya tardado en encontrar mi blog lo que yo he tardado en solucionar el TimeOut del script. ;)

Un saludo!!!
spacer