#!/usr/bin/perl #Perlのパスを指定 #普通は、『#!/usr/bin/perl』or『#!/usr/local/bin/perl』を指定 #プロバイダによっては、『#!/usr/local/bin/perl5』の場合もあり。 ############################################### #このscriptの著作権は・・・ #HPサービス(hp@bird.to・mkc@intacc.ne.jp)に帰属しています。 #よって、改竄する事は許可しますが、著作権の表示は削除しないで下さい。 #また、このscriptによる如何なる損害も賠償しませんので・・・ #予め、ご了承下さい。 #尚、バグ情報などは、HPサービス(hp@bird.to)まで #お知らせ頂けると有難いです。 #また、利用にあたっては、HPサービス(http://hp.bird.to/)に従って下さい。 ####################使用方法###################### #一番上のPerlのパスを合わせて転送し、パーミッションを設定すれば・・・ #それで、使えるようになります。 #このCGIのカスタマイズは、ほとんどインターネット上で出来るように #作ってありますので、ファイル内容を、特に変更する必要はありません。 ####################変数設定###################### #(★☆)は、変更可能部分(よく分からない人は、変更しない事!!) #(★)は、変更しない方がいい部分 #(☆)は、変更した方がいい部分 # 管理人専用コマンドの暗証番号(秘密の暗号に書き換えて下さい)(☆) my $secret='1120'; # カスタマイズ用ファイル(★☆) my $custom_file='./DATA/sisyo_custom.cgi'; # データファイル名(★☆) my $data_file = './DATA/sisyo.cgi'; #私書箱ディレクトリ名(私書箱データの格納ディレクトリ)(★☆) my $data_dir = './DATA/MYPOST'; # タイトルの名前(★☆) my $html_title = '私書箱♪'; #homeのURL(自分のHPのURLを記入する)(★☆) my $home_url = 'http://www.yuni-net.com/'; #記録ログ数(総記録データ数。あまり多くすると重たくなるので注意)(★☆) my $log_max = 100; #タグの有効・無効(0=無効、1=有効)(★☆) my $tag =0; #時間表示方法(0=表示なし、1=月日時分全部表示、2=月日のみ表示)(★☆) my $date_way =1; #バックの色(★☆) my $bgcolor='black'; #バックのイラスト(★☆) my $background='./IMAGE/background/night.gif'; #文字の色(★☆) my $textcolor='white'; #リンクの色(★☆) my $linkcolor ='red'; #一度訪れたリンクの色(★☆) my $vlinkcolor='red'; #投稿の文字色(★☆) my $newscolor='dimgray'; #投稿の題名色(★☆) my $subcolor='blue'; #投稿のバックの色(★☆) my $tdcolor='floralwhite'; #題名の色(★☆) my $titlecolor='white'; #アイコンの背景色(★☆) my $face_bgcolor='white'; #CGIのURL(★☆) my $script_url = './mypost.cgi'; #フッターに挿入するタグ(★☆) my $hooter ="[TOP] [HOME]"; # 排他制御として使用するディレクトリ名(★☆) my $lockname='./DATA/mypostlock'; #perlのバージョンを指定(★) require 5.001; #cgi-lib.plのパスを指定(★) require "./cgi-lib.pl"; #jcode.plのパスを指定(★) require "./jcode.pl"; #custom.plのパスを指定(★) require "./custom_mypost.pl"; #現在time(★) my $now_time=time(); # 排他制御使用関数(★) my $expire = 3*60; # 最大排他制御時間( sec ) my $num_retry = 5; # 最大再試行回数 my $retry_time = 1; # 排他制御待ち時間( sec ) # Cookie の有効期間(★) my $expires_time= &expires(30); # Cookie の有効期間を設定(★) my $expires="expires=$expires_time"; # Cookieの名前(★) my $C_NAME='MYPOST'; #HOMEアイコン表示(★☆) my $home_icon=""; #メールアイコン表示(★☆) my $mail_icon=""; #顔アイコン表示(★☆) for($i=0;$i<52;$i++){ $face_icon[$i]=""; } #性別のselect(★☆) my @sex_array=('','男','女','謎'); #年齢のselect(★☆) my @age_array=('','10才未満','10代','20代','30代','40代','50才以上','子供','大人','お年頃'); #住所のselect(★☆) my @address_array=('','北海道','青森','岩手','宮城','秋田','山形','福島','群馬','栃木','茨城','埼玉','千葉','東京','神奈川','新潟','富山','石川','福井','山梨','長野','岐阜','静岡','愛知','三重','滋賀','京都','大阪','兵庫','奈良','和歌山','鳥取','島根','岡山','広島','山口','徳島','香川','愛媛','高知','福岡','佐賀','長崎','熊本','大分','宮崎','鹿児島','沖縄','海外','地球外'); ##########ここより先は、Perlの知識が必要です!!########## ##########よく分からない人は、立ち入るべからず########## #アイコン一覧のURL my $face_url = $script_url.'?'.'face'; my %params; &ReadParse(\%params); $name = &jcode'sjis($params{'name'});#名前 $pass = &jcode'sjis($params{'pass'});#パスワード $number = &jcode'sjis($params{'number'});#私書箱番号 $mypost = &jcode'sjis($params{'mypost'});#自分の私書箱番号 $subject= &jcode'sjis($params{'subject'});#題名 $email = &jcode'sjis($params{'email'});#メールアドレス $sex = &jcode'sjis($params{'sex'});#性別 $age = &jcode'sjis($params{'age'});#年齢 $face = $params{'face'};#顔 $address = &jcode'sjis($params{'address'});#アドレス $hp_url = $params{'hp_url'};#HPのURL $comment = &jcode'sjis($params{'comment'});#コメント $command = $params{'command'};#コマンド $secret_pass = &jcode'sjis($params{'secret_pass'});#管理人パスワード $repair_delete = $params{'repair_delete'};#削除orトップ $target = $params{'target'};#削除データ my (@target)=split(/\0/,$target);#削除データ $repair_[0] = &jcode'sjis($params{'repair_0'}); $repair_[1] = &jcode'sjis($params{'repair_1'}); $repair_[2] = $params{'repair_2'}; $repair_[3] = $params{'repair_3'}; $repair_[4] = $params{'repair_4'}; $repair_[5] = $params{'repair_5'}; $repair_[6] = $params{'repair_6'}; $repair_[7] = $params{'repair_7'}; $repair_[8] = $params{'repair_8'}; $repair_[9] = $params{'repair_9'}; $repair_[10] = $params{'repair_10'}; $repair_[11] = $params{'repair_11'}; $repair_[12] = $params{'repair_12'}; $repair_[13] = $params{'repair_13'}; $repair_[14] = &jcode'sjis($params{'repair_14'}); $repair_[15] = $params{'repair_15'}; $repair_[16] = $params{'repair_16'}; $repair_[17] = &jcode'sjis($params{'repair_17'}); shift @repair_; if($ENV{'QUERY_STRING'} eq 'face'){ $command='face_list'; } #全角数字を半角に変換 $number=~s/0/0/g; $number=~s/1/1/g; $number=~s/2/2/g; $number=~s/3/3/g; $number=~s/4/4/g; $number=~s/5/5/g; $number=~s/6/6/g; $number=~s/7/7/g; $number=~s/8/8/g; $number=~s/9/9/g; $mypost=~s/0/0/g; $mypost=~s/1/1/g; $mypost=~s/2/2/g; $mypost=~s/3/3/g; $mypost=~s/4/4/g; $mypost=~s/5/5/g; $mypost=~s/6/6/g; $mypost=~s/7/7/g; $mypost=~s/8/8/g; $mypost=~s/9/9/g; ####################条件分岐#################### if(defined ($dlock_id=&LockOn($lockname))){ my @copy_custom=($html_title,$titlecolor,$home_url,$bgcolor,$background,$textcolor,$linkcolor,$vlinkcolor,$newscolor,$subcolor,$tdcolor,$log_max,$secret,$tag,$date_way,$face_bgcolor,$hooter); my @custom=&custom_open($custom_file,@copy_custom);#カスタマイズ類を取得 foreach(@custom){ $_=~s/,/,/g; } ($html_title,$titlecolor,$home_url,$bgcolor,$background,$textcolor,$linkcolor,$vlinkcolor,$newscolor,$subcolor,$tdcolor,$log_max,$secret,$tag,$date_way,$face_bgcolor,$hooter)=@custom;#カスタマイズ類を設定 unlink($custom_file) if($repair_delete eq 'begin' && $secret_pass eq $secret); ($html_title,$titlecolor,$home_url,$bgcolor,$background,$textcolor,$linkcolor,$vlinkcolor,$newscolor,$subcolor,$tdcolor,$log_max,$secret,$tag,$date_way,$face_bgcolor,$hooter)=@copy_custom if($repair_delete eq 'begin' && $secret_pass eq $secret); foreach('name','pass','number','subject','name','email','hp_url','comment','mypost'){ ${$_}=~s/&/&/g; ${$_}=~s//>/g if($tag==0); ${$_}=~s/,/,/g; }#タグの無効化 for($i=0;$i<@repair_;$i++){ $repair_[$i]=~s/,/,/g; }#カンマの無害化 print html_header($html_title,$name,$pass,$number,$email,$hp_url,$address,$sex,$age,$face,$mypost) unless($command=~/repair_custom/ && $secret_pass eq $secret); if($secret_pass eq $secret && $command eq ''){ &data_open; &target_list; } elsif($command eq 'repair_custom_beginner' && $secret_pass eq $secret){ ($html_title,$titlecolor,$home_url,$bgcolor,$background,$textcolor,$linkcolor,$vlinkcolor,$newscolor,$subcolor,$tdcolor,$log_max,$secret,$tag,$date_way,$face_bgcolor,$hooter)=&repair_custom($custom_file,@repair_) if($repair_delete ne 'begin'); print html_header($html_title); &looking_list; } elsif($command eq 'repair_custom_pro' && $secret_pass eq $secret){ ($html_title,$titlecolor,$home_url,$bgcolor,$background,$textcolor,$linkcolor,$vlinkcolor,$newscolor,$subcolor,$tdcolor,$log_max,$secret,$tag,$date_way,$face_bgcolor,$hooter)=&repair_custom($custom_file,@repair_) if($repair_delete ne 'begin'); print html_header($html_title); &looking_list; } elsif($command eq 'change' && $secret_pass eq $secret){ if($repair_delete eq 'delete'){ &data_open; &delete_data(@target); &target_list; }#削除の場合 elsif($repair_delete eq 'custom_beginner'){ &custom_beginner($script_url,$html_title,$titlecolor,$home_url,$bgcolor,$background,$textcolor,$linkcolor,$vlinkcolor,$newscolor,$subcolor,$tdcolor,$log_max,$secret,$tag,$date_way,$face_bgcolor,$hooter,$secret_pass); }#カスタマイズする(初心者)場合 elsif($repair_delete eq 'custom_pro'){ &custom_pro($script_url,$html_title,$titlecolor,$home_url,$bgcolor,$background,$textcolor,$linkcolor,$vlinkcolor,$newscolor,$subcolor,$tdcolor,$log_max,$secret,$tag,$date_way,$face_bgcolor,$hooter,$secret_pass); }#カスタマイズする(上級者)場合 elsif($repair_delete eq 'color'){ &color_list($script_url); }#色の見本を場合 elsif($repair_delete eq 'background'){ &background_list($script_url); }#背景イラストを見る場合 elsif($repair_delete eq 'top'){ &looking_list; }#トップに戻る場合 else{ &data_open; &target_list; }#指定なしの場合 } elsif($command eq 'face_list'){ &face_list; } elsif($command eq 'mypost_regist'){ ®ist_list; } elsif($command eq 'mypost_delete'){ &delete_list; } elsif($command eq 'mypost_regist2'){ if($name ne '' && $pass ne ''){ &data_open; &new_save; ®ist_success_list; } else{ $error_code='名前を記入して下さい' if($name eq ''); $error_code='パスワードを記入して下さい' if($pass eq ''); ®ist_list; } } elsif($command eq 'mypost_delete2'){ &data_open; if($number eq $numbers{$number} && $name eq $names{$number} && $pass eq $passs{$number} && $number ne ''){ &delete_data($number); &delete_success_list; } else{ $error_code='指定データは登録されていません'; &delete_list; } } elsif($command eq 'access'){ &data_open; if($number eq $numbers{$number} && $name eq $names{$number} && $pass eq $passs{$number} && $number ne ''){ &mypost_open($number); &access_list; } else{ $error_code='指定データは登録されていません'; &looking_list; } } elsif($command eq 'write'){ &write_list($number); } elsif($command eq 'writing'){ &data_open; &data_save; &mypost_open($number) if($check_number==1); &mypost_save($number) if($check_number==1 && @mypost_line<$log_max); if($check_number==1 && @mypost_line<$log_max){ $error_code="私書箱『$number』に、上記のように書き込みました!!"; } elsif($check_number!=1){ $error_code="私書箱『$number』には、書き込む事が出来ませんでした。番号をお確かめ下さい。"; } elsif(@mypost_line>=$log_max){ $error_code="私書箱『$number』にはデータ満杯の為、書き込む事が出来ませんでした。"; } &write_list($number); } elsif($command eq 'mydata_delete'){ &mypost_open($number); &mydata_delete($number,@target); &access_list($number); } else{ &looking_list; } &LockOff($dlock_id); } else { &custom_open; print html_header($html_title); print &lock_error(); } print html_footer(); exit 0; ####################htmlを表示#################### sub looking_list{ ($cookie_name,$cookie_pass,$cookie_number) = get_cookie(); ($c_cook,$c_name)=split(/:/,$cookie_name); ($c_cook,$c_pass)=split(/:/,$cookie_pass); ($c_cook,$c_number)=split(/:/,$cookie_number); print < $html_title

