文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php教程>PHP文件处理之文件锁的疑问解答

PHP文件处理之文件锁的疑问解答

时间:2021-11-11  来源:互联网

今天PHP爱好者给大家带来在之前的文章《PHP中怎样删除一个目录(实例详解)》中详细的介绍了PHP中删除目录的相关知识,其中删除一个非空的目录稍微复杂些。本篇文章我们来看一下PHP中文件锁的相关知识,希望对大家有帮助!

在之前的文章中我们已经了解了很多的文件处理相关知识,比如写入文件、读取文件等等操作,其中有一个东西叫做文件锁。关于文件锁的理解可能会有些抽象,因为文件锁的机制一般在打开文件的时候是看不到效果的。

那文件锁到底是什么东西?他是用来做什么的?我们为什么要使用文件锁?我们要怎样去使用它?带着这些疑问下面就让我们来看一下文件锁的相关知识吧。

什么是文件锁?

首先的一个问题,简单来说,文件锁就是一种文件保护机制,可以理解为当你在读取或者写入这个文件的时候,也就是已经有一位在进行对该文件进行操作的时候,文件的一种保护机制,为例避免在文件被操作期间被另一个进行操作。

文件锁的用途

一个文件有文件锁的话,当我在使用这个文件的时候,只有我能够对该文件进行操作,除非将这个文件锁进行释放,否则别人就没法插手我对该文件的操作。同一时段只能够允许一人进行操作,防止数据错误。

若是没有文件锁,出现多个人员操作同一个文件,极有可能会造成数据的错误或者不对等,因此使用文件锁是必要的。这就是文件所得用途以及为什么要使用文件锁。

怎样去使用文件锁:flock()函数

接下来我们看一下怎样去使用这个PHP文件锁,首先我们需要知道,我们在打开文件后可以通过flock()函数来对文件进行上锁。

flock()函数的基本语法格式如下:

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

其中需要注意的是:

参数$handle表示的是文件系统的指针,也就是通过fopen()创建的文件资源;参数$operation表示的是文件锁类型;参数$wouldblock是一个可选参数,他表示的是可以将其设置为1或者true,这样的话文件锁定时就会堵塞其它进程。

下面我们来介绍一下参数$operation的类型:

  • LOCK_EX表示的是写锁,也就是在写入的时候是写锁状态,其他人不能写也没法读,只有等解锁后才能恢复。

  • LOCK_SH表示的是共享锁,理解为别人只能读,但是没法写。解锁后回复。

  • LOCK_UN表示的是解除上面两种状态。也就是解锁。

  • LOCK_NB表示的是在读取或写入的时后,当文件锁住了,就会马上返回通知访问的文件被锁了。

接下来我们通过示例来看一下,示例如下:

<?php
header("Content-Type: text/html;charset=utf-8");    //设置字符编码
$file = "test.txt";
$handle = fopen($file,'w+'); //打开文件
if(flock($handle, LOCK_EX|LOCK_NB)){  //给文件上锁
   fwrite($handle, '被锁住了');  //写入数据
   flock($handle, LOCK_UN);  //释放文件锁
}else{
   echo "锁失败了";
}
fclose($handle);//关闭文件
readfile($file);//读取文件内容
?>

输出结果:

1102.20.png

test.txt内被写入了数据:

1102.21.png

由上述示例我们便完成了对文件进行文件锁的操作,操作完成后使用fclose()函数来关闭文件;然后通过readfile()函数读取文件内容。其中需要注意的是:

当我们使用flock()函数,就是对文件进行了加锁,想要让文件自动解锁,只需要调用fclose()函数就可以了。在我们写代码的时候在使用文件锁之后还是加上解锁语句为好。

以上就是PHP文件处理之文件锁的疑问解答的详细内容,更多请关注php爱好者其它相关文章!

相关阅读更多 +
最近更新
排行榜 更多 +
元梦之星最新版手游

元梦之星最新版手游

棋牌卡牌 下载
我自为道安卓版

我自为道安卓版

角色扮演 下载
一剑斩仙

一剑斩仙

角色扮演 下载