flock

(PHP 4, PHP 5)

flock — 轻便的咨询文件锁定

说明

bool flock ( int $handle , int $operation [, int &$wouldblock ] )

PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。

Note:

在 Windows 下 flock() 将会强制执行。

flock() 操作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一:

要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。

要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。

要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。

如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。

flock() 允许执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),可选的第三个参数会被设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。

成功时返回 TRUE, 或者在失败时返回 FALSE.

Example #1 flock() 例子

$fp = fopen("/tmp/lock.txt", "w+");

if (flock($fp, LOCK_EX)) { // 进行排它型锁定

fwrite($fp, "Write something here ");

flock($fp, LOCK_UN); // 释放锁定

} else {

echo "Couldn't lock the file !";

}

fclose($fp);

?>

Note:

由于 flock() 需要一个文件指针, 因此可能不得不用一个特殊的锁定文件来保护打算通过写模式打开的文件的访问(在 fopen() 函数中加入 "w" 或 "w+")。

Warning

flock() 不能用于 NFS 以及其它一些网络文件系统。详细资料查看自己操作系统的文档。

在部分操作系统中 flock() 以进程级实现。当用一个多线程服务器 API(比如 ISAPI)时,可能不可以依靠 flock() 来保护文件,因为运行于同一服务器实例中其它并行线程的 PHP 脚本可以对该文件进行处理。

flock() 不支持旧的文件系统,如 FAT 以及它的派生系统。因此,此环境下总是返回 FALSE(尤其是对 Windows 98 用户来说)。

php中文件锁函数flock函数用法简介:

语法:

bool flock ( int $handle , int $operation [, int &$wouldblock ] )

flock() 操作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一:

1. 要取得共享锁定(读取程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)

2. 要取得独占锁定(写入程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)

3. 要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)

4. 如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)

看下面代码:

a.php

$file = “temp.txt”;

