elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Pregunta]: Consultas periódicas a una base de datos con PHP.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: Consultas periódicas a una base de datos con PHP.  (Leído 6,062 veces)
Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
[Pregunta]: Consultas periódicas a una base de datos con PHP.
« en: 23 Mayo 2021, 02:00 am »

Hola,

No sabía donde era mejor este tema, si en la sección base de datos o en esta sección de PHP.
Estoy no teniendo problemas pero sí dudas, hasta ahora todo este sistema funciona excelente. Lo que me permite hacer es lo siguiente, desbloquear usuarios que fueron bloqueados de forma temporal hasta x fecha, marcar como desconectados usuarios que ya no hicieron acciones en la aplicación por un periodo de x minutos, eliminar algunos registros de x tabla que ya son demasiado viejos, etc.

Mi función para marcar como desconectados a usuarios que no hicieron acciones por x periodo de minutos por lo que se los considera desconectados:
Código
  1. static function Marcar_Desconectados()
  2. {
  3. $unix_grace = strtotime('-x minutes', time());
  4. $con = Conectar_BD(nombre_usuario, contrasena);
  5. $query = $con->prepare('UPDATE users SET connected = 0 WHERE connected = 1 AND :unix_grace >= unix_activity');
  6. $query->bindValue(':unix_grace', $unix_grace, PDO::PARAM_INT);
  7. $query->execute();
  8. }
  9.  

Cada vez que se realice una petición al servidor, se envía un formulario, se carga una página (por ejemplo se ingresa a index.php), se ejecuta un código php con ajax, etc.. se va a ejecutar la funcion..

Código
  1. x::Marcar_Desconectados();
  2.  

Realmente no sé si es óptimo considerando muchos usuarios en esta aplicación web. Aunque si eventualmente no hay usuarios que marcar como desconectados, no hay registros viejos que eliminar, no hay usuarios bloqueados temporalmente que desbloquear, es decir ejecutaría estas consultas pero no modificaría nada ni haría ninguna accion DELETE, UPDATE, etcétera.

Aunque estaría haciendo las consultas igual, por eso no estoy seguro.


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [Pregunta]: Consultas periódicas a una base de datos con PHP.
« Respuesta #1 en: 23 Mayo 2021, 13:08 pm »

Debes por algún tipo de semáforo para reducir las queries. Por ejemplo, que compruebe en un archivo o algo cuando fue la última ejecución y si no ha sido en más de X tiempo, no ejecutar la query. Un UPDATE es una query costosa, no tanto como un INSERT pero si más que un SELECT, y ejecutarlo con cada impresión es inviable.

Además tienes otro problema y es que es posible que no tengas visitantes a la web lo cual causaría que no se ejecute el UPDATE. Si quieres algo fiable y optimizado, lo mejor que puedes hacer es configurar un CRON en el sistema/hosting/lo que tengas que ejecute un script de PHP cada X tiempo y se encargue exclusivamente de esto, así solo haces las llamadas necesarias y las haces siempre (y cuando el servidor este up).

Saludos


En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.667


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: [Pregunta]: Consultas periódicas a una base de datos con PHP.
« Respuesta #2 en: 23 Mayo 2021, 15:52 pm »

Hola, o también podes crear una función con una tarea programada que haga el update cada x tiempo, por ejemplo cada un día.


Saludos
En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: Consultas periódicas a una base de datos con PHP.
« Respuesta #3 en: 23 Mayo 2021, 23:59 pm »

Gracias por la ayuda a los 2!

Estuve viendo eso de CRON JOBS y parece algo sencillo por lo menos para configurar en un hosting, voy a decirles todo lo que entendí haber si estoy en el camino correcto  :xD. Además tengo una nueva duda con otra cosita de esto de los CRON JOBS que más abajo la digo.

Los CRON JOBS sirven para ejecutar código/instrucciones regularmente cada X tiempo, básicamente eso. Ahora para configurar uno (en un hosting) en general es un formulario donde se ingresa cada x tiempo debe de ser ejecutado. Estoy pensando y puede ser cada 1 Minuto.

Luego se debe ingresar la ruta del archivo (en este caso PHP) que contendrá el algoritmo o las instrucciones, lo que quiere decir que debería crear un archivo .php que se llame por ejemplo "cron_jobs.php y que ahí estarán esas funciones php "x::Marcar_Desconectados();", etcétera.

Mis dudas nuevas serían:

cron_jobs.php
Código
  1. // Llamo a las librerías que use
  2. // [...]
  3.  
  4. x::Marcar_Desconectados(); // marca los desconectados
  5. x::Desbloquear_Usuarios(); // desbloquea usuarios que tenían un bloqueo temporal
  6. x::Eliminar_Registros_Antiguos(); // elimina registros ya muy viejos que son innecesarios
  7. x::Otra_Cosa(); // básicamente cualquier otra función que haga cosas similares...
  8.  

Tener eso, ¿está bien? ¿o debería crear un archivo .php para cada función y configurar varias tareas cron?

Se me ocurría hacer mejor si fuera posible, $_GET['name_function'] y si es === ejecuta una, o ejecuta otra. Entonces la ruta sería... /public_html/blah/blah/cron_jobs.php?name_function=Marcar_Desconectados

y así para los demás cron jobs que vaya configurando por separado.

Y la última duda...
si una persona ingresa por ejemplo a cron_jobs.php ¿No ejecutará también? Estoy hablando de un ingreso como por ejemplo en lugar de irse a index.php se van a cron_jobs.php

No sé si me di a entender con esa ultima pregunta.

En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.667


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: [Pregunta]: Consultas periódicas a una base de datos con PHP.
« Respuesta #4 en: 24 Mayo 2021, 01:41 am »

Hola, para evitar que un usuario no autorizado intente ejecutar el archivo cron_jobs.php ingresando por la URL, debes ubicar en el mismo directorio donde está ese archivo PHP, un archivo .htaccess que deniegue el acceso si se intenta ingresar por URL, de esa manera el archivo cron_jobs.php sólo sería ejecutado desde los mismos archivos PHP, ya que por ejemplo cron_jobs.php podría contener dentro una clase o función que sería llamada desde los demás archivos PHP.

También podes usar un archivo index.php para proteger el directorio, es decir que deniegue el acceso al directorio donde está ubicado el archivo cron_jobs.php para que no puedan ver ni ejecutar los archivos que hay dentro.


Saludos
« Última modificación: 24 Mayo 2021, 01:59 am por [D]aniel » En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: Consultas periódicas a una base de datos con PHP.
« Respuesta #5 en: 24 Mayo 2021, 02:55 am »

¡Hola!

¿Cómo se podría denegar el acceso por URL a través del .htaccess a un archivo?
En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: Consultas periódicas a una base de datos con PHP.
« Respuesta #6 en: 25 Mayo 2021, 04:36 am »

Posible solución:
Código
  1. RedirectMatch 403 /x/ajax/.*$
  2. RedirectMatch 403 /x/library/.*$
  3.  

Digo "posible" porque si hago...
Código
  1. RedirectMatch 403 /x/css/.*$
  2.  

No me van a cargar los estilos y lo único que yo quería era que las personas no puedan entrar a mipagina.com/css/estilo_x.css y ver eso... (ya sé que el css lo ve cualquiera y no hay manera de bloquear eso, pero igualmente no quiero que anden viendo o ejecutando estos tipos de archivos desde la URL)


EDIT: Hice macanas, ya no anda nada  :xD
« Última modificación: 25 Mayo 2021, 04:48 am por Leguim » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines