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