Download the PHP package texthtml/php-lock without Composer
On this page you can find all versions of the php package texthtml/php-lock. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package php-lock
php-lock
php-lock is a library that makes locking on resources easy. It can be used to avoid access to a file during write operations or to prevent crontabs to overlap. And it's designed to integrate well with Dependancy Injection (eg Symfony Container or Pimple).
Installation
With Composer :
Usage
You can create an object that represent a lock on a file. You can then try to acquire that lock by calling $lock->acquire()
. If the lock fail it will throw a \TH\Lock\Exception
(useful for CLI tools built with Symfony Console Components documentation). If the lock is acquired the program can continue.
Locking a file exclusively
Sharing a lock on a file
Auto release
$lock->release()
is called automatically when the lock is destroyed so you don't need to manually release it at the end of a script or if it got out of scope.
Using lock for crontabs
When you don't want some crontabs to overlap you can make a lock on the same file in each crontab. The TH\Lock\LockFactory
can ease the process and provide more helpful message in case of overlap.
When process 1 is running and we start process 2, an Exception will be thrown: "Could not acquire exclusive lock on protected resource" and if the factory was configured with a \Psr\Log\LoggerInterface
, messages explaining what happend would be logged:
process 1: exclusive lock acquired on protected resource
process 2: could not acquire exclusive lock on protected resource
process 2: lock released on protected resource
The only LockFactory
available at the moment is the TH\Lock\FileFactory
. This factory autmatically create lock files for your resources in the specified folder.
Aggregating locks
If you want to simplify acquiring multiple locks at once, you can use the \TH\Lock\LockSet
:
It will try to acquire all locks, if it fails it will release the lock that have been acquired to avoid locking other processes.
note: Lock
put inside a LockSet
should not be used manually anymore
Notes
Distributed system
On a distributed system, file based locking does not work, You can use the php-lock redis extension to have a safe lock instead.