$error_code

自分の私書箱にアクセス!!
登録名
パスワード
私書箱番号

ご用件をどうぞ!!
私書箱に書き込む
私書箱の新規登録
私書箱の登録削除
私書箱SP Ver.1.45(C)HPサービス
END_OF_TEXT } ###############新規登録html############### sub regist_list{ print < 名前とパスワードを記入して下さい
(半角カナや特殊文字等は、使用しないで下さい)
 

新規登録フォーム
名前
パスワード
 

$error_code

END_OF_TEXT } ###############私書箱削除html############### sub delete_list{ ($cookie_name,$cookie_pass,$cookie_number) = get_cookie(); ($c_cook,$c_name)=split(/:/,$cookie_name); ($c_cook,$c_pass)=split(/:/,$cookie_pass); ($c_cook,$c_number)=split(/:/,$cookie_number); print < $error_code

 

登録削除フォーム
登録名
パスワード
私書箱番号
END_OF_TEXT } ###############新規登録成功html############### sub regist_success_list{ print <
登録成功
登録名$name
パスワード$pass
私書箱番号$new_number
 

上記事項は、重要ですので忘れないようにして下さい。

END_OF_TEXT } ###############登録削除成功html############### sub delete_success_list{ print <
削除成功
登録名$name
パスワード$pass
私書箱番号$number
 

