Foros del Web » Programando para Internet » PHP »

variables cerrojo

Estas en el tema de variables cerrojo en el foro de PHP en Foros del Web. Hola: Estoy interesado en el uso de variables cerrojo en php. Tengo hecho que dentro de una sesion, un usuario pueda modificar un fichero de ...
  #1 (permalink)  
Antiguo 14/01/2004, 11:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: vivo en sevilla
Mensajes: 32
Antigüedad: 14 años
Puntos: 0
variables cerrojo

Hola:
Estoy interesado en el uso de variables cerrojo en php.
Tengo hecho que dentro de una sesion, un usuario pueda modificar un fichero de configuracion pero se puede dar el caso de que haya dos usuarios modificando en mismo fichero, quiero que solo uno lo modifique y cuando este haya terminado de modificarlo pueda hacerlo el otro.
Esto lo pretendo solucionar usando variables cerrojo que se activen cuando se inicie una sesion o algo asi
pero como son la variables cerrojo en php?
  #2 (permalink)  
Antiguo 14/01/2004, 12:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La forma tradicional (en PHP) de solventar ese problema de concurrencia en un proceso suele ser la de:

1) Gestionar la entrada de los usuarios al sistema. Autentificación.
2) Seguimiento del usuario en las procesos que interviene
3) gestión de esa variable tipo "flag" (bandera .. cerrojo o como la quieras llamar).
4) gestión de tiempos de expiración del usuario o "estado de inactividad).

Eso sería más o menos los pasos a seguir.

El usuario que entra al script que procesa esa lectura del archivo/acciones sobre el .. coloca ese "flag" a 1 como "estoy trabajando en este archivo" (para eso te hará falta tener una tabla tipo "archivo -> estado" que guarde el archivo y su estado (flag)) .. Si entra otro usuario a ese archivo (por tu scirpt.php que va a dar el acceso a el) .. miras el estado de ese flag .. si está a 1 .. no puede hacer nada tu nuevo usuario ..

Tu usuario que entró a modificar ese archivo al salir .. colocaría ese flag en modo 0 ..

El problema viene cuando el usuario que entra primero .. no abandona tu aplicación por el "logout" .. es decir . que no usa tu rutina que colocará ese flag a 0 para permitir que otros usuarios puedan modificar ese archivo.

Para solventar esos problemas .. se suele usar tiempos; guardando el tiempo en el que el usuario entra a modificar ese archivo. Se le otorga un tiempo máximo de "inactividad" .. Es decir .. si no interactua con el servidor en cierto tiempo .. se considera que no está usando ese proceso. Esto implica que ese tiempo de "modificando archivo" se actualice con toda interacción con el servidor: una recarga de página .. una acción sobre un formulario .. link que active ..etc.

Las rutinas clasicas de "Usuarios activos" (en las FAQ's tienes un ejemplo) gestionan así los tiempos de inactividad ..


Si usases Base de datos .. estas ya implementan funciones para bloquear tablas/registros con unas pocas instrucciones (lo que no gestionan son esos tiempos de "inactividad". Tambien gestionan perfectamente el tema de "transacciones" pero eso se refiere al momento exacto en el que se ha de procesar la información (ejemplo hacer una consulta .. obtener el último ID de esa tabla y actualizar otra tabla) pero no en los tiempos "muertos" que hay entre el que un "operador" (usuario) abre un archivo/registro/tabla y lo modifica o deja de usarlo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:00.