PHP | flock 函数

怎样在写入文件时锁定文件

最近更新时间 2021-01-05 17:15:17

flock 函数锁定或释放文件。

flock() 函数可用于在写入文件前锁定文件或者释放加锁的文件。fclose() 函数会自动释放文件锁。函数操作成功时返回 true,失败时返回 false。

函数定义

flock ( resource $handle , int $operation , int &$wouldblock = ? ) : bool
// 源文件位于:ext/standard/file.c
# 函数定义

PHP_FUNCTION(flock)
{
  ...
  php_flock_common(stream, operation, 2, wouldblock, return_value);
}
# define LOCK_SH 1
# define LOCK_EX 2
# define LOCK_NB 4
# define LOCK_UN 8

参数

  • checkhandle - 文件指针。
  • checkoperation - 操作类型,可进行异或运算。
    • LOCK_SH 取得共享锁定(读取时)。
    • LOCK_EX 取得独占锁定(写入时)。
    • LOCK_UN 释放锁定。
    • LOCK_NB 锁定时不堵塞(Windows不支持)。

返回值

  • checkstring - 操作成功时返回 true,失败时返回 false。

示例1: - 使用 flock() 函数锁定文件后写入数据。

<?php
/**
 * PHP flock() 函数锁定文件后写入数据。
 *
 * @since Version 1.0.0
 * @filesource
 */

// 打开文件
$fp = fopen('foo.txt', 'r+');

// 锁定文件
if(flock($fp, LOCK_EX)) {
  // 写入数据
  fwrite($fp, "Fooooooo");
  // 刷新缓存
  fflush($fp);
  // 释放锁定
  flock($fp, LOCK_UN);
}

// 关闭文件
fclose($fp);
rss_feed