PHP LOCK_EX+LOCK_NB 一个文件

PHP LOCK_EX+LOCK_NB on a file

我们可以在文件上添加 LOCK_EX+LOCK_NB 吗?这在语法上是否正确? 如果是,它与 LOCK_EX|LOCK_NB

有何不同
$fh = fopen('guestbook.txt','a') or die($php_errormsg); 
flock($fh,LOCK_EX+LOCK_NB) or die($php_errormsg);

谢谢

诸如 LOCK_EXLOCK_NB 之类的标志将被定义为具有 2 的幂的值。它们旨在通过按位或(| 运算符)组合为产生位域。

实际使用的数值如下:

LOCK_SH = 1;
LOCK_EX = 2;
LOCK_NB = 4;
LOCK_UN = 8;

现在会出现加法恰好给出与按位或相同的结果的情况(例如当对两个单独的标志进行运算时,或者更一般地,对不共享任何标志的两个位字段进行运算)。但是,这是不可取的,因为如果在两个操作数中设置相同的标志,则会导致进位,从而产生意想不到的后果。

考虑这个例子:

$flags = LOCK_EX | LOCK_NB;
flock($fh, $flags | LOCK_NB);  // ensure that call is non-blocking

在这种形式中,LOCK_NB 位已经在 $flags 中设置并不重要;传递给 flock 的第二个参数仍然等于 LOCK_EX | LOCK_NB(数值为 6)。如果使用 + 代替,它将是 10(即 LOCK_EX | LOCK_UN),这不是预期的。