`
lizhiqiang1
  • 浏览: 13414 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

PHP flock

阅读更多
  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 文件锁详细介绍

    在PHP中,flock函数就是用于实现文件锁定的一种机制。 flock是PHP提供的一个轻量级的咨询文件锁定功能。这种锁定是咨询式的,意味着它依赖于所有访问程序都必须采用相同的方式进行锁定,即它们必须都调用flock函数...

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

    在PHP中,flock()是一个文件锁定的函数,用于防止多个进程同时对同一个文件执行写操作,从而避免数据的损坏。本文将详细介绍flock()函数的作用、参数以及使用时需要注意的事项。 首先,flock()函数的主要作用是在...

    php使用flock阻塞写入文件和非阻塞写入文件的实例讲解

    2. **flock() 函数**:PHP 的 `flock()` 函数用于锁定或解锁文件,接受两个参数,第一个是文件句柄,第二个是锁定类型(如 `LOCK_EX`、`LOCK_SH`、`LOCK_UN` 和 `LOCK_NB`)。 3. **阻塞与非阻塞**:阻塞模式会挂起...

    PHP使用flock实现文件加锁的方法

    flock()是PHP中用于文件加锁的一个函数,它提供了一种简单的方法来控制多个进程对同一文件的访问,防止文件内容出现混乱。 flock()函数允许你在任何平台上执行一个简单的读取/写入模型。这意味着,无论是在Unix派生...

    PHP后台循环锁定文件.zip_PHP后台循环_php文件锁定_shell_锁定

    PHP提供了flock函数,用于对文件进行读写锁操作。在进行文件操作之前,先锁定文件可以防止其他进程在同一时刻修改文件内容,从而避免数据冲突。读锁允许其他进程同时读取文件,但不允许写入;写锁则阻止其他进程读写...

    lock:PHP 中简单的面向对象文件锁管理

    锁 标准的 PHP flock函数很难测试。 这个库为flock提供了一个现代的、面向对象的包装器。安装将以下内容添加到您的composer.json : { " require " : { " benconstable/lock " : " ~1.0 " }}用法 &lt;?php$ lock = ...

    php lock.zip_php_php lockit

    通过分析这个文件,我们可以学习如何使用PHP的flock()函数或者其他相关函数来锁定和解锁文件。 在PHP中,文件锁定通常通过以下步骤完成: 1. 打开文件:使用`fopen()`函数打开需要锁定的文件,获取文件句柄。 2. ...

    php学习心得 php初学者 php

    PHP 学习心得 PHP 是一门非常流行的服务器端脚本语言,它的应用非常广泛,特别是在 Web 开发领域。本文将总结一些 PHP 学习心得,适合 PHP 初学者...@flock($filenum,LOCK_SH);$file_data=@fread($filenum,fil...}。

    模拟flock实现文件锁定

    `flock()`是PHP中一个用于实现文件锁定的内置函数,它可以有效地帮助开发者控制对共享资源的访问。然而,在某些情况下,可能由于环境限制或特定需求,无法直接使用`flock()`函数。此时,可以考虑使用一种模拟的方式...

    最新PHP笔试试题.pdf

    在PHP中,可以使用flock()函数来锁定文件,以避免多个进程同时访问同一个文件。 12. stat()和fstat() stat()和fstat()都是PHP中的函数,用于获取文件的信息。stat()函数基于文件路径工作,而fstat()函数基于文件...

    php+文本存储登录系统_warm4po_php+文本存储登录系统_

    5. **文件锁定**:在读写文本文件时,为了避免并发访问导致的数据冲突,可以使用`flock()`函数对文件进行锁定,确保操作的原子性。 6. **错误处理**:考虑到可能出现的文件读写错误,如权限问题、文件不存在等,应...

    PHP文本计数器 代码

    为了解决这个问题,可以使用文件锁(如`flock()`函数),确保同一时间只有一个请求能够修改计数器,从而保证数据的一致性。 5. HTTP协议:计数器通常通过HTTP请求来触发,每次页面加载或特定用户行为时,都会向...

    Flock'd extension converter-开源

    4. `pclzip.lib.php`:这可能是PCLZip库的PHP实现,用于处理压缩和解压缩操作,可能在Flock'd的扩展上传或下载过程中发挥作用。 5. `flockd.php`、`index.php`、`outputs.php`、`list.php`、`setup.php`:这些都是...

    php写的通讯录适用于新手入门

    如果采用更高级的方式,可以考虑使用文件系统的flock()函数进行文件锁,确保多用户访问时的数据一致性。 数据库交互是大型应用不可或缺的部分。虽然这是一个简单的通讯录系统,但我们可以使用SQLite这样的轻量级...

    PHP实例开发源码—文本PHP访客计数器.zip

    在并发环境下,为了防止多个用户同时访问导致计数错误,通常会使用文件锁定(`flock()`)来确保同一时间只有一个请求可以操作计数器文件。这个实例可能也涵盖了这一机制,以保证数据的一致性。 5. 实战经验: 通过...

Global site tag (gtag.js) - Google Analytics