END_OF_TEXT } ################私書箱htmlを表示################ sub access_list{ my @true_ranks=sort{ $b<=>$a }keys %nums; #総データ番号 foreach(@true_ranks){ my $subject=$subjects{$_}; my $name=$names{$_}; my $email=$emails{$_}; my $hp_url=$hp_urls{$_}; my $address=$addresss{$_}; my $sex=$sexs{$_}; my $age=$ages{$_}; my $face=$faces{$_}; my $date=$dates{$_}; my $comment=$comments{$_}; my $number=$numbers{$_}; my $profile; if($email ne ''){ $email="$mail_icon"; } if($hp_url ne 'http://' && $hp_url ne ''){ $hp_url="$home_icon"; } else{ $hp_url=""; } if($sex ne $sex_array[0]){ $profile.=$sex.' ,'; } if($age ne $age_array[0]){ $profile.=$age.' ,'; } if($address ne $address_array[0]){ $profile.=$address.' ,'; } if($profile ne ''){ chop($profile); $profile='('.$profile.')'; $profile=~s/ //g; } else{ $profile=' '; } my $post_mark; if($number ne ''){ $post_mark=""; } print "

" if($number ne ''); print( '', '', '
', $face_icon[$face],' ',$subject,' ',$date,'
 ',$name,$profile,$email,$hp_url,$post_mark,'
 
