tags:

views:

16

answers:

1

Is it possible to lock a file to stop it being opened while GD library is accessing it?

What I am looking to achieve is similar to a database 'serialzable' level of isolation... I want to ensure that only one session/user can access an image at a time to stop a 'dirty read'.

My application allows users to add an image of choice to a bigger image.

for example

  • the big image is empty
  • Raj & Janet upload their images
  • Raj's session opens the big image.
  • 1 ms later Janet's session opens the big image.
  • Raj's session add's his image and saves the big image
  • 1 ms later Janet's session adds his image and saves its version of the big image.
  • As a result Raj's image is not in the final image as Janet's version overwrote it.

I hope that makes it clear enough.

+2  A: 

Check out flock. You can either lock the file you're working with, or create a "lock file" somewhere else in the filesystem which all your scripts check for.

Emil Vikström
It looks perfect, my only fear is what if somehow a file becomes locked forever.. Is there a way to safeguard against this?
Pablo
The lock is released when the file is closed so the only trouble would be if your process hangs without closing (i.e. becomes a zombie process).
Emil Vikström