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:

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

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.

Ahmed Rain

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

`