PHP: Hypertext Preprocessor (original) (raw)
SplFileObject::flock
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
SplFileObject::flock — Portable file locking
Description
public SplFileObject::flock(int $operation
, int &$wouldBlock
= [null](reserved.constants.php#constant.null)
): bool
Parameters
operation
operation
is one of the following:
[LOCK_SH](filesystem.constants.php#constant.lock-sh)
to acquire a shared lock (reader).[LOCK_EX](filesystem.constants.php#constant.lock-ex)
to acquire an exclusive lock (writer).[LOCK_UN](filesystem.constants.php#constant.lock-un)
to release a lock (shared or exclusive).
It is also possible to add [LOCK_NB](filesystem.constants.php#constant.lock-nb)
as a bitmask to one of the above operations, if flock() should not block during the locking attempt.
wouldBlock
Set to [true](reserved.constants.php#constant.true)
if the lock would block (EWOULDBLOCK errno condition).
Return Values
Returns [true](reserved.constants.php#constant.true)
on success or [false](reserved.constants.php#constant.false)
on failure.
Examples
Example #1 SplFileObject::flock() example
<?php $file = new SplFileObject("/tmp/lock.txt", "w"); if ($file->flock(LOCK_EX)) { // do an exclusive lock $file->ftruncate(0); // truncate file $file->fwrite("Write something here\n"); $file->flock(LOCK_UN); // release the lock } else { echo "Couldn't get the lock!"; } ?>
See Also
- flock() - Portable advisory file locking
Found A Problem?
digitalprecision at gmail dot com ¶
14 years ago
For the record, the example given here has an explicit command to truncate the file, however with a 'write mode' of 'w', it will do this for you automatically, so the truncate call is not needed.
2 years ago
`@digitalprecision What you said is not completely true, ftruncate(0); is needed if there was a write to the file before the lock is acquired. You also may need fseek(0); to move back the file pointer to the beginning of the file
fwrite("xxxxx"); // write something before the lock is acquired sleep(5); // wait for 5 secondsif ($file->flock(LOCK_EX)) { // do an exclusive lock $file->fwrite("Write something here\n"); $file->flock(LOCK_UN); // release the lock } else { echo "Couldn't get the lock!"; } ?>"lock.txt" content:
xxxxxWrite something here
`