How does LOCK_SH work?

flock, php

Solution

`flock()` implements advisory locking, not mandatory locking. In order for `file2.php` to be blocked by `file1.php`'s lock, it needs to try to acquire a write `(LOCK_EX)` lock on the file before writing.

Problem

I'm studing the flock mecanism in PHP and I'm having a hard time understanding the functionality of the LOCK_SH mode. I read on a site that it locks the file so that other scripts cannot WRITE in it, but they can READ from it. However the following code didn't seem to work as expected : In file1.php I have: ``` $fp = fopen('my_file.txt','r'); flock($fp, LOCK_SH); sleep(20); flock($fp, LOCK_UN); ``` And in file2.php I have ``` $fp = fopen('my_file.txt','a'); fwrite($fp,'test'); ``` I run the first script which locks the file for 20 seconds. With the lock in place, I run file2.php which finishes it's execution instantly and after that, when I opened 'my_file.txt' the string 'test' was appended to it (althought the 'file1.php' was still runing). I try to change 'file2.php' so that it would read from the locked file and it red from it with no problems. So apparently ... the 'LOCK_SH' seams to do nothing at all. However, if I use LOCK_EX yes, it locks the file, no script can write or read from the file. I'm using Easy PHP and running it under windows 7.

Original source