блокировка — Что происходит с блокировкой файлов PHP, если время ожидания скрипта истекло или он был прерван во время блокировки?

Мой вопрос лучше всего иллюстрируется этим примером кода PHP:

$file = fopen($filePath, "wb");
if($file !== false)
{
//Obtain exclusive lock
if(flock($file, LOCK_EX))
{
//Script times out or is terminated here
//say, due to it using too much RAM, etc.
//...

//Release exclusive lock
flock($file, LOCK_UN);
}

fclose($file);
}

Что будет с замком?

1

Решение

Я только что сделал пару тестов на следующем общем сервере:

PHP Version 5.4.34
Linux 3.12.35.1418868052 #1 SMP x86_64

И мой вывод заключается в том, что файл блокируется выпущены автоматически после завершения работы скрипта, даже в случае фатальной ошибки, ошибки тайм-аута или нехватки памяти, которая завершает работу скрипта, или если я закомментирую flock($file, LOCK_UN); функция.

3

Другие решения

Я действительно думаю, что это не выпущено автоматически. Чтобы ваш скрипт не удерживал файл в заблокированном состоянии, вам нужно зарегистрировать обратный вызов выключения и разблокировать все заблокированные файлы.

register_shutdown_function('unlock_files');

где clean_state — это функция, которая просматривает все ваши заблокированные файлы (поэтому вам нужно отслеживать их) и разблокировать их.

Функция выключения вызывается при возникновении фатальной ошибки, тайм-аута или ошибки нехватки памяти.

0

По вопросам рекламы [email protected]