Evitar conflictos escritura/lectura en PHP
Conflictos escritura/lectura
Nuestras páginas php serán vistas (sin duda) por un gran número de personas; es posible que en algun momento dos o mas personas soliciten el mismo fichero a la vez. Mientras esto no es ningun problema cuando se trata de ficheros de solo lectura, si puede llegar a serlo, y grave, cuando se trate de archivos con permisos de lectura/escritura.
Pensemos en el ejemplo típico, un contador de visitas que a cada nuevo visitante abre el fichero donde se guardan los datos, pone dentro la información de la nueva visita, y después lo cierra. ¿que pasaría si durante la operación de escritura hay otro usuario que visita la web? que el script abriría de nuevo el fichero y escribiría los datos antes de que la anterior operación hubiera terminado.
Si coinciden los dos procesos, como mal menor, la información se escribirá de forma incorrecta (y por tanto inutil). Como mal peor, tendremos un fichero corrupto.
Para evitar estos problemas al manejar archivos, con php disponemos de la función flock (file lock) con la cual podemos poner un candado al archivo (impidiendo que se abra en modo escritura) o reabrirlo a voluntad.
<?
if ($file = fopen( "/home/user/pub/mylog.log", "a")) //file handler
{
flock($file, 2); // cerramos $file
fputs($file, $the_line); // escribimos el contenido en el
flock($file, 3); // terminada la escritura, quitamos cierre
fclose($file); // cerrar archivo
}
?>
Opciones de flock()
flock() opera sobre un file handler que debe apuntar a un fichero previamente abierto. Puede tener los siguientes valores:
Autor: Ignside
http://www.ignside.net/man/php/archivos.4.php
Usuarios que han visto este tema también han visto...
- Información Encriptada en la DB Oracle (PHP)
- Enviar un formulario por correo electrónico
- Introducción al PHP y a las librerías
- Variables variables con PHP
- Encuesta con PHP
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.