sql >> Base de Datos >  >> RDS >> Mysql

El script de usuario foreach de PHP parece hacer que apache se cuelgue

Este comportamiento suena como un bloqueo de sesión. La forma predeterminada en que funcionan las sesiones de PHP es bloquear la sesión (para evitar que dos procesos escriban en el objeto de la sesión). Esto normalmente está bien para los típicos scripts de PHP de corta duración, pero puede morderte cuando tienes algo que se ejecuta durante mucho tiempo.

Si su aplicación no utiliza sesiones en absoluto, debe desactivar session.auto_start en php.ini o .htaccess:http ://www.php.net/manual/en/session.configuration.php#ini.session.auto-start (Si no lo ve allí, o si ya está desactivado, pero está utilizando algún tipo de marco, el marco podría estar iniciando la sesión por usted; si es así, es más simple ir a la siguiente solución que intentar luchar el marco.)

Si está utilizando la sesión en algunas páginas, pero no en este proceso de ejecución prolongada, la solución es cerrar la sesión al comienzo de su secuencia de comandos, con session_write_close() :

<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

session_write_close();

$i = 1;
....

Nuevamente, la advertencia del marco:si el marco está iniciando una sesión por usted, entonces coloque session_write_close(); después de incluir los archivos del marco, ¡no antes! (Mencionaste que ese era el caso en tus comentarios, por lo que lo puse después de las líneas requeridas).

Si su proceso de ejecución prolongada necesita usar la sesión, pero solo lectura, lo anterior aún funciona. Ver https://stackoverflow.com/a/14409902/841830 (Como muestra esa respuesta, si necesita escribir en la sesión al final del proceso de ejecución prolongada, eso también es posible).

(PD:esto ya se respondió en los comentarios, pero acepté la oferta de Wrikken de publicarlo como respuesta. Sí, los rumores son ciertos:haré cualquier cosa por unas cuantas repeticiones...)