函数名:flock()
适用版本:所有版本
用法:flock() 函数用于对文件进行排它性锁定,以确保在同一时间只有一个进程可以访问该文件。它可以用于防止多个进程同时对同一文件进行读写操作,避免数据冲突。
语法:bool flock ( resource $handle, int $operation [, int &$wouldblock ] )
参数:
- $handle:文件句柄,通过 fopen() 或者其他文件相关函数获得。
- $operation:锁定的操作类型,可以是以下常量之一:
- LOCK_SH:共享锁定(读锁),其他进程可以读取该文件,但不能写入。
- LOCK_EX:独占锁定(写锁),其他进程既不能读取也不能写入该文件。
- LOCK_UN:释放锁定,解除锁定状态。
- &$wouldblock(可选):传递一个变量来接收是否会阻塞锁定操作,默认为 false。如果设置为 true,则表示锁定操作会因为其他进程已经锁定了文件而被阻塞。
返回值:成功时返回 true,失败时返回 false。
示例:
$filename = 'example.txt';
$handle = fopen($filename, 'r+');
if (flock($handle, LOCK_EX)) {
// 获得独占锁定,可以对文件进行写操作
fwrite($handle, 'Hello, PHP!');
// 解除锁定
flock($handle, LOCK_UN);
} else {
// 锁定失败,处理错误逻辑
echo '无法锁定文件';
}
fclose($handle);
在上面的示例中,我们打开了一个文件并获取了文件句柄,然后使用 flock() 函数将文件锁定为独占模式。在锁定期间,我们可以对文件进行写操作。最后,通过调用 flock() 函数并传递 LOCK_UN 参数来解除锁定。
请注意,flock() 函数只能用于同一台服务器上的进程之间进行文件锁定,并且只对在 PHP 脚本中使用了 flock() 函数进行锁定的文件有效。