Helper Lock
1Presentación
Helper usado para bloquear el acceso a un archivo. Si no se especifica ningún archivo, se bloqueará el script PHP en ejecución.
El objeto puede invocarse de dos formas distintas: instanciándolo de manera convencional,
o mediante métodos estáticos.
Cada solución se usa de una forma diferente:
- Llamadas estáticas: por defecto, el bloqueo no es bloqueante (si el archivo ya está bloqueado, la función devuelve false inmediatamente). Para desbloquear el archivo, hay que llamar a otra función estática, indicando de nuevo la ruta del archivo que fue bloqueado.
- Instanciación: por defecto, el bloqueo es bloqueante (si el archivo ya está bloqueado, el objeto espera a que se libere antes de bloquearlo a su vez, para luego devolver el control). Para desbloquear el archivo, hay que destruir la instancia del objeto.
Los archivos que sigan bloqueados al final de la ejecución del script se desbloquean automáticamente. Por lo tanto, no siempre es necesario desbloquearlos explícitamente.
2Llamadas estáticas
La forma más simple de bloquear (de manera no bloqueante) la ejecución de un script es escribir el siguiente código:
use \Temma\Utils\Lock as TµLock;
if (!TµLock::lock()) {
// el programa ya está en ejecución
exit();
}
// resto del script
Para bloquear un archivo específico, y desbloquearlo más tarde:
use \Temma\Utils\Lock as TµLock;
TµLock::lock('/path/to/file', true);
// ... código de la aplicación
TµLock::unlock('/path/to/file');
3Instanciación
Para bloquear el acceso a un archivo, y desbloquearlo más tarde:
use \Temma\Utils\Lock as TµLock;
// bloqueo del archivo
try {
$lock = new TµLock('/path/to/file');
} catch (\Temma\Exceptions\IO $eio) {
// hubo un error
}
// ... código de la aplicación
// desbloqueo
unset($lock);
Para bloquear el acceso a un archivo de forma no bloqueante, y desbloquearlo más tarde:
use \Temma\Utils\Lock as TµLock;
// bloqueo del archivo
try {
$lock = new TµLock('/path/to/file', false);
} catch (\Temma\Exceptions\IO $eio) {
// hubo un error
} catch (\Temma\Exceptions\Application $ea) {
// el archivo ya está bloqueado
}
// ... código de la aplicación
// desbloqueo
unset($lock);