- 论坛徽章:
- 0
|
主要提供了一种思路。
$lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。
其实最关键就是有个标识符来表示当前这个文件的状态, $lock0和$lock1就是起这样的作用。
- <?php
- // Lock a file, timing out if it takes too long.
- function lock ($lock, $tries) {
- $lock0 = ".{$lock}0";
- $lock1 = ".{$lock}1";
- for ($i=0; $i<$tries; $i++) {
- if (!is_file($lock0)) {
- touch($lock0);
- if (!is_file($lock1)) {
- touch($lock1);
- return 1;
- }
- }
- usleep(100);
- }
- return 0;
- }
- // Unlock a file.
- function unlock ($lock) {
- unlink(".{$lock}1");
- unlink(".{$lock}0");
- }
- // Usage example.
- $filename = "somefile";
- $data = "stuff and thingsn";
- $tries = 10;
- if (lock($filename, $tries)) {
- $h = fopen($filename, "a") or die();
- fwrite($h, $data);
- fclose($h);
- /**
- * 另外一个进程写文件,检查是否锁定
- */
- if (lock($filename, $tries)) {
- $h2 = fopen($filename, "a") or die();
- fwrite($h2,'check lock');
- fclose($h2);
- }else{
- //die("Failed to lock $filename after ".($tries*100)." milliseconds!";
- }
- unlock($filename);
- } else {
- //die("Failed to lock $filename after ".($tries*100)." milliseconds!";
- }
- ?>
复制代码
[ 本帖最后由 caincheung 于 2008-10-4 06:14 编辑 ] |
|