Helper Lock
1Apresentação
Helper usado para travar o acesso a um arquivo. Se nenhum arquivo for especificado, o script PHP em execução será travado.
O objeto pode ser utilizado de duas formas diferentes: instanciando-o de maneira convencional,
ou usando métodos estáticos.
Cada solução é usada de uma forma diferente:
- Chamadas estáticas: por padrão, o travamento é não bloqueante (se o arquivo já estiver travado, a função retorna false imediatamente). Para destravar o arquivo, outra função estática deve ser chamada, informando novamente o caminho do arquivo que foi travado.
- Instanciação: por padrão, o travamento é bloqueante (se o arquivo já estiver travado, o objeto aguarda que ele seja liberado antes de travá-lo por sua vez, para então devolver o controle). Para destravar o arquivo, a instância do objeto deve ser destruída.
Arquivos ainda travados ao final da execução do script são destravados automaticamente. Portanto, nem sempre é necessário destravá-los explicitamente.
2Chamadas estáticas
A maneira mais simples de travar (de forma não bloqueante) a execução de um script é escrever o seguinte código:
use \Temma\Utils\Lock as TµLock;
if (!TµLock::lock()) {
// o programa já está em execução
exit();
}
// restante do script
Para travar um arquivo específico, e destravá-lo posteriormente:
use \Temma\Utils\Lock as TµLock;
TµLock::lock('/path/to/file', true);
// ... código da aplicação
TµLock::unlock('/path/to/file');
3Instanciação
Para travar o acesso a um arquivo, e destravá-lo posteriormente:
use \Temma\Utils\Lock as TµLock;
// travamento do arquivo
try {
$lock = new TµLock('/path/to/file');
} catch (\Temma\Exceptions\IO $eio) {
// ocorreu um erro
}
// ... código da aplicação
// destravamento
unset($lock);
Para travar o acesso a um arquivo de forma não bloqueante, e destravá-lo posteriormente:
use \Temma\Utils\Lock as TµLock;
// travamento do arquivo
try {
$lock = new TµLock('/path/to/file', false);
} catch (\Temma\Exceptions\IO $eio) {
// ocorreu um erro
} catch (\Temma\Exceptions\Application $ea) {
// o arquivo já está travado
}
// ... código da aplicação
// destravamento
unset($lock);