如果脚本超时或在锁定时终止,PHP文件锁会发生什么?

时间:2015-02-01 00:30:25

标签: php locking flock

我的问题最好用这个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);
}

锁会发生什么?

2 个答案:

答案 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函数。