22) perl のロック関数よりPHPのロック関数を作成

  perl のロック関数 「lockbydir」



  
# **********************************************************
# ロック関数
# **********************************************************
sub lockbydir {

	local($ret) = 1;

	if ( -e $lock ) {
		local($laststamp) = (stat($lock))[9];
		if ( $laststamp < time - 60 ) {
			rmdir( $lock );
		}
	}

	local($cnt) = 0;

	while( 1 ) {
		if ( mkdir( $lock ) ) {
			last;
		}
		$cnt++;
		if ( $cnt > $lockcnt ) {
			$ret = 0;
			last;
		}
		sleep(1);
	}

	return $ret;

}

  

  ディレクトリを作成してみる



  
<?
	$lock = "lock";

	print mkdir( $lock, 0777 );
?>

  

「実行結果」
1

  stat 関数で、作成したディレクトリの情報にアクセスする

  
<?
	$lock = "lock";

	print stat( $lock );
?>

  

「実行結果」
Array

  
<?
	$lock = "lock";

	$ret = stat( $lock );
	for( $i = 0; $i < count($ret); $i++ ) {
		print $i+1 . ") " . $ret[$i] . "<br>";
	}
?>

  

「実行結果」
1) 2
2) 0
3) 16895
4) 1
5) 0
6) 0
7) 2
8) 0
9) 1043728934
10) 1043728934
11) 1043728934
12) -1
13) -1
14)
15)
16)
17)
18)
19)
20)
21)
22)
23)
24)
25)
26)

  現在の時間

  
<?
	print time();
?>

  

「実行結果」
1043730048

  以上の情報を元にロック関数を作成して「関数のみ」をテスト

  
<?
error_reporting (E_ERROR | E_PARSE | E_NOTICE);

$lock		= "lock";
$lockcnt	= 3;

lockbydir();

# **********************************************************
# ロック関数
# **********************************************************
function lockbydir( ) {

	global $lock;
	global $lockcnt;

	$ret = 1;

	if ( file_exists( $lock ) ) {
		$astamp = stat($lock);
		$laststamp = $astamp[9];
		if ( $laststamp < time() - 60 ) {
			rmdir( $lock );
			print "古いディレクトリを削除<br>";
		}
	}

	$cnt = 0;

	while( 1 ) {
		if ( mkdir( $lock ) ) {
			print "新しいディレクトリを作成<br>";
			break;
		}
		$cnt++;
		if ( $cnt > $lockcnt ) {
			$ret = 0;
			print "他で使用中<br>";
			break;
		}
		sleep(1);
	}

	return $ret;

}
?>

  











   SQLの窓    create:2003/01/28  update:2014/09/07   管理者用(要ログイン)





フリーフォントWEBサービス

SQLの窓WEBサービス

SQLの窓フリーソフト

写真素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