#/usr/bin/perl #------------------------------------------ # FFXI Member Registration System Admin # Version 0.5c3(04/08/26) # script by seno 2002-2004 # webmaster@senobeya.com # 著作権表示は消すなとかしょうもないことは # 言わないのですヨ。好きにしてよし! #------------------------------------------ #設定類 # $lockdir=""; とすることで、ファイルロックをしません。 # ただしデータ消滅の危険度は飛躍的に高くなります。 # バックアップを取るなどの対応をしてください。 $lockdir="lock"; #バージョン番号。いじらないでネ。改造した場合は適当にどうぞ。 $version="Version 0.5c3"; #このスクリプトのなまえ。ファイル名を変更したときはここも変更してください。 $script="guildmember.cgi"; $script2="admin.cgi"; #設定ファイル読み出し require "setup.cgi"; #日本語らいぶらり require './jcode.pl'; # # MAIN ROUTINE # &form_read; if($function eq "login"){ &login; } elsif($function eq "regist") { ®ist; } elsif($function eq "login2") { &login2; } elsif($function eq "regist2") { ®ist2; } else { &entrance; } &footer; # # SUB ROUTINE # # #入り口。 # sub entrance{ &header; if($language ne "English"){ print <<"EOM"; 管理モードへのパスワードを入力してください。
Go Top EOM } else { print <<"EOM"; Enter Master password to go administrator mode
Go Top EOM } } # #レジスト # sub regist{ if($pass ne $master_pass){ &header; &error_message('pass error','access failed.'); } $homepage=$FORM{'homepage'}; $bbspage=$FORM{'bbspage'}; $datafile=$FORM{'datafile'}; $diaryletter=$FORM{'diaryletter'}; $diarymax=$FORM{'diarymax'}; $diaryres=$FORM{'diaryres'}; $showmax=$FORM{'showmax'}; $master_pass=$FORM{'master_pass'}; $guild_name=$FORM{'guild_name'}; $guild_name =~ s/\\/\\\\/g; $topic=$FORM{'topic'}; $topic =~ s/\\/\\\\/g; $reg_mode=$FORM{'reg_mode'}; $reg_pass=$FORM{'reg_pass'}; $class_edit=$FORM{'class_edit'}; $anon_mode=$FORM{'anon_mode'}; $level_mode=$FORM{'level_mode'}; $limit_table=$FORM{'limit_table'}; $bgimg=$FORM{'bgimg'}; $diarygif=$FORM{'diarygif'}; $upgif=$FORM{'upgif'}; $background=$FORM{'background'}; $textcolor=$FORM{'textcolor'}; $indexcolor=$FORM{'indexcolor'}; $maincolor=$FORM{'maincolor'}; $supportcolor=$FORM{'supportcolor'}; $mydata=$FORM{'mydata'}; $otherdata=$FORM{'otherdata'}; $titlebg=$FORM{'titlebg'}; $tableborder=$FORM{'tableborder'}; $profcolor=$FORM{'profcolor'}; $skillcolor=$FORM{'skillcolor'}; $color0=$FORM{'color0'}; $color1=$FORM{'color1'}; $color2=$FORM{'color2'}; $color3=$FORM{'color3'}; $color4=$FORM{'color4'}; $color5=$FORM{'color5'}; $color6=$FORM{'color6'}; $color7=$FORM{'color7'}; $color8=$FORM{'color8'}; $color9=$FORM{'color9'}; $font_body=$FORM{'font_body'}; $font_big=$FORM{'font_big'}; $font_small=$FORM{'font_small'}; $font_td=$FORM{'font_td'}; $font_th=$FORM{'font_th'}; $font_title=$FORM{'font_title'}; $diarybg=$FORM{'diarybg'}; $imgallow=$FORM{'imgallow'}; $imgmax=$FORM{'imgmax'}; $rescolor=$FORM{'rescolor'}; $oekaki=$FORM{'oekaki'}; $c_max=$FORM{'c_max'}; $c_link=$FORM{'c_link'}; $c_visit=$FORM{'c_visit'}; $c_active=$FORM{'c_active'}; $c_hover=$FORM{'c_hover'}; $skill_visible=$FORM{'skill_visible'}; $imgdir=$FORM{'imgdir'}; $putdir=$FORM{'putdir'}; $diarydir=$FORM{'diarydir'}; $iconuse=$FORM{'iconuse'}; $icondir=$FORM{'icondir'}; $iconurl=$FORM{'iconurl'}; $iconhp=$FORM{'iconhp'}; $iconhp =~ s/\\/\\\\/g; $diaryallow=$FORM{'diaryallow'}; $cookie_check=$FORM{'cookie_check'}; #$key_avail= #$rss_avail= @list=('homepage', 'bbspage', 'datafile', 'diaryletter', 'diarymax', 'diaryres', 'showmax', 'master_pass', 'guild_name', 'topic', 'reg_mode', 'reg_pass', 'class_edit', 'anon_mode', 'level_mode', 'limit_table', 'bgimg', 'diarygif', 'upgif', 'background', 'textcolor', 'indexcolor', 'maincolor', 'supportcolor', 'mydata', 'otherdata', 'titlebg', 'tableborder', 'profcolor', 'skillcolor', 'color0', 'color1', 'color2', 'color3', 'color4', 'color5', 'color6', 'color7', 'color8', 'color9', 'font_body', 'font_big', 'font_small', 'font_td', 'font_th', 'font_title', 'diarybg', 'imgallow', 'imgmax', 'rescolor', 'c_max', 'c_link', 'c_visit', 'c_active', 'c_hover', 'skill_visible', 'oekaki', 'imgdir', 'putdir', 'diarydir', 'iconuse', 'icondir', 'iconurl', 'iconhp', 'diaryallow', 'cookie_check' ); &dirlock; if(!open(IN,"setup.cgi")){&error_message('config file error','data file access failed.');} @all=; close IN; &header; foreach $item(@list){ $match=0; for($i=0;$i<$#all+1;$i++){ if($all[$i] =~ /^\$$item(.*);(.*)/){ $all[$i]="\$$item=\"$$item\";$2\n"; $match=1; } } if($match==0){ push(@all,"\$$item=\"$$item\";\n\$dummy=\"a\";\n"); } } if(!open(OUT,">setup.cgi")){&error_message('config file error','data file access failed.');} print OUT @all; close OUT; rmdir($lockdir); $registed="yes"; $pass=$master_pass; &login; } # #ログイン # sub login{ if($pass ne $master_pass){ &header; &error_message('pass error','access failed.'); } if($registed eq "yes"){ if($language ne "English"){ print "設定ファイルを書き換えました。"; } else { print "Configuration file is modifyed."; } } else { &header; } srand(); $xx = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" . "abcdefghijklmnopqrstuvwxyz" . "0123456789."; $salt = substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); if($language ne "English"){ print "
[登録システム入り口][使い方][ホームページへ戻る]
"; } else { print "
[Go Top][Usage][back to homepage]
"; } &dirlock; if(!open(IN,"setup.cgi")){&error_message('config file error','data file access failed.');} @all=; close IN; foreach $i(@all){ if(!($i =~ /^#/ || $i eq "\n")){ if($i =~/^\$([\[\]\w ]*)=(.*);/){ $d1=$1;$d2=$2; $d2 =~ s/\"//g; $$d1=$d2; } } } rmdir($lockdir); if($language ne "English"){ print <<"EOM";
Genral Settings "; print ""; $topic =~ s/\\\\/\\/g; $guild_name =~ s/\\\\/\\/g; $iconhp =~ s/\\\\/\\/g; print ""; print ""; print ""; print ""; print ""; print <<"EOM"; "; print <<"EOM"; "; print <<"EOM"; "; print ""; print ""; print ""; print <<"EOM"; "; print ""; print ""; print <<"EOM";
ホームページurl
掲示板url(空欄でリンク自体が出なくなります)
データファイル名
日記ファイル拡張子
日記最大件数
日記機能\の許可
日記へのレス
日記表\示数
マスターパスワード
ギルド名
トピック、タイトル名
新規登録
新規登録パスワード
Classの編集
Anonモードの
レベル表\示のバックカラー
画像アップの許可\
同時画像アップの最大数\
お絵描きの許可\
初期表\示モード
スキル関係表\示
クッキーセキュリティ制御
背景画像
日記アイコンのurl ()
Upアイコンのurl ()
インデックス行数
Coloring
背景色
文字色
レス文字色
表\見出し色
メインジョブ背景色
サポートジョブ背景色
自データ背景色
他データ背景色
タイトル背景色
枠線色
プロフィール背景色
合成スキル表\示用背景色
日記背景色(無指定で透明)

