【问题标题】:Test if file is locked测试文件是否被锁定
【发布时间】:2014-01-13 08:11:50
【问题描述】:

在 PHP 中,如何测试文件是否已被 flock 锁定?例如,如果另一个正在运行的脚本调用了以下内容:

$fp = fopen('thefile.txt', 'w');
flock($fp, LOCK_EX);

【问题讨论】:

  • if (flock($fp, LOCK_EX)) { 是测试和设置锁。如果返回true,则文件被该线程成功锁定,另一个-文件被其他线程锁定
  • 如果您使用LOCK_EX|LOCK_NB,则标记只能写入 - 您可以读取此文件(不在 Windows 中)

标签: php file-locking flock


【解决方案1】:
if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) {
    if ($wouldblock) {
        // another process holds the lock
    }
    else {
        // couldn't lock for another reason, e.g. no such file
    }
}
else {
    // lock obtained
}

docs 中所述,使用LOCK_NB 进行非阻塞尝试以获取锁,并在失败时检查$wouldblock 参数以查看是否有其他东西持有锁。

【讨论】:

    【解决方案2】:

    这样检查:

    if (!flock($file, LOCK_EX)) {
        throw new Exception(sprintf('File %s is locked', $file));
    }
    
    fwrite($file, $write_contents);
    

    【讨论】:

    • 这将阻塞,意味着它将等到手柄解锁。它不会抛出异常。
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2016-10-08
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多