Mostrando entradas con la etiqueta Apache. Mostrar todas las entradas
Mostrando entradas con la etiqueta Apache. Mostrar todas las entradas

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

Configurar Zend Framework en wamp, xammp, lamp o mamp


Os dejo en este post cómo se configuran los servidores XAMP, WAMP, LAMP o MAMP para trabajar con proyectos basados en Zend Framework. Como sabéis, lo que caracteriza a estos 4 entornos es que te integran de forma semi-automática PHP, APACHE y MySQL, pero ese es otro tema.

Bueno, vamos al grano, lo que hay que hacer es descargar Zend Server desde la página oficial de Zend Framework, a ser posible en una extensión que nos permita descomprimir la carpeta mejor que un ejecutable, por ejemplo en la versión linux. Si estamos entornos Windows podemos instalar el ejecutable y cuando finalicemos el proceso desinstalarlo. 

Una vez que lo hemos descargado, debemos ir a la carpeta de instalación de Zend Server, que suele tener la siguiente estructura: "Zend \ ZendServer \ share \ ZendFramework". Bien, dentro de esa última carpeta tenemos las dos carpetitas que tenemos que copiar en nuestros entorno "AMP", ya sea X,W,L o M. Estos dos directorios son "bin" y "library". 

Debemos ir a la carpeta "xampp \ php" (en mi caso es un XAMP). Allí creamos nuestra carpeta "zend", de forma que queda "xampp \ php \ zend" y dentro de esta ruta copiamos los dos directorios "bin" y "library".

Lo siguiente es configurar el php.ini para que sepa encontrar las librerías de Zend Framework. Para ello, buscamos la directiva:

include_path = ".;C:\xampp\php\PEAR"

Y añadimos al path la ruta de nuestras librerías Zend (la que hemos copiado), quedando así:

include_path = ".;C:\xampp\php\PEAR;C:\xampp\php\zend\library"

Ahora debemos guardar el documento y reiniciar Apache.

La carpeta "bin" que hemos copiado contiene la herramienta Zend Tool que como sabéis, sirve para crear proyectos o items de tipo Zend Framework. Si queréis poder invocarla desde el IDE de desarrollo o la línea de comandos debéis añadir la ruta de "zf.bat" o "zf.sh" dependiendo del entorno a la variable PATH de las variables de entorno del sistema operativo en el que estéis.

Eso es todo, muy fácil, suerte!
spacer