%PDF- %PDF-
Direktori : /home/rappan/www/cgi_link/ |
Current File : /home/rappan/www/cgi_link/sub.pl |
#======================================================================================= # サブルーチン #======================================================================================= $systeminfo = '<a href="http://www.gnbnet.com/" target="_blank">BannerLink (Version 1.9)</a>'; #======================================ロック処理ルーチン=============================== sub lock1 { # flock関数 eval { flock( LOCKCHK, 8 ) ; } ; if ( ! $@ ){ open(LOCK,">$lock_file") or die "Can't open lockfile: $!"; flock(LOCK, 2) or die "Can't flock : $!"; }else{ &error('このサーバーではflock関数は使えないようです。'); } } sub lock2 { # mkdir関数 $retry = 5; # リトライ回数セット $lockdir = $lock_file; $lockdir =~ s/\./_/g; $lockdir2 = 'c_' .$lockdir; while (!mkdir($lockdir, 0755)) { if (--$retry <= 0) { if (mkdir($lockdir2, 0755)) { # ロックを消すための排他 if ((-M $lockdir) * 86400 > 600) { # 作成時間が10分以上前なら rename($lockdir2, $lockdir) or die 'LOCK ERROR'; # ロック入れ替え last; # 一連の処理へ }else { rmdir($lockdir2); } # 部分ロック削除 } &error("BUSY"); } sleep(1); } } sub unlock { # ロック解除 if ($lockkey == 1) { close(LOCK); } elsif ($lockkey == 2) { $lockdir = $lock_file; $lockdir =~ s/\./_/g; rmdir($lockdir); } } #======================================エラー処理ルーチン=============================== sub error { $error = $_[0]; if ($error eq "") { $error = '原因不明のエラーで処理を継続できません。'; } &unlock; # ロック解除 if($QUERY{'up'} ne ""){ $w = $bn_dir .$QUERY{'up'}; unlink $w; } open(HTML,"$error_file") || die "ファイルオープンに失敗しました - error"; @html = <HTML>; close(HTML); print "Content-Type: text/html\n\n"; foreach $line (@html) { $line =~ s/<!--error-->/$error/g; $line =~ s/<!--system-->/$systeminfo/g; print $line; } exit; } #======================================================================================= return 1;