', $comment ); print('

'); print('

') if($number ne ''); } print('私書箱にデータが、ありません

') if(@true_ranks==0); if(@true_ranks>0){ print < (一度に複数のデータを削除出来ます。尚、$log_maxデータまで保存出来ます。)

END_OF_TEXT foreach(@true_ranks){ print( '', '', '', ) ; } print < END_OF_TEXT } } ################書き込みhtmlを表示################ sub write_list{ my ($number)=@_; ($cookie_name,$cookie_pass,$cookie_number,$cookie_email,$cookie_hp_url,$cookie_address,$cookie_sex,$cookie_age,$cookie_face) = get_cookie(); ($c_cook,$c_name)=split(/:/,$cookie_name); ($c_cook,$c_number)=split(/:/,$cookie_number); ($c_cook,$c_email)=split(/:/,$cookie_email); ($c_cook,@c_hp_url)=split(/:/,$cookie_hp_url); $c_hp_url=join(':',@c_hp_url);#http://の:を連結 ($c_cook,$c_address)=split(/:/,$cookie_address); ($c_cook,$c_sex)=split(/:/,$cookie_sex); ($c_cook,$c_age)=split(/:/,$cookie_age); ($c_cook,$c_face)=split(/:/,$cookie_face); if($command eq 'writing'){ $c_name='' if($name eq ''); $c_number='' if($mypost eq ''); $c_email='' if($email eq ''); $c_hp_url='' if($hp_url eq ''); $c_address=''if($address eq ''); $c_sex='' if($sex eq ''); $c_age='' if($age eq ''); $c_face='' if($face eq ''); } $c_name=$name if($name ne ''); $c_number=$mypost if($mypost ne ''); $c_email=$email if($email ne ''); $c_hp_url=$hp_url if($hp_url ne ''); $c_address=$address if($address ne ''); $c_sex=$sex if($sex ne ''); $c_age=$age if($age ne ''); $c_face=$face if($face ne ''); $c_hp_url='http://' if($c_hp_url eq ''); print <
指定名前日付
', '','',$names{$_},'',$dates{$_},'
END_OF_TEXT print ''; print ''; print ''; print ''; print <
私書箱書き込みフォーム
書き込み先・私書箱番号(半角数字)
自分の私書箱番号(半角数字)
名前 メール
性別年齢
住所顔タイプ
HP
題名
コメント
[アイコン]
 

