我的问题最好用这个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);
}
锁会怎样?
我刚刚在以下共享服务器上进行了一些测试:
PHP Version 5.4.34
Linux 3.12.35.1418868052 #1 SMP x86_64
我的结论是,一旦脚本完成运行,文件锁定就会自动释放,即使在出现致命错误、超时或内存不足错误终止脚本的情况下,或者如果我注释掉flock($file, LOCK_UN);
函数。
我实际上认为它不会自动发布。为了确保脚本不会使文件处于锁定状态,您需要注册关闭回调并解锁所有锁定的文件。
register_shutdown_function('unlock_files');
其中clean_state是一个功能,可以遍历所有锁定的文件(因此您需要跟踪它们)并解锁它们。
当发生致命错误、超时或内存不足错误时,将调用关机函数。