PHP flock 文件系统函数

  • 定义和用法

    flock - 轻便的咨询文件锁定
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
    5.3.2 在文件资源句柄关闭时不再自动解锁。现在要解锁必须手动进行。
    4.0.1 增加了常量 LOCK_XXX。 之前你必须使用 1 代表 LOCK_SH,2 代表 LOCK_EX,3 代表LOCK_UN,4 代表 LOCK_NB。
  • 语法

    flock ( resource $handle , int $operation [, int &$wouldblock ] )   
    
    flock() 允许执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。 在 PHP 5.3.2版本之前,锁也会被 fclose() 释放(在脚本结束后会自动调用)。 PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。 默认情况下,这个函数会阻塞到获取锁;这可以通过下面文档中 LOCK_NB 选项来控制(在非 Windows 平台上)。
  • 参数

    参数 必需的 描述
    handle 文件系统指针,是典型地由 fopen() 创建的 resource(资源)。
    operation operation 可以是以下值之一:
    • LOCK_SH 取得共享锁定(读取的程序)。
    • LOCK_EX 取得独占锁定(写入的程序。
    • LOCK_UN 释放锁定(无论共享或独占)。
    如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。
    wouldblock 如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),可选的第三个参数会被设置为 TRUE。(Windows 上不支持)
  • 返回值

    成功时返回 TRUE, 或者在失败时返回 FALSE。
  • 示例

    <?php
    $fp = fopen("/tmp/lock.txt", "r+");
    
    if (flock($fp, LOCK_EX)) {  // 进行排它型锁定
       ftruncate($fp, 0);      // truncate file
       fwrite($fp, "写一些东西进文件\n");
       fflush($fp);            // flush output before releasing the lock
       flock($fp, LOCK_UN);    // 释放锁定
    } else {
       echo "不能获取到锁!";
    }
    
    fclose($fp);
    ?>
    
  • 相关函数

    is_dir() - 判断给定文件名是否是一个目录
    is_file() - 判断给定文件名是否为一个正常的文件
    is_link() - 判断给定文件名是否为一个符号连接
    file_exists() - 检查文件或目录是否存在
    mime_content_type() - 检测文件的 MIME 类型
    pathinfo() - 返回文件路径的信息
    stat() - 给出文件的信息