于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. 【译】第2节--- 什么是Code First?

    原文链接:http://www.entityframeworktutorial.net/code-first/what-is-code-first.aspx EF从EF4.1中引入了Code-Firs ...

  2. Codeforces Beta Round #95 (Div. 2) C. The World is a Theatre 组合数学

    C. The World is a Theatre There are n boys and m girls attending a theatre club. To set a play " ...

  3. 使用better-scroll遇到的问题

    项目中想给侧边栏添加一个滚动效果,用better-scroll帮助实现,引入better-scroll后,给外层最大盒子添加了<aside ref="asideMenu"&g ...

  4. IdentityServer3零星笔记

    Scope 是什么?有哪几种类型?每种类型都怎么使用? StandardScopes.All是什么概念? 解释:在Scope的Claims属性里包含的所有声明(类型是ScopeClaim,它的name ...

  5. 雷林鹏分享:Ruby 安装 - Windows

    Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤. 注意:在安装时,您可能有不同的可用版本. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 R ...

  6. 常用HTTP contentType与后端处理方式

    常用HTTP contentType与后端处理方式 1.Content-Type:application/x-www-form-urlencoded; charset=UTF-8 前端export.j ...

  7. WPF几种高级绑定

    (1)Binding  + RelativeSource + AncestorType 模式  , 根据关联源所指定的类型,可动态绑定指定类型的Path属性(Path可以省略)(PS:动态指父级在运行 ...

  8. 快速搭建一个简易的KMS 服务

    xu言: 之前,闹的沸沸扬扬的KMS激活工具自身都存在问题的事.让我们对以前的什么小马激活.kms激活.各种激活工具都去打了一个深深的“?”,到底哪些能用.哪些不能用.有些还注明的里面必须要关闭杀毒软 ...

  9. codeforces 555c// Case of Chocolate// Codeforces Round #310(Div. 1)

    题意:直角边为n的网格巧克力,一格为一块,选择斜边上一点,从左或上吃,直到吃到空气,称为一次操作.给出几个操作,问各能吃几块.如果x是当前要吃的横坐标,在已经吃过的中找x1>=x的第一个x1,即 ...

  10. 30 进程process

    进程模块  process Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动) ...