2012-05-04 9 views
6

Tenemos un servidor FreeBSD con samba en el que los empleados copian archivos de imagen, que luego se cargan en nuestros servidores web (de esta manera no tienen que meterse con ftp). A veces, si el script de carga se ejecuta al mismo tiempo que se copian los archivos, puede cargar un archivo incompleto.¿Hay una mejor manera de ver si se está escribiendo un archivo?

Solucionamos esto obteniendo la lista de archivos junto con los tamaños de archivo, luego esperando 5 segundos y volviendo a verificar los tamaños de archivo. Si los tamaños coinciden, se guarda para cargar, si no coinciden, se comprueba nuevamente en otros 5 segundos.

Esto parece una forma extraña de comprobar si se están escribiendo los archivos. ¿Hay una manera mejor y más simple de hacer esto?

+0

'if (! Flock ($ fp, LOCK_EX | LOCK_NB)) {// el archivo está bloqueado para la escritura'? – DaveRandom

+0

'bandada()' ¿tal vez? –

+0

no estoy seguro de si 'flock()' y las cerraduras de samab se verán entre sí de manera confiable. Tuvo algunos problemas hace años. –

Respuesta

2

utilizar una función http://php.net/flockflock - al escribir un archivo de obtener un bloqueo exclusivo flock($handle, LOCK_EX), después de que se escribe la liberación del bloqueo flock($handle, LOCK_UN).

El script de carga también podría tratar de obtener el bloqueo de escritura exclusivo, si tiene éxito, está bien mover el archivo, de lo contrario no.

EDIT: Lo siento, se olvidó de los usuarios copiar los archivos en el servidor a través de samba ... así que no hay espacio para utilizar flock mientras copia ... Pero el script de carga todavía se podía utilizar para ver flock($handle, LOCK_EX), si es exitoso o no

2

Lo recomiendo a shell_exec() smbstatus (1), p. smbstatus -LB para verificar si hay archivos bloqueados

0

Escriba una secuencia de comandos para copiar los archivos a una carpeta temporal en el servidor Samba y luego, cuando esté completamente copiado y vaciado, mueva (es decir, desvincular/vincular, no copiar de nuevo) a la carpeta de carga.

Cuestiones relacionadas