When to flock

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I've got a script which writes my blog's RSS feed (rather than dynamically  
generating it each time it is requested), and I'm not sure whether I should  
lock the file while I'm writing it.   Truth is, the only way this script  
runs is through cron anyway, and I recently read that "Other processes can  
modify or delete a PHP-locked file if permissions allow." which seems to be  
a waste of time, anyway.

Can someone shed light on this?

Karl Groves

Re: When to flock

Quoted text here. Click to load it

Always be prepared to deal with problems with slow cron jobs.  If
you run it every 6 hours and it sends an email, be prepared to deal
with what happens if sending an email takes 13 hours (perhaps a
NFS-mounted volume went offline).  The solution is NOT to stack up
more processes indefinitely.

Re: When to flock

karl@NOSPAMkarlcore.com wrote:
Quoted text here. Click to load it

PHP's flock() (which actually uses the system call fcntl()) is advisory,
not mandatory. This means it only controls access from tasks that use it.
Cooperating tasks 'agree' to use flock() to control access to the file. A
non-cooperating task which does not use locking can always read/write the
file (if permissions allow).

In your case, what if a request to read the RSS feed file comes in at the
same time your cron job is writing it? So yes, you may need locking.

Re: When to flock

Karl Groves wrote:

Quoted text here. Click to load it

Why would you want to? Assuming this script only runs every hour or two,
it's unlikely that two attempts will be made to write to the file
simultaneously. Of course if someone *reads* the file while it's being
written, they'll get a partial feed, but flock() doesn't change that.

Toby A Inkster BSc (Hons) ARCS
Contact Me ~ http://tobyinkster.co.uk/contact
Geek of ~ HTML/SQL/Perl/PHP/Python*/Apache/Linux

* = I'm getting there!

Site Timeline