1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP flock

作者:用户 来源:互联网 时间:2017-12-01 13:48:07

file

PHP flock - 摘要: 本文讲的是PHP flock,PHP flock() 函数锁定或释放文件。  若成功,则返回 true。若失败,则返回 false。  flock() 操作的 file 必须是一个已经打开的文件指针。  lock 参数可以是以下值之一:  要取得共享锁定(读取的程序),

PHP flock() 函数锁定或释放文件。
  若成功,则返回 true。若失败,则返回 false。
 flock() 操作的 file 必须是一个已经打开的文件指针。
  lock 参数可以是以下值之一:
  要取得共享锁定(读取的程序),将 lock 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。 要取得独占锁定(写入的程序),将 lock 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。 要释放锁定(无论共享或独占),将 lock 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。 如果不希望 flock() 在锁定时堵塞,则给lock 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。
  提示:可以通过 fclose() 来释放锁定操作,代码执行完毕时也会自动调用。
  注释:由于 flock() 需要一个文件指针, 因此可能不得不用一个特殊的锁定文件来保护打算通过写模式打开的文件的访问(在 fopen() 函数中加入 "w" 或 "w+")。
<?php$file = fopen("test.txt","w+");// 排它性的锁定 if (flock($file,LOCK_EX)) { fwrite($file,"Write something");// release lock flock($file,LOCK_UN);} else { echo "Error locking file!";} fclose($file);?>

flock在官方文档里的解释是:flock() 允许你执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),请将可选的第三个参数设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。
简单来说,就是对一个文件进行锁定操作,使得多进程访问该文件时受到限制,从而防止冲突。
举个例子,
<?php$file = fopen("test.txt","w+");if (flock($file,LOCK_EX))  {  fwrite($file,"Write something");  flock($file,LOCK_UN);  }else  {  echo "Error locking file!";  }fclose($file);?>

1.这段代码的意思是,以读写方式打开文件test.txt,当一个用户调用该php页面时,即对test.txt文件进行操作,那么就会执行flock($file,LOCK_EX)代码,即将test.txt文件进行独占锁定(该文件只能由该用户进行读写操作),那么如果有其他新的用户想访问该文件,就会被阻塞,直到前者关闭文件(释放锁定)。
2.如果将代码改成flock($file,LOCK_EX+LOCK_NB)表示锁定时直接返回错误,那么如果有新的用户访问该文件,就会输出“Error locking file!”
3.该函数的语法是flock(file,lock,block),其中file必需。规定要锁定或释放的已打开的文件。
lock 必需。规定要使用哪种锁定类型。
block可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程

以上是PHP flock的全部内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有其他相关内容,欢迎继续使用右上角搜索按钮进行搜索file , 的 是 ,以便于您获取更多的相关知识。