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