于php中文件锁函数flock函数用法简介,希望通过本文的介绍大家对于Linux方面能够更加的了解
  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() 例子
  复制代码 代码如下:
  <?php
  $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
  复制代码 代码如下:
  <?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
  复制代码 代码如下:
  <?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 为:
  复制代码 代码如下:
  <?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 为:
  复制代码 代码如下:
  <?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 flock 文件锁的更多相关文章

  1. linux使用flock文件锁解决crontab冲突问题

    * * * * * flock -xn /dev/shm/redis.lock -c "/usr/local/bin/redis-server" 可以用flock命令,配合使用rs ...

  2. linux使用flock文件锁

    使用linux flock 文件锁实现任务锁定,解决冲突 格式: flock [-sxun][-w #] fd# flock [-sxon][-w #] file [-c] command flock ...

  3. flock文件锁的学习和应用

    flock文件锁 学习与应用  2016-9-20 作用: 可以使用flock文件锁,避免指定命令的同时执行.(实现任务锁定,解决冲突) 用法: # flock -xn /opt/lock_file ...

  4. 使用linux flock文件锁实现任务锁定避免计划任务程序冲突

    格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command选项-s, --shared: 获得一个共享锁 -x, --exclusi ...

  5. flock文件锁

    linux中的定时任务crontab会定时执行一些脚本,但是脚本的时间往往无法控制,当脚本的执行时间过长,可能会导致上一次任务的脚本还没执行完,下一次任务的脚本又开始执行的问题.这种情况下会出现一些并 ...

  6. 关于flock文件锁的阻塞与非阻塞

    阻塞模式,程序会一直等待. <?php $fp = fopen("lock.txt", "r"); if(flock($fp,LOCK_EX)) { // ...

  7. flock

    为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态.作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争.假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有 ...

  8. [Linux] 服务器镜像定时备份解决方案 crontab+rsync+flock

    两台服务器定时同步文件解决方案: 环境: 主机:192.168.1.1 镜像机:192.168.1.2 需要将主机内容备份至镜像机(假设用户都为root) 备份内容为 /export 目录下所有内容至 ...

  9. PHP中文件锁与进程锁的使用区别

    php中文网的一篇文章,收为己用了.源地址: http://www.php.cn/php-weizijiaocheng-376853.html 本篇文章主要介绍了PHP 文件锁与进程锁的使用示例,小编 ...

随机推荐

  1. js文字转移效果

    这个例子算是有点样子的. 思路: 字符串操作.左框里面先是预设的.点击按钮时截取左框中的字符串的前一个字符到右框里的字符串后面,以此循环.点击按钮时按钮变为灰色,在循环完成后恢复.计数的总数(右边)是 ...

  2. Linux 普通用户拿到root权限及使用szrz命令上传下载文件

    1.如何拿到root权限 在shell里如果看到你的命令输入行最前面显示的是 $符号,说明目前账号只有系统的普通权限. 输入:sudo su 这时能看到shell的输入行最前面已经显示的是#号,说明已 ...

  3. Ubuntu 14.04 编写service 服务

    有时我们需要将特定操作封装成服务,通过服务启动停止,例如nginx的启动停止,service nginx start 或者service nginx stop 下面我们将编写一个demo cd /et ...

  4. sudo: unable to resolve host myhostname: Connection timed out

    第一种 原因,/etc/hostname 中的hostname 与/etc/hosts 里面的不对应,导致无法解析 将两个文件的hostname改成一样的即可. /etc/hostname aaa / ...

  5. Ubuntu 下载

    http://releases.ubuntu.com/

  6. ESXi时间同步

    ●建立NTP服务器 1,修改下面的注册表键把值设置为1.注册表键:HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\services\W32Time\TimeP ...

  7. CSS实现和选择器

    CSS实现和选择器 本课内容: 一.实现CSS四种方式 1,每个html标签中都有一个style样式属性,该属性的值就是css代码.(针对一个标签)2,使用style标签的方式. 一般都定义在head ...

  8. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  9. [.NET开发] C#实现发送手机验证码功能

    之前不怎么了解这个,一直以为做起来很复杂. 直到前两天公司要求要做这个功能. 做了之后才发现 这不过就是一个POST请求就能实现的东西.现在给大家分享一下,有不足之处还请多多指教. 废话不多说 直接上 ...

  10. R & ggplot2 & Excel绘图(直方图/经验分布图/QQ图/茎叶图/箱线图)实例

    持续更新~ 散点图 条形图 文氏图 饼图 盒型图 频率直方图 热图 PCA图 3D图 火山图 分面图 分面制作小多组图 地图 练习数据: year count china Ame jap '12 2. ...