当写为LOCK_EX锁 且 读为LOCK_SH锁时最为妥当,经测试,这时情况如下:

1, 先运行w.php,马上支行r.php 后 程序会先等写入后再读取

2, 先运行r.php,再马上支行w.php后 当写操作执行LOCK_EX时就已经把文件内容清空,LOCK_SH并不会影响写操作清空,也就是说具体流程如下:

  a) 运行r.php ,加LOCK_SH锁 , 马上支行w.php,加LOCK_SH,文件被清空

b) 等待r.php读出为空,运行完毕后,w.php再开始运行,完毕

3,如果将第二步中的w.php中的 fwrite换成a就可以先读出原有的,等读完后,写才执行

4,如果两个都读 或都写,那么就按 先后顺序等待执行

其中很像队列机制

最后解决办法,在同一锁内读后再写,可以解决并发冲突:

<?php
@ini_set('implicit_flush',1);
ob_implicit_flush(1);
@ob_end_clean(); $file = "temp.txt";
$fp = fopen($file, 'r+');
flock($fp, LOCK_EX) or die("lock error"); echo '<br />LOCK_EX 哥先读5s....'; for ($i=5; $i>0; --$i)
{
echo $i;
sleep(1);
} echo '<br />'.fread($fp, 100);
echo '<br /> 被读了出来 ,LOCK_UN'; fwrite($fp ,'#'); //然后指针到文件尾,此时再写入文件尾部
echo '<br />#';
flock($fp, LOCK_UN);
fclose($fp);
?> --------------以上是把在文件末尾加新写入的内容----------------
有的时候我们需要将写入的内容写在文件头(当然由于指针问题会覆盖):
<?php
//计算文件大小
echo filesize('temp.txt');
$fp = fopen('temp.txt', 'r+'); flock($fp, LOCK_EX);
fwrite($fp, '10001');
sleep(2);
$str = fread($fp , 1024 * 100);
echo 'content : ' . $str; flock($fp, LOCK_UN);
?>
这时候的好处是文件的大小不会变大,方便打开和读取,我在计算幸运数据为减轻服务器压力就是这样写的

php 文件锁的更多相关文章

  1. php文件锁

    前言 1.锁机制之所以存在是因为并发问题导致的资源竞争,为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态.作为锁机制中的一种,PHP 的文件锁也是为了应对资源竞争.假设一个应用场景 ...

  2. JAVA NIO简介-- Buffer、Channel、Charset 、直接缓冲区、分散和聚集、文件锁

    IO  是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. Java标准io回顾 在Java1.4之前的I/O系统中,提供 ...

  3. Linux文件锁flock

    Linux文件锁flock 在多个进程同时操作同一份文件的过程中,很容易导致文件中的数据混乱,需要锁操作来保证数据的完整性,这里介绍的针对文件的锁,称之为“文件锁”-flock. flock,建议性锁 ...

  4. JAVA基础知识之NIO——Buffer.Channel,Charset,Channel文件锁

    NIO机制 NIO即NEW IO的意思,是JDK1.4提供的针对旧IO体系进行改进之后的IO,新增了许多新类,放在java.nio包下,并对java.io下许多类进行了修改,以便使用与nio. 在ja ...

  5. Linux 文件锁

    当多个进程同时访问操作同一个文件时,我们怎么保证文件数据的正确性. linux通常采用的方法是文件上锁,来避免共享资源的产生竞争状态. 文件锁包括建议性锁和强制性的锁: 建议性的锁 :顾名思义,相对温 ...

  6. php中并发读写文件冲突的解决方案(文件锁应用示例)

    PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...

  7. php原子操作,文件锁flock,数据库事务

    php原子操作,文件锁flock,数据库事务 php没有继承posix标准支持的unix锁,只封装了一个linux系统调用flock(信号量也能做成锁),按理也是可以使用锁机制的,虽然效率低一点.ph ...

  8. linux文件锁

    http://blog.chinaunix.net/uid-25324849-id-3077304.html 在SHELL中实现文件锁,有两种简单的方式.(1)一是利用普通文件,在脚本启动时检查特定文 ...

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

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

  10. Linux同步机制(二) - 条件变量,信号量,文件锁,栅栏

    1 条件变量 条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足. 1.1 相关函数 #include <pthread.h>  pthread_cond_t cond ...

随机推荐

  1. laravel/lumen 单元测试

    Testing Introduction Application Testing Interacting With Your Application Testing JSON APIs Session ...

  2. 修复sublime text系统右键菜单

    修复sublime text系统右键菜单 安装完Sublime Text2后,拿掉电脑里面的备用硬盘,导致每次使用Open with Sublime Text2的时候,都会出错,打开注册表,找到 HK ...

  3. ios7 tableview scrollsToTop 不执行处理方法

    ios7中调用[self.tableview scrollsToTop] 没有效果(ios8中也没有效果) stackflow 处理方法: [self.tableviewscrollRectToVis ...

  4. day4 函数

    面向对象:-->类-->class面向过程:-->过程-->def函数式编程:-->函数-->def 函数是逻辑结构化和过程化的一种编程方法 使用函数的三大优点:减 ...

  5. Windows Driver Frameworks

    MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff557565(v=vs.85).aspx

  6. [DFNews] EnCase v7.08发布

    EnCase v7.08 近日正式发布,7.08增加了Evidence Processor Manager以及Evidence Processor,不仅可以在本地实现证据处理队列,也支持了通过网络进行 ...

  7. AFNnetworking详解

    AFN 一.什么是AFN 全称是AFNetworking,是对NSURLConnection的一层封装 虽然运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛 AFN的githu ...

  8. Struts2:MyEclippse中使用struts-default.xml中定义的拦截器(timmer,logger)

    环境:MyEclipse 2015 Stable 2.0:struts2-core-2.3.16.1.jar等 struts.xml <struts> <package name=& ...

  9. RestoreDirectory 引起的BUG

    IIRC, in windows XP when you press Save on a SaveFileDialog (or Open on a OpenFileDialog) the direct ...

  10. 安装过程中出现PKG_CONFIG_PATH的问题解决方法

    在安装开源软件的过程中, 经常会碰到提示配置PKG_CONFIG_PATH路径, 或者直接提示没有安装某某库, 但是我们已经安装了啊. 其实造成这种情况的原因很简单, 就是安装的目录不能被依赖程序找到 ...