当前位置: 首页 > 编程笔记 >

PHP文件锁函数flock()详细介绍

程胡非
2023-03-14
本文向大家介绍PHP文件锁函数flock()详细介绍,包括了PHP文件锁函数flock()详细介绍的使用技巧和注意事项,需要的朋友参考一下

文件操作系统是在网络环境下完成的,可能有多个客户端用户在同一个时刻对服务器上的同一个文件访问。当这种并发访问产生时,很可能会破坏文件中。例如一个用户正在向文件中写入数据,当还没有写完时,其他用户在这一时刻也向这个文件中写数据,就会造成数据写入混乱。还有,当用户没有将数据写完时,其他用户就去获取这个文件中的内容,也会得到残缺的数据

在PHP中提供了flock()函数,可以对文件使用锁定机制(锁定或释放文件)。当一个进程在访问文件时加上锁,其他进程要想对该文件进行访问,则必须等到锁定被释放以后。这样就可以避免在并发访问同一个文件时破坏数据。该函数的原型如下:


bool flock(int handle,int operation[,int&wouldblock])             //轻便的咨询文件锁定


第一个参数handle必须是一个已经打开的文件资源,第二个参数opeation也是必需的,规定使用哪种类型。operation可以是以下值之一:
★LOCK_SH取得共享锁定(从文件中读取数据时使用)。
★LOCK_EX取得独占锁定(向文件中写入数据时使用)。
★LOCK_UN释放锁定(无论共享或独占锁,都用它释放)。
★LOCK_NB附加锁定(如果不希望flock()在锁定时堵塞,则应在上述锁定后加上该锁)。

如果锁定会堵塞的话(已经被flock()锁定的文件,再次锁定时,flock()函数会被挂起,这时成为锁定堵塞),也可以将可选的第三个参数设定为1,则当进行锁定时会阻挡其他进程。锁定操作也可以被fclose()释放。为了让flock()函数发挥作用,在所有访问文件的程序中都必须使用相同的方式锁定文件。该函数如果成功则返回TRUE,失败则返回FALSE。

 类似资料:
  • 我很难理解为什么flock()在以下场景中不能正常工作。 下面的代码放在两个不同的PHP脚本中,一个是“test1.PHP”,另一个是“test2.PHP”。代码的要点是创建一个其他进程(正确使用flock()代码)都无法写入的文件。将有许多不同的PHP脚本尝试获取此文件的独占锁,但在任何给定时间只有一个脚本应该具有访问权限,其余所有脚本在无法获取锁时都会正常失败。 我测试这个的方法非常简单。“t

  • 本文向大家介绍PHP ignore_user_abort函数详细介绍和使用实例,包括了PHP ignore_user_abort函数详细介绍和使用实例的使用技巧和注意事项,需要的朋友参考一下 ignore_user_abort 设置与客户机断开是否会终止脚本的执行。 本函数返回 user-abort 设置的之前的值(一个布尔值)。 int ignore_user_abort ([ string $

  • 本文向大家介绍Mysql数据库锁定机制详细介绍,包括了Mysql数据库锁定机制详细介绍的使用技巧和注意事项,需要的朋友参考一下 前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详

  • 本文向大家介绍JavaScript中的console.log()函数详细介绍,包括了JavaScript中的console.log()函数详细介绍的使用技巧和注意事项,需要的朋友参考一下 对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻断JavaScript程序的执行,从而造成副作用;而console.log

  • 本文向大家介绍JavaScript中的console.time()函数详细介绍,包括了JavaScript中的console.time()函数详细介绍的使用技巧和注意事项,需要的朋友参考一下 如果需要在Web调试过程中知道代码执行的时间,那么可以通过在JavaScript代码中添加console.time()语句和console.timeEnd()语句来对程序的执行进行计时。以下面这个耗时较长的f

  • 本文向大家介绍JavaScript中的console.group()函数详细介绍,包括了JavaScript中的console.group()函数详细介绍的使用技巧和注意事项,需要的朋友参考一下 在使用console.log()或者其它日志级别的控制台输出功能时,日志输出是没有层级关系的。当程序中日志输出较多时,这一局限性将带来不小的麻烦。为了解决这一问题,可以使用console.group()。