END_OF_TEXT if($command eq 'writing'){ if($email ne ''){ $email="$mail_icon"; } if($hp_url ne 'http://' && $hp_url ne ''){ $hp_url="$home_icon"; } else{ $hp_url=""; } if($sex ne $sex_array[0]){ $profile.=$sex.' ,'; } if($age ne $age_array[0]){ $profile.=$age.' ,'; } if($address ne $address_array[0]){ $profile.=$address.' ,'; } if($profile ne ''){ chop($profile); $profile='('.$profile.')'; $profile=~s/ //g; } else{ $profile=' '; } if($mypost ne ''){ $post_mark=""; } print "

" if($mypost ne ''); print( '', '', '
', $face_icon[$face],' ',$subject,' ',$date,'
 ',$name,$profile,$email,$hp_url,$post_mark,'
 
', $comment ); print('

'); print('

') if($mypost ne ''); print "$error_code

"; } } ####################顔htmlを表示#################### sub face_list{ print < END_OF_TEXT for($i=0;$i<@face_icon;$i+=5){ print('') if(@face_icon>$i); print('') if(@face_icon>$i); print('') if(@face_icon>$i+1); print('') if(@face_icon>$i+2); print('') if(@face_icon>$i+3); print('') if(@face_icon>$i+4); print('') if(@face_icon>$i); print('') if(@face_icon>$i); print('') if(@face_icon>$i && $i==0); print('') if(@face_icon>$i && $i!=0); print('') if(@face_icon>$i+1); print('') if(@face_icon>$i+2); print('') if(@face_icon>$i+3); print('') if(@face_icon>$i+4); print('') if(@face_icon>$i); } print <
顔タイプ一覧
',$face_icon[$i],'',$face_icon[$i+1],'',$face_icon[$i+2],'',$face_icon[$i+3],'',$face_icon[$i+4],'
(',$i,')(',$i,')(',$i+1,')(',$i+2,')(',$i+3,')(',$i+4,')
 

END_OF_TEXT } ####################私書箱データ収集#################### sub mypost_open{ my($data_file)=@_; my $data_file_cgi=$data_file.'.cgi'; if(-f $data_dir/$data_file_cgi==0){ $data_file=$data_file_cgi; } if(open(DATA,"$data_dir/$data_file")){ @mypost_line = ; close(DATA); for($i=0; $i<@mypost_line; $i++){ chomp($mypost_line[$i]); my ($num,$number,$subject,$name,$email,$address,$sex,$age,$face,$hp_url,$date,$comment) = split(/,/,$mypost_line[$i]); $nums{$num}=$num; $numbers{$num}=$number; $subjects{$num}=$subject; $names{$num}=$name; $emails{$num}=$email; $addresss{$num}=$address; $sexs{$num}=$sex; $ages{$num}=$age; $faces{$num}=$face; $hp_urls{$num}=$hp_url; $dates{$num}=$date; $comments{$num}=$comment; $this_num=$num if($this_num<=$num); } $this_num++;#次ログの整理番号 } } ################私書箱データセーブ################ sub mypost_save{ my($data_file)=@_; my $data_file_cgi=$data_file.'.cgi'; if(-f $data_dir/$data_file_cgi==0){ $data_file=$data_file_cgi; } my ($sec,$min,$hour,$day,$month) = localtime($now_time); $month = ($month + 1); if($month < 10) { $month = "0$month"; } if($day < 10) { $day = "0$day"; } if($hour < 10) { $hour = "0$hour"; } if($min < 10) { $min = "0$min"; } $date = "" if($date_way==0); $date = "投稿日:$month月$day日 $hour時$min分" if($date_way==1); $date = "投稿日:$month月$day日" if($date_way==2); $comment =~ s/\r\n/
/g; $comment =~ s/\r/
/g; $comment =~ s/\n/
/g; $comment =~ s/\t/ /g; $comment=~ s/

/
 
/g; unless($mypost_line[0]=~/\Q,$subject,$name,$email,$address,$sex,$age,$face,$hp_url,\E/ && $mypost_line[0]=~/\Q,$comment\E$/){ unshift(@mypost_line,"$this_num,$mypost,$subject,$name,$email,$address,$sex,$age,$face,$hp_url,$date,$comment"); splice(@mypost_line,$log_max,@mypost_line-$log_max) if(@mypost_line > $log_max); if(open(DATA, ">$data_dir/$data_file")){ for($i=0;$i<@mypost_line;$i++){ print DATA "$mypost_line[$i]\n"; } close(DATA); } } else{ print "書き込み不可"; } } ####################データ収集#################### sub data_open{ unless(-f $data_file){open(DATA,">$data_file");close(DATA);} if(open(DATA,"$data_file")){ @line = ; close(DATA); for($i=0;$i<@line;$i++){ chomp($line[$i]); my ($number,$name,$pass,$last_time) = split(/,/,$line[$i]); $numbers{$number}=$number; $names{$number}=$name; $passs{$number}=$pass; $last_times{$number}=$last_time; $new_number=$number if($new_number<=$number); } $new_number++; } } ####################新規データセーブ#################### sub new_save{ my $new_datafile=$new_number.'.cgi'; unless(-f $data_dir/$new_datafile){open(DATA,">$data_dir/$new_datafile");close(DATA);} if(open(DATA, ">>$data_file")){ print DATA "$new_number,$name,$pass,$now_time\n"; close(DATA); } } ####################データセーブ#################### sub data_save{ if(open(DATA, ">$data_file")){ for($i=0; $i<@line; $i++){ if($line[$i]=~/^$number,/){ print DATA "$numbers{$number},$names{$number},$passs{$number},$now_time\n"; $check_number=1; } else{ print DATA "$line[$i]\n"; } } close(DATA); } } ####################データ消去#################### sub delete_data{ my (@target)=@_; if(open(DATA, ">$data_file")){ for($i=0; $i<@line; $i++){ my $delete_check=0; foreach(@target){ if($line[$i]=~/^$_,/){ my $data_file_cgi=$_.'.cgi'; my $delete_file=$_; if(-f $data_dir/$data_file_cgi==0){ $delete_file=$data_file_cgi; } unlink "$data_dir/$delete_file";#file消去 delete $numbers{$_}; $delete_check=1; last; } } if($delete_check==0){ print DATA "$line[$i]\n"; } } close(DATA); } } ################個人私書箱データ消去################ sub mydata_delete{ my ($data_file,@target)=@_; my $data_file_cgi=$data_file.'.cgi'; if(-f $data_dir/$data_file_cgi==0){ $data_file=$data_file_cgi; } if(open(DATA, ">$data_dir/$data_file")){ for($i=0; $i<@mypost_line; $i++){ my $delete_check=0; foreach(@target){ if($mypost_line[$i]=~/^$_,/){ delete $nums{$_}; $delete_check=1; last; } } if($delete_check==0){ print DATA "$mypost_line[$i]\n"; } } close(DATA); } } ####################管理人専用html#################### sub target_list{ print <管理人専用コマンド  