$fp = fopen($file , 'w‘);

if(flock($fp , LOCK_EX)){

fwrite($fp , “abc”);

sleep(10);

fwrite($fp , “123”);

flock($fp , LOCK_UN);

}

fclose($fp);

?>

b.php

$file = “temp.txt”;

$fp = fopen($file , 'r');

echo fread($fp , 100);

fclose($fp);

?>

运行 a.php 后,马上运行 b.php ,可以看到输出:

abc

等 a.php 运行完后运行 b.php ,可以看到输出:

abc

123

显然,当 a.php 写文件时数据太大,导致时间比较长时,这时 b.php 读取数据不完整,在对b.php做修改

修改 b.php 为:

$file = “temp.txt”;

$fp = fopen($file , 'r‘);

if(flock($fp , LOCK_EX)){

echo fread($fp , 100);

flock($fp , LOCK_UN);

} else{

echo “Lock file failed…”;

}

fclose($fp);

?>

运行 a.php 后,马上运行 b.php ,可以发现 b.php 会等到 a.php 运行完成后(即 10 秒后)才显示:

abc

123

读取数据完整,但时间过长,他要等待写锁释放,再对b.php做修改。

修改 b.php 为:

$file = “temp.txt”;

$fp = fopen($file , 'r');

if(flock($fp , LOCK_SH | LOCK_NB)){

echo fread($fp , 100);

flock($fp , LOCK_UN);

} else{

echo “Lock file failed…”;

}

fclose($fp);

?>

运行 a.php 后,马上运行 b.php ,可以看到输出:

Lock file failed…

证明可以返回锁文件失败状态,而不是向上面一样要等很久。

脚本之家小编结论:

建议作文件缓存时,选好相关的锁,不然可能导致读取数据不完整,或重复写入数据。

file_get_contents 好像选择不了锁,不知道他默认用的什么锁,反正和不锁得到的输出一样,是不完整的数据。

php 查看文件锁定状态_PHP flock 文件锁详细介绍相关推荐

  1. php 查看文件锁定状态_php文件锁死锁怎么办

    什么是死锁 学过操作系统的通同学,都了解多线程的概念.在多线程中访问公共资源,需要对资源加锁.访问结束后,释放锁.如果没有释放锁,那么下一个线程来获取资源的时候就会永远都无法获取资源的锁,于是这个线程 ...

  2. php 查看文件锁定状态_Photoshop脚本 查看当前图层的锁定状态

    本节将演示如何使用脚本,查看当前图层的锁定状态信息.首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 接着输入脚本代码: //定义一个变量[l ...

  3. git status查看文件的状态

    提要 通过git status查看文件的状态时,出现了一些如下的提示: jidfj@DESKTOP-2DAKPIL MINGW64 /g/excise/zhushouProject/ZhuShou ( ...

  4. java如何解除文件锁定状态_如何使用Python解锁锁定的文件和文件夹(mac)

    在我的脚本的主要目的完成后,作为"清理",调用一个函数来递归查看每个文件夹并删除以预定的一组扩展名结尾的所有文件 . 我在测试期间,发现一些文件扩展名在要删除的列表中的文件实际上会 ...

  5. git status 查看文件更改状态

    文章目录 1. 前言 2. 新文件 3. 修改文件 4. 删除文件 5. 文件状态总结 6. git status -s 简短输出结果 1. 前言 status 命令用于查看工作区中文件的状态 git ...

  6. pdf文件丢失怎么办?别慌,详细介绍4种恢复方法

    pdf文件丢失怎么找到?别慌,停止往电脑上写入新的内容,重要的事情说三遍!下面,我们将会向您详细介绍在pdf文件丢失后的多种方法,请继续阅读以获得更多帮助! 方法1.运用Windows搜索功能 很多时 ...

  7. 如何在服务器查看文件,如何在服务器地址上查看文件夹

    如何在服务器地址上查看文件夹 内容精选 换一换 介绍单机场景和集群场景配置Ansible主机信息. 方法一:在VSCode上选择"文件 > 首选项 > 设置",再选择& ...

  8. QuickLook v3.7.1 按下空格键 快速查看文件内容

    本帖最后由 lcllfj233 于 2022-3-5 21:32 编辑 QuickLook 是一款 Windows 下的桌面快速预览工具,开源.免费.只需要用鼠标选中文件,然后点击空格,即可快速预览, ...

  9. 网站锁定php文件命令,PHP文件锁定读写的一点注意_php

    都说文本方式容易出现文件锁定失效等乱七八糟的问题. 其实并不是失效, 而是写法有些不对. 被 lock_ex 后的文件 再以read模式 fopen 的话将读到空内容!!! 如果没有判断就把它作操作后 ...

最新文章

  1. 数据库高性能读写分离集群操作说明
  2. 恭喜!神策数据荣登投资界 2020 年 Venture50 风云榜
  3. suse 安装php5.4_SUSE LINUX 安装Apache2 + PHP5 (普通安装,不是yum)
  4. ACM算法书籍推荐zz
  5. 认识安全测试之SQL注入
  6. 计算机系统基础知识——校验码之海明码(Hamming Code)
  7. R语言堆叠占比柱状图_R语言执行单因素方差分析及多重比较
  8. HashTable,HashMap和ConcurrentHashMap的区别?
  9. MAC机上JAVA对话框死锁的案例之一
  10. QML 获取当前时间戳 yyyy-MM-dd hh:mm:ss.zzz
  11. c语言数码管按下k1显示1,单片机C语言程序的设计实训100例_基于8051+PROTEUS仿真1.docx...
  12. 分解GIF图片、合成GIF图片
  13. 全国计算机能力挑战赛含金量高吗,大学里,有哪些含金量高,又容易得奖的国家级比赛?...
  14. linux下通过V4L2驱动USB摄像头
  15. 【新手福音】分享一个自己制作的机器学习工具集合
  16. 计算机汉字录入试题,上机试题:汉字录入题.doc.doc
  17. 论文阅读问题总结(六):Meta-Learning with Domain Adaption for Few-shot Learning Under Domain Shift
  18. 服务器v3 v4性能,至强E5 v4性能表现测试
  19. opencv畸变校正的两种方法
  20. pytorch中的register_parameter()和parameter()

热门文章

  1. TestNG 入门教程
  2. Java 并发:Executor ExecutorService ThreadPoolExecutor
  3. SQL Server XML性能优化(Best Practices)
  4. php事务处理深入学校,php事务处理实例详解
  5. js 只准输入数字_js验证如何限制文本框只能输入数字
  6. 增量式pid调节方式有何优点_增量式PID的“假抗饱和”性
  7. 修改节点大小_重磅前瞻!K8S 1.18即将发布:OIDC发现、Windows节点支持,还有哪些新特性值得期待?...
  8. 根据mysql生成数据库设计文档,第100篇博文纪念 | C# 根据数据库表结构生成DOC数据库文档(1)...
  9. 大学计算机基础 课程的说课,大学计算机基础资料说课稿.ppt
  10. python必刷面试_Python面试必刷题系列(5)