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