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();

浙公网安备 33010602011771号