Example. fopen(“”,”w+”); // exclusive lock if (flock($file, LOCK_EX)) { fwrite($file,”Write something”); // release lock flock($file,LOCK_UN); } else. flock. (PHP 4, PHP 5, PHP 7). flock — Portable advisory file locking A file system pointer resource that is typically created using fopen(). operation. operation is. $fh = fopen(”,’a’) or die($php_errormsg); flock($fh,LOCK_EX) or The file locking flock() provides is called advisory file locking because flock().

Author: Daim Brazragore
Country: Niger
Language: English (Spanish)
Genre: Sex
Published (Last): 4 October 2017
Pages: 482
PDF File Size: 19.77 Mb
ePub File Size: 8.78 Mb
ISBN: 904-1-18192-455-8
Downloads: 18440
Price: Free* [*Free Regsitration Required]
Uploader: Arasar

The key problem with file system operations is the precarious situation you are in if two scripts attempt to write to a file at the same time.

The fopen function, when called on a file, does not stop that same file from being opened by another script, which means you might find one script reading from a file as another is writing, or, worse, two scripts writing to the same file simultaneously.

The solution to this problem is to use file locking, which is implemented in PHP using the flock function.

When you lock a file, you have the option of marking it a read-only lock, thereby sharing access to the file with other processes, or an exclusive lock, allowing you tlock make changes to the file. On Unix, flock is advisorymeaning that the OS is free to ignore it.


Locking files with flock() – Hacking with PHP – Practical PHP

On Windows, flock is mandatory, meaning that files are locked by the OS whether you ask for it or not! The fop function takes a file handle as its first parameter, and a lock operation as its second parameter. File handles you know already, and the operations are simple: Calling flock will return true if the file lock was retrieved successfully, or false if it failed.

So, for example, flock could be used like this:. Furthermore, the Network File System NFScommonly used to provide file sharing across Unix boxes, is not suitable for use with flock. The file locking mechanism in PHP automatically makes processes queue up for their locks by default.

For example, save this next script as flock. That script attempts to lock the file foo.

Once the lock is obtained, the script sleeps for ten seconds, then unlocks the file and quits. If a lock cannot be obtained because another application has a lock, the script waits at the flock call for the lock to be released, then locks it itself and continues. Flok test this out, open up two command prompts and run the script twice.

The first script run will get a lock immediately and print “Got lock! If while the first script is sleeping you launch the second script, it will wait “block” on the flock call and wait for the first script to finish.


When the first script finishes, the second script will succeed in floc its lock, print out “Got lock!

Sometimes it is not desirable to have your scripts wait for a file to become unlocked, and in this situation you can add an extra option to the second parameter using the bitwise OR operator.

This means that if the file lock flocck not available, flock will return immediately with false rather than hang around waiting for fpock lock to become available. This time, the first script will get the lock and print “Got lock!

Get over pages of hands-on PHP learning today!

Locking files with flock()

If this was helpful, please take a moment to tell others about Hacking with PHP by tweeting about it! Checking uploaded files Jump to: Locking files with flick. Want to learn PHP 7?