• PHP flock() 函数 php中的文件锁定机制


    举一个例子:

    假设一个文件读取的过程,有数万人在同时操作,那么极可能a用户刚刚写入,b用户也写入了,两者以至于混乱,或者在读取的时候,读取到别人写的数据。就好比上公共厕所,去厕所的时候要把门给打开上,上厕所的时候要把门给关上,上完了在打开门的一个过程,倘若不关门就可能导致混乱。

    lock正是“锁”的意思。

    语法

    flock(file,lock,block)
    参数描述
    file 必需。规定要锁定或释放的已打开的文件。
    lock 必需。规定要使用哪种锁定类型。
    block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。

    说明

    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)。

     案例:

    <?php 
    $file = "./test1.txt";
    $f = fopen($file, 'a');
    if(flock($f, LOCK_EX)){#上厕所要上锁,因为执行的是fwrite(即写入)所以是LOCK_EX
        fwrite($f, "hello world!");
    }
    flock($f,LOCK_UN);#要释放,也就是打开厕所的门。
    fclose($f);
     ?>
  • 相关阅读:
    uboot的mtd功能支持
    ARM920T系统总线时序分析
    NorFlash
    编译u-boot命令和u-boot常用命令
    uboot启动linux的过程
    debug(fmt,args...)调试
    APCS
    You've got to find what you love
    debian , ubuntu 截取下拉菜单
    关于bash的shellshock漏洞
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6410382.html
Copyright © 2020-2023  润新知