real - busqueda inteligente php mysql
Cómo mantener un script php fuera del tiempo de espera debido a una larga consulta mysql (5)
Tengo una consulta de actualización que está siendo ejecutada por una tarea cron que está agotando el tiempo. La consulta tarda, en promedio, cinco minutos en ejecutarse cuando se ejecuta en navicat.
El código se ve más o menos así. Es bastante simple:
// $db is a mysqli link
set_time_limit (0); // should keep the script from timing out
$query = "SLOW QUERY";
$result = $db->query($query);
if (!$result)
echo "error";
Aunque el script no debe superar el tiempo de espera, el tiempo de espera en la llamada sql parece estar sujeto a un tiempo de espera excedido.
¿Hay una llamada asíncrona que se pueda usar? ¿O ajustar el tiempo de espera?
¿El tiempo de espera es diferente porque se llama desde la línea de comandos en lugar de a través de Apache?
Gracias
¿Tu php funciona en modo seguro? Cita del manual de PHP de set_time_limit :
Esta función no tiene ningún efecto cuando PHP se ejecuta en modo seguro. No hay otra solución que no sea apagar el modo seguro o cambiar el límite de tiempo en php.ini.
De acuerdo con el manual :
Nota : La función set_time_limit () y la directiva de configuración max_execution_time solo afectan el tiempo de ejecución del script. No se incluye el tiempo dedicado a la actividad que ocurre fuera de la ejecución del script, como las llamadas al sistema utilizando system (), operaciones de flujo de datos, consultas de bases de datos, etc., al determinar el tiempo máximo que el script se ha estado ejecutando.
Por lo tanto, es poco probable que tenga algo que ver con el límite de tiempo de PHP. ¿Qué mensaje estás recibiendo cuando se agota el tiempo? Quizás hay una configuración de MySQL involucrada.
Suponiendo que está en Linux, los sistemas basados en Debian tienen configuraciones separadas para mod_php / php cgi y php-cli. Esto no debería ser demasiado difícil de configurar en un sistema Linux diferente que no separe la configuración de cgi / cli.
Una vez que tenga configuraciones separadas, ajustaría su configuración de php cli. Deshabilita el modo seguro y cualquier límite de tiempo y límite de ram.
Tuve el mismo problema en alguna parte y lo "resolví" con el siguiente código (las dos primeras líneas de mi archivo):
set_time_limit(0);
ignore_user_abort(1);
Vea algunas de las variables de límite de recursos en php, ini: max_execution_time, max_input_time, memory_limit
También podría establecer un límite de tiempo para el script en PHP: http://ca3.php.net/set_time_limit