Folder EOM print "
画像フォルダ
画像出力url
日記フォルダ
顔アイコンの使用
アイコン格納フォルダ
アイコン著作ページurl
アイコン著作ページタイトル
推奨アイコン素材ページの名称とurl
FFXIで遊ぼうかな+
(http://hope.homeip.net/%7Eff11/)
kero web
(http://flashup.jp/~kero/)
ちょんまげ素材店
(http://mamicou.cool.ne.jp/FF11/)
JobColor
Level 1-10
Level11-20
Level21-30
Level31-40
Level41-50
Level51-60
Level61-70
Level71-80
Level81-90
Level91-99
Fonts
body(本文)
big(強調文字)
small(小文字)
td(表\中フォント)
th(表\見出しフォント)
title(タイトルサイズ)
リンク色
既知リンク色
クリック時リンク色
上に載せたときリンク色


EOM } else { print <<"EOM";
Genral Settings "; print <<"EOM"; "; print <<"EOM"; "; print <<"EOM"; "; print <<"EOM"; "; print ""; print ""; print <<"EOM"; "; print ""; print <<"EOM";
Homepage url
BBS url
datafile name
diary file extension
diary max articles
Response for diary
max articles
master password
guild name
page title
new entry
new entry password
Class edit
Anon mode
back color for level mode
image upload
free drawing
default mode
Weapon/Magic Skill feature
background image
diary icon url()
Up icon url ()
table index lines
Coloring
back color
text color
response color
topic color
main job back
sub job back
my data color
other data color
title back color
table border color
profile column back color
synthesis back color(no use)
dairy back color

Folder EOM print "
image folder
image put url
diary folder
face icon
icon folder
icon page url
icon page title
JobColor
Level 1-10
Level11-20
Level21-30
Level31-40
Level41-50
Level51-60
Level61-70
Level71-80
Level81-90
Level91-99
Fonts
body
big
small
td
th
title
link
visited
on click
hover


EOM } } # #汎用サブ # sub form_read { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); # $value =~ s//>/g; $value =~ s/\n//g; $value =~ s/\t//g; $value =~ s/\r/
/g; $value =~ s/\,//g; $FORM{$name} = $value; } $pass=$FORM{'pass'}; $function=$FORM{'function'}; if($page eq ""){$page=1;} if($level==1){$level_mode=1;} if($limit eq ""){$limit=$limit_table;} $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); @wday_array = ('日','月','火','水','木','金','土'); $mon++; $year=$year-100; if($year<10){ $year="0$year"; } if($mon<10){ $mon="0$mon"; } if($mday<10){ $mday="0$mday"; } if($hour<10){ $hour="0$hour"; } if($min<10){ $min="0$min"; } $timenow="$year/$mon/$mday/$hour$min"; $today = "$mon/$mday"; $today2= "$mon/$mday $hour:$min"; } sub header { print "Content-type: text/html\n\n"; print "$topic\n"; if($language ne "English"){ print ''; } else { print ''; } print '\n"; if($bgimg eq ""){ print "\n\n"; } else { print "\n\n"; } } sub reload_header { print "Content-type: text/html\n\n"; print "$topic\n"; if($language ne "English"){ print ''; } else { print ''; } print ""; print '"; print "\n\n"; } sub footer { print "
"; print "
Script by senobeya.com
\n"; print "
FF11 Member Registraion System Admin $version
\n"; print ""; } sub error_message { print "

$_[0]

\n"; print "

$_[1]

\n"; if($language ne "English"){ print "ブラウザの[戻る]ボタンを押して前の画面に移動してください.

\n"; } else { print "Push back button for former page.

\n"; } &footer; exit; } sub dirlock { if($dirlock eq ""){return;} if((-M $lockdir)>0.001){ #1分半ほどlockdirが存在している場合は強制的に削除 rmdir($lockdir); } for ($i = 0; $i <= 20; $i++) { if (mkdir($lockdir, 0755)) { last; } else { sleep(1); } } $SIG{'TERM'} = $SIG{'PIPE'} = $SIG{'HUP'} = "sigexit"; if($i == 20){&error_message('busy','処理が混雑しています');} } sub sigexit { rmdir($lockdir); exit(1); } sub login2{ if($pass ne $master_pass){ &header; &error_message('pass error','access failed.'); } &header; if($registed eq "yes"){ if($language ne "English"){ print "設定ファイルを書き換えました。"; } else { print "Configuration file modified."; } } srand(); $xx = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" . "abcdefghijklmnopqrstuvwxyz" . "0123456789."; $salt = substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); if($language ne "English"){ print "


[登録システム入り口][使い方][ホームページへ戻る]
"; } else { print "
[Entrance][usage][back to home]
"; } if($language ne "English"){ @drelmlist=("Sand'Oria",'Bastok','Windurst'); @drelmlist=('','',''); #大 @drelmlistl=("Sand'Oria",'Bastok','Windurst'); #@drelmlist=('','',''); #小 #@dindex=('No.','称号','名前','種族','国','ポイント','ミッションランク','ジョブ','時間','コメント'); @dindex=('No.','class','name','race','realm','point','m_rank','job','time','comment'); @dmenu=('Simple','Job','Job(Lv)','Skill','Status','Full','Full2','Icon','Skill','','LevelSearch'); @dmenux=('BBS','Home','Manual','Menu: ','Memberlist Top'); #@dmenu=('シンプル','ジョブ1','ジョブ2','スキル','ステータス','フル','フル2','アイコン','掲示板','ホーム','マニュアル','メニュー:','リストトップ'); @dfield=('class','name','pass','anon mode','Race','フェイスタイプ','Realm','MainJob','SupportJob','個人ポイント ','ミッションランク ','comment ','profile 公開','ハンドル','POL内ハンドル ','e-mail','homepage url','プロフィール用コメント','サンプル'); @dmodelist=('Simple','Job','Production','Status','Full','Full2','Icon'); @dranklist=('素人','見習','徒弟','下級職人','名取','目録','印可','高弟','皆伝','Rank9','Rank10'); @dracelist=('Hume♂','Hume♀','Elvaan♂','Elvaan♀','Tarutaru♂','Tarutaru♀','Mithra♀','Galka♂'); #@djoblist=('WAR','MNK','WHM','BLM','RDM','THF','PLD','DRK','RNG','BRD','BST','DRG','SMN','NIN','SAM','15','16'); @djoblist=('戦','モ','白','黒','赤','シ','ナ','暗','狩','吟','獣','竜','召','忍','侍','15','16'); #@dprodlist=('鍛冶','裁縫','錬金','木工','彫金','革細工','骨工','釣り','調理'); @dprodlist=('鍛','織','錬','木','彫','革','骨','釣','調'); @dskilllist=('格闘','短剣','片手剣','両手剣','片手斧','両手斧','両手鎌','両手槍','片手刀','両手刀','片手棍','両手棍','弓術','射撃','投擲','ガード','回避','盾','受流し','神聖','回復','強化','弱体','精霊','暗黒','歌唱','弦楽器','管楽器','忍術','召喚'); @buttonlist=('login','writediary','new entry','master mode'); print "表\示項目には国別表\示以外は[']は使えません。どうしても使用したい場合は全角の[’]を利用してください。"; print "
"; print "表\のインデックス項目
"; print ""; for($i=0;$i<$#index+1;$i++){ print ""; } print "
$i($dindex[$i])
"; print "上部メニュー表\示(空欄でメニュー自体を非表\示)
"; print ""; for($i=0;$i<$#menu+1;$i++){ print ""; } print "
$i($dmenu[$i])
"; print "上部メニュー表\示2(空欄でメニュー自体を非表\示)
"; print ""; for($i=0;$i<$#menux+1;$i++){ print ""; } print "
$i($dmenux[$i])
"; print "登録時の各フィールドの説明文
"; print ""; for($i=0;$i<$#field+1;$i++){ print ""; } print "
$i($dfield[$i])
"; print "右上モード表\示
"; print ""; for($i=0;$i<$#modelist+1;$i++){ print ""; } print "
$i($dmodelist[$i])
"; print "合成ランク種類
"; print ""; for($i=0;$i<$#ranklist+1;$i++){ print ""; } print "
$i($dranklist[$i])
"; print "種族リスト
"; print ""; for($i=0;$i<$#racelist+1;$i++){ print ""; } print "
$i($dracelist[$i])
"; print "ジョブリスト
"; print ""; for($i=0;$i<$#joblist+1;$i++){ print ""; } print "
$i($djoblist[$i])
"; print "合成スキルリスト
"; print ""; for($i=0;$i<$#prodlist+1;$i++){ print ""; } print "
$i($dprodlist[$i])
"; print "国リスト(表\示用)
"; print ""; for($i=0;$i<$#relmlistl+1;$i++){ print ""; } print "
$i($drelmlistl[$i])
"; print "国リスト(実表\示用)[\"] は無視します。
"; print ""; for($i=0;$i<$#relmlist+1;$i++){ $relmlist[$i] =~ s/\"//g; print ""; } print "
$i($drelmlist[$i])
"; print "スキルリスト
"; print ""; for($i=0;$i<$#skilllist+1;$i++){ print ""; } print "
$i($dskilllist[$i])
"; print "ボタン名称
"; print ""; for($i=0;$i<$#button+1;$i++){ print ""; } print "
$i($buttonlist[$i])
"; print <<"EOM";
EOM } else { @drelmlist=("Sand'Oria",'Bastok','Windurst'); @drelmlist=('','',''); #大 @drelmlistl=("Sand'Oria",'Bastok','Windurst'); @dindex=('No.','class','name','race','realm','point','m_rank','job','time','comment'); @dmenu=('Simple','Job','Job(Lv)','Skill','Status','Full','Full2','Icon','Skill','','LevelSearch'); @dmenux=('BBS','Home','Manual','Menu: ','Memberlist Top'); @dfield=('class','name','pass','anon mode','Race','FaceType','Realm','MainJob','SupportJob','Conquest point','MissionRank','comment','profile open','handle','POL handle','e-mail','homepage url','profile comment','sample'); @dmodelist=('Simple','Job','Production','Status','Full','Full2','Icon'); @dranklist=('Rank0','Rank1','Rank2','Rank3','Rank4','Rank5','Rank6','Rank7','Rank8','Rank9','Rank10'); @dracelist=('HumeMale','HumeFemale','ElvaanMale','ElvaanFemale','TarutaruMale','TarutaruFemale','Mithra','Galka'); @djoblist=('WAR','MNK','WHM','BLM','RDM','THF','PLD','DRK','RNG','BRD','BST','DRG','SMN','NIN','SAM','15','16'); @dprodlist=('SMITH','CLOTH','ALCHEMY','WOOD','GOLDSMTH','TANNER','BONEWRK','FISHING','COOKING'); @dskilllist=('Hand-To-Hand','Dagger','Sword','GreatSword','Axe','GreatAxe','Sythe','Spear','Katana','GreatKatana','Club','GreatClub','Archery','Marksmanship','Throwing','Guard','Evasion','Shield','Parrying','DivineMagic','HealingMagic','EnhanceMagic','EnfMagic','ElemantalMagic','DarkMagic','Singing','Strings','WindInstrument','Ninjutsu','Summoning'); @buttonlist=('login','writediary','new entry','master mode'); print "
"; print "table index
"; print ""; for($i=0;$i<$#index+1;$i++){ print ""; } print "
$i($dindex[$i])
"; print "menu
"; print ""; for($i=0;$i<$#menu+1;$i++){ print ""; } print "
$i($dmenu[$i])
"; print "menu 2
"; print ""; for($i=0;$i<$#menux+1;$i++){ print ""; } print "
$i($dmenux[$i])
"; print "registration information letters
"; print ""; for($i=0;$i<$#field+1;$i++){ print ""; } print "
$i($dfield[$i])
"; print "mode
"; print ""; for($i=0;$i<$#modelist+1;$i++){ print ""; } print "
$i($dmodelist[$i])
"; print "Synthesis Rank
"; print ""; for($i=0;$i<$#ranklist+1;$i++){ print ""; } print "
$i($dranklist[$i])
"; print "race
"; print ""; for($i=0;$i<$#racelist+1;$i++){ print ""; } print "
$i($dracelist[$i])
"; print "job
"; print ""; for($i=0;$i<$#joblist+1;$i++){ print ""; } print "
$i($djoblist[$i])
"; print "synthesis
"; print ""; for($i=0;$i<$#prodlist+1;$i++){ print ""; } print "
$i($dprodlist[$i])
"; print "realm list
"; print ""; for($i=0;$i<$#relmlistl+1;$i++){ print ""; } print "
$i($drelmlistl[$i])
"; print "realm list 2
"; print ""; for($i=0;$i<$#relmlist+1;$i++){ $relmlist[$i] =~ s/\"//g; print ""; } print "
$i($drelmlist[$i])
"; print "skill list
"; print ""; for($i=0;$i<$#skilllist+1;$i++){ print ""; } print "
$i($dskilllist[$i])
"; print "button name
"; print ""; for($i=0;$i<$#button+1;$i++){ print ""; } print "
$i($buttonlist[$i])
"; print <<"EOM";
EOM } } sub regist2{ if($pass ne $master_pass){ &header; &error_message('pass error','access failed.'); } for($j=0;$j<$#index+1;$j++){ $index[$j]=$FORM{"index$j"}; } for($j=0;$j<$#menu+1;$j++){ $menu[$j]=$FORM{"menu$j"}; } for($j=0;$j<$#menux+1;$j++){ $menux[$j]=$FORM{"menux$j"}; } for($j=0;$j<$#field+1;$j++){ $field[$j]=$FORM{"field$j"}; } for($j=0;$j<$#modelist+1;$j++){ $modelist[$j]=$FORM{"modelist$j"}; } for($j=0;$j<$#ranklist+1;$j++){ $ranklist[$j]=$FORM{"ranklist$j"}; } for($j=0;$j<$#racelist+1;$j++){ $racelist[$j]=$FORM{"racelist$j"}; } for($j=0;$j<$#joblist+1;$j++){ $joblist[$j]=$FORM{"joblist$j"}; } for($j=0;$j<$#prodlist+1;$j++){ $prodlist[$j]=$FORM{"prodlist$j"}; } for($j=0;$j<$#relmlistl+1;$j++){ $relmlistl[$j]=$FORM{"relmlistl$j"}; } for($j=0;$j<$#relmlist+1;$j++){ $relmlist[$j]=$FORM{"relmlist$j"}; $relmlist[$j] =~ s/\"//g; } for($j=0;$j<$#skilllist+1;$j++){ $skilllist[$j]=$FORM{"skilllist$j"}; } for($j=0;$j<$#button+1;$j++){ $button[$j]=$FORM{"button$j"}; } @list=( 'index', 'menu', 'menux', 'field', 'modelist', 'ranklist', 'racelist', 'joblist', 'prodlist', 'relmlistl', 'relmlist', 'skilllist', 'button' ); &dirlock; if(!open(IN,"setup.cgi")){&error_message('config file error','data file access failed.');} @all=; close IN; foreach $item(@list){ for($i=0;$i<$#all+1;$i++){ if($all[$i] =~ /^\@$item=(.*);(.*)/){ $temp=$2; $arr="\@$item=("; for($j=0;$j<$#$item+1;$j++){ if ($$item[$j] =~ /.*\\$/){ $$item[$j].="\\"; } if(($item eq "relmlist") || ($item eq "relmlistl")){ $arr.="\"$$item[$j]\","; } else { $$item[$j] =~ s/'//g; $arr.="'$$item[$j]',"; } } $arr.=");$2\n"; $all[$i]=$arr; } } } if(!open(OUT,">setup.cgi")){&error_message('config file error','data file access failed.');} print OUT @all; close OUT; rmdir($lockdir); $registed="yes"; $function="login2"; &login2; }