2010-05-30 23 views
7

Tengo un sitio web que tiene 2 páginas, (página_de_la_casa.php y acción_página.php) La página de acción toma aprx. 2 minutos para cargar por completo (el lado del servidor tarda 2 minutos). Pero si el usuario hace clic en el enlace de la página de inicio mientras se carga la página de acción, el navegador no va a la página de inicio, hasta que la página de acción esté completamente cargada. Lo mismo si la página de inicio está abierta en una nueva pestaña.2 solicitud de php diferente al mismo tiempo por usuario

En primer lugar, ¿cuál es el motivo de esto? (Bowser? php? apache?) y ¿cómo puedo evitar esto?

Gracias

Respuesta

10

Lo más probable, es debido a que una sesión está bloqueada. PHP solo permitirá una solicitud por sesión para evitar problemas (sobrescribir datos, etc.). Consulte: session_write_close() ...

+0

Ok, acabo de agregar esta función a la parte superior de la página de acción y ahora parece perfecto. –

+0

¿resolverá el problema de las llamadas ajax también? Si hago 2 llamadas ajax a la misma página, la segunda llamada ajax solo se responderá una vez que haya terminado el procesamiento. Esto ocurre solo cuando la sesión está habilitada. Cuando elimino la sesión de la página php, entonces cualquiera de las llamadas podría responder primero. ¿Es este el mismo comportamiento peculiar de la sesión php? –

+0

Bueno, no es un comportamiento "peculiar", es muy deseado. Hay dos formas de evitar el problema. Cierre la sesión tan pronto como haya terminado con ella o acelere sus páginas, por lo que incluso si hubiera un bloqueo, solo duraría una pequeña fracción de segundo (y por lo tanto no se notará) ... – ircmaxell

1

Si la página tarda 2 minutos en cargarse, está alcanzando los límites de tiempo de espera de red de un navegador típico. Ese es un tiempo realmente largo para cargar una página. Es posible que desee considerar generar un proceso separado para manejar el procesamiento prolongado. Puede colocar el resultado en una base de datos, archivo, etc. y usar sondeo para verificar si está listo.

Al generar un proceso (exec()), asegúrese de utilizar nohup, background it (&) y de salida de error directa a/dev/null; de lo contrario, no se desconectará del proceso web y el proceso web esperará a que termine.

0

Además, consulte la configuración de depuración si está desarrollando. Tengo esto en mi .htaccess:

php_flag xdebug.remote_enable on 
php_flag xdebug.remote_connect_back on 
php_flag xdebug.remote_autostart on 

Y eso crea el mismo comportamiento.

Cuestiones relacionadas