PHP文件锁

fopen——打开文件

'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

 

 

例:

<?php
$handle fopen("resource.txt""w+");
?>

flock——轻便的咨询文件锁定

flock ( resource $handle , int $operation [, int &$wouldblock ] )

-n:非阻塞,获取锁失败后立刻返回,退出码1

-x,-e:获取互斥锁,有时称为写锁

 

handle:文件系统指针,是典型地由 fopen() 创建的 resource(资源)。

operation 可以是以下值之一:

  • LOCK_SH取得共享锁定(读取的程序)。
  • LOCK_EX 取得独占锁定(写入的程序。
  • LOCK_UN 释放锁定(无论共享或独占)。
  • LOCK_NB flock函数会阻塞到获取锁

 在 PHP 5.3.2版本之前,锁也会被 fclose() 释放(在脚本结束后会自动调用)

例:()

if (($fp = fopen($file, "w+")) && flock($fp, LOCK_EX | LOCK_NB)) {

文件锁的释放:

flock($fp, LOCK_UN);
fclose($fp);

php文件锁:

<?php

function main($argc, $argv){
    //防止多个会计对账程序的运行
    $fp = singleton_lock("singleton");
    while(1){
        sleep(1000);
    }
    singleton_unlock($fp);
    return true;
}

function singleton_lock($file){
    $fp = 0;
    if(($fp = fopen($file, "w+")) && flock($fp, LOCK_EX | LOCK_NB)){
        UB_LOG_NOTICE("lock ok");
        return $fp;
    }else{
        UB_LOG_NOTICE("lock fail");
        exit(-1);
    }
}
/**
     * @param
     * @param
     * @return
     */
function singleton_unlock($fp){
    UB_LOG_NOTICE("unlock");
    flock($fp, LOCK_UN);
    fclose

($fp);
}

main();

 

 



posted @ 2021-02-02 15:47  dsfsadfdgd  阅读(132)  评论(0)    收藏  举报