削除する場合は、削除データを指定してから、送信ボタンを押して下さい
(一度に複数のデータを削除出来ます)

END_OF_TEXT my @true_ranks=sort{ $b<=>$a }keys %numbers; foreach(@true_ranks){ my ($sec,$min,$hour,$day,$month) = localtime($last_times{$_}); $month = ($month + 1); if($month < 10) { $month = "0$month"; } if($day < 10) { $day = "0$day"; } my $date = "$month月$day日"; print( '', '', '', ) ; } print <
削除・カスタマイズフォーム
指定私書箱番号名前パスワード最終アクセス
', '','',$_,'',$names{$_},'',$passs{$_},'',$date,'
データ削除
カスタマイズする(初心者用)
カスタマイズする(上級者用)
色候補を見る
背景イラスト候補を見る
トップに戻る
 

END_OF_TEXT } ####################ヘッダー部分#################### sub html_header{ my ($title,$name,$pass,$number,$email,$hp_url,$address,$sex,$age,$face,$mypost) = @_; ($cookie_name,$cookie_pass,$cookie_number,$cookie_email,$cookie_hp_url,$cookie_address,$cookie_sex,$cookie_age,$cookie_face) = get_cookie(); $number=$mypost if($mypost ne ''); ($c_cook,$pass)=split(/:/,$cookie_pass) if($pass eq ''); ($c_cook,$number)=split(/:/,$cookie_number) if($number eq ''); ($c_cook,$email)=split(/:/,$cookie_email) if($email eq ''); ($c_cook,@c_hp_url)=split(/:/,$cookie_hp_url); $hp_url=join(':',@c_hp_url) if($hp_url eq ''); ($c_cook,$address)=split(/:/,$cookie_address) if($address eq ''); ($c_cook,$sex)=split(/:/,$cookie_sex) if($sex eq ''); ($c_cook,$age)=split(/:/,$cookie_age) if($age eq ''); ($c_cook,$face)=split(/:/,$cookie_face) if($face eq ''); my $header=''; $header.="HTTP/1.0 200 OK\n" if($ENV{'PERLXS'} eq 'PerlIS'); $header.="Content-type: text/html; charset=Shift_JIS\n"; $header.= &set_cookie($name,$pass,$number,$email,$hp_url,$address,$sex,$age,$face) if($name ne ''); $header.="\n"; $header.=''."\n"; $header.=''."\n"; $header.=''."\n"; $header.="${title}"."\n"; $header.=''."\n";; $header.='[TOP] [HOME]"; } my $menustr = ''; $menustr.=< $hooter

END_OF_TEXT return $menustr; } ####################クッキー取得#################### sub get_cookie{ my ($name,$pass,$number,$email,$hp_url,$address,$sex,$age,$face); if(defined $ENV{'HTTP_COOKIE'}){ my $cook=$ENV{'HTTP_COOKIE'}; (@cook) = split(/;/,$cook); foreach(@cook){ if($_=~/$C_NAME/){ my ($cookie_name,$value) = split(/=/,$_); ($name,$pass,$number,$email,$hp_url,$address,$sex,$age,$face) = split(/,/,$value); return ($name,$pass,$number,$email,$hp_url,$address,$sex,$age,$face); } } } } ####################クッキーセット#################### sub set_cookie{ my ($name,$pass,$number,$email,$hp_url,$address,$sex,$age,$face) = @_; return "Set-Cookie: ${C_NAME}=name:${name},pass:${pass},number:${number},email:${email},hp_url:${hp_url},address:${address},sex:${sex},age:${age},face:${face}; ${expires}\n\n"; } ###############クッキーの有効期限を取得############### sub expires { my($day) = @_; my(@date); my(@week) = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); my(@month) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @date = gmtime($now_time+ $day * 60 * 60 * 24); $date[5] = $date[5] + 1900; foreach (0..3) { $date[$_] = sprintf("%.2d",$date[$_]); } return "$week[$date[6]], $date[3]-$month[$date[4]]-$date[5] $date[2]:$date[1]:$date[0] GMT"; } ####################排他制御開始#################### # $id = LockOn(filename); sub LockOn{ my ($filename)=@_; rmdir($filename) if(-d $filename && ($now_time-(stat($filename))[9])>$expire); my $retry; for($retry=$num_retry; $retry>0 && mkdir($filename,0755)!=1; $retry--){ sleep($retry_time); } return $filename if($retry>0); # 成功 return undef; # 失敗 } ####################排他制御終了#################### # LockOff($id); sub LockOff{ my ($filename)=@_; rmdir ($filename) if(defined $filename); } ####################排他制御失敗#################### sub lock_error{ my $body = <しばらくお待ち下さい  

只今、込み合ってるようです。
しばらくしてから、リロード(再読み込み)してみて下さい

リロードしても繋がらない場合は・・・
3分間ほど待ってから、もう一度トライしてみて下さい。

注:新規設置の管理人様へ・・・
新規設置時に、このコメントばかり表\示される時は・・・
DATAのパーミッションが777(707の場合もあり)以外になっていないか・・・
DATAが、Dataやdataになっていないかを確認してみて下さいませ≦(._.)≧
(詳しくは、HPサービスのFAQを参照して下さい)
 

END_OF_BODY return $body; }