Pregunta:
Fecha: 30-09-2015 09:14:08
(En Español)
mi consulta es si existe alguna forma de darle timeout a un query o insert desde php con sqlserver .. osea me refiero a que si llega a cierto tiempo la consulta realice algún tipo de timeout. yo se que desde php.ini se establece el tiempo que se debe dar en una consulta pero en mi caso le tengo mucho tiempo ya que lo utilizo para otra aplicación por lo que quisiera saber si se puede realizar desde php osea si hubiera una función o un script que me ayude a solucionar este problema ... les comparto parte del código
en este insert hay ocasiones que el usuario se bloquea y se queda pensando algún tiempo o que se caiga la base de datos justo cuando va realizar el insert .. entonces lo que me pasa es que se queda la pantalla en blanco y como le tengo mucho tiempo en el php.ini no sale rápido.. por eso es que solicito ayuda..
gracias de antemano Votos: 0 - Respuestas: 6 - Vistas: 6 Compartir en: Google Facebook Twitter LinkedIn Link
Tiempo de espera de query php con sqlserver[Resuelta]
que tal amigosmi consulta es si existe alguna forma de darle timeout a un query o insert desde php con sqlserver .. osea me refiero a que si llega a cierto tiempo la consulta realice algún tipo de timeout. yo se que desde php.ini se establece el tiempo que se debe dar en una consulta pero en mi caso le tengo mucho tiempo ya que lo utilizo para otra aplicación por lo que quisiera saber si se puede realizar desde php osea si hubiera una función o un script que me ayude a solucionar este problema ... les comparto parte del código
$sql="insert into tabla (campos)
VALUES (".$campo1.", ".$campo2.'")";
$rs=mssql_query($sql,$i);
if($rs)
{
echo 'ok';
}else
echo 'no se realizo consulta';
{en este insert hay ocasiones que el usuario se bloquea y se queda pensando algún tiempo o que se caiga la base de datos justo cuando va realizar el insert .. entonces lo que me pasa es que se queda la pantalla en blanco y como le tengo mucho tiempo en el php.ini no sale rápido.. por eso es que solicito ayuda..
gracias de antemano Votos: 0 - Respuestas: 6 - Vistas: 6 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 01-10-2015 06:41:13 Hola Juan,
Tienes varias formas de configurar el timeout, vemos algunos casos:
* Cambiar la configuración de timeout del conector PHP mssql: esta es la forma recomendada pero deberás hacer algunas pruebas porque en versiones de PHP como la 5.2.13 (y anteriores) esta reportado un bug indicando que la configuración del timeout no surge efecto, si bien el bug esta resuelto no me queda claro a partir de que versión fue aplicado, aquí el enlace al reporte de bug #51562 https://bugs.php.net/bug.php?id=51562
También te recomiendo que leas las configuraciones de tiempo de ejecución del conector mssql en la página oficial: http://php.net/manual/es/mssql.configuration.php
Ejemplo, aplicar un tiempo de timeout de 15 segundos:
ini_set('mssql.timeout', 16);
* Timeout script PHP: puedes configurar un timeout al código php, para el script en particular que ejecuta la consulta (no para la consulta), si el script tarda mas de un x tiempo puedes hacer que este sea abortado. Por lo general este valor esta configurado en 30 segundos, pero lo puedes cambiar con la función PHP set_time_limit();
Ejemplo, reducir el tiempo de ejecución a 15 segundos:
set_time_limit(15);
* Remote query timeout SQL Server (para nada recomendable hacer esto): puedes cambiar el tiempo de ejecución permitido para las consultas remotas modificando la configuración de SQL Server con el stored procedure sp_configure. Ten presente que este cambio es para todo el servidor (no para la consulta en particular) y requeriras tener privilegios especiales para poder aplicar los cambios.
Ejemplo, aquí configuramos el timeout en 15 segundos (debes ejecutar esto desde una query en php y luego enviar la query en custion):
USE nombre_base_de_datos; GO EXEC sp_configure 'remote query timeout', 15 ; GO RECONFIGURE ; GO
Espero que mi respuesta te sea de ayuda.
Saludos,
Fernando Votos: 0 - Link respuesta -
Fecha: 01-10-2015 11:23:01 muchas gracias fernando realizare la prueba con set_time_limit(15); y retroalimentare.. Votos: 0 - Link respuesta
-
Fecha: 01-10-2015 14:02:33 si, digamos que el tiempo "15 segundos" es un ejemplo, para la web 3 segundos ya es mucho.... por favor recuerda votar las respuesta que te fueron de ayuda. Votos: 0 - Link respuesta
-
Fecha: 09-10-2015 07:55:54 gracias fernando fijate que probe set_time_limit(3) y siempre me da el minuto que tengo configurado el php ini Votos: 0 - Link respuesta
-
Fecha: 09-10-2015 11:48:56 Juan, tal vez tu servidor no este permitiendo cambiar el tiempo de ejecución (puede suceder en los shared server), como también podes estar aplicando el set_time_limit(3) en otro "scope" y no se esta aplicando correctamente a tu script.
Para eliminar esta duda podes crear un script como el siguiente y ejecutar aisladamente en tu servidor:
Archivo: prueba.php
<?php set_time_limit(3); sleep(10); echo 'si la funcion set_time_limit() aplicar, este texto no se muestra, el script da timeout antes'; exit; ?>
Si ejecutas ese script y luego de los 10 segundos te muestra el texto con el "echo", es porque la función set_time_limit(3); no esta surgiendo efecto.
Si la función aplica correctamente deberías obtener el error:
"Fatal error: Maximum execution time of 3 seconds exceeded in..."
Probalo y luego nos cuentas.
Saludos, Votos: 0 - Link respuesta -
Fecha: 13-10-2015 08:09:44 gracias fernando .. realice la prueba y creo que no me esta funcionando ya que con un cronometro me dio 10 segundos .. es posible que sea el server? Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
