#!/usr/bin/perl #↑perlのパスを自分の環境に合わせて書き直します。 #大抵は、「#!/usr/bin/perl」 か 「#!/usr/local/bin/perl」です。 #解らない場合はサーバー管理者(もしくはプロバイダー)に #確認してください。 require 'pl/jcode.pl'; require 'pl/cfg.cgi'; &EST_reg; require 'pl/temp.cgi'; ################################################################ # Yomi-Search用データ登録用プログラム ################################################################ #(1)登録画面(新規登録・管理人代理登録・登録内容変更)(®ist) #(2)プレビュー画面(&preview) #(3)入力内容の整形(&join_fld) #(4)入力内容のチェック(&check) #(5)登録結果画面出力(&PRend) #(6)修正・削除のためのパスワード認証(&enter) #(7)ヘルプの表示(&help) #(8)パスワードの再発行・変更(&act_repass) #(9)リンク切れ報告フォーム(&no_link) #(p1)新規登録実行(&act_regist) #(p2)登録内容変更(&act_mente) #(p3)削除実行(&act_del) &form_decode; $Eref=$ENV{'HTTP_REFERER'}; $ENV{'HTTP_REFERER'}=""; #-----------------# if($FORM{'preview'} eq "on"){&preview;} #プレビュー画面 elsif($FORM{mode} eq "regist"){®ist;} #登録画面 elsif($FORM{mode} eq "act_regist"){&act_regist;} #新規登録実行 elsif($FORM{mode} eq "act_mente"){&act_mente;} #登録内容変更実行 elsif($FORM{mode} eq "act_del"){&act_del;} #削除実行 elsif($FORM{mode} eq "enter"){&enter;} #パスワード認証 elsif($FORM{mode} eq "help"){&help;} #ヘルプの表示 elsif($FORM{mode} eq "act_repass"){&act_repass;} #パスワードの再発行 elsif($FORM{mode} eq "no_link"){&no_link;} #リンク切れ報告フォーム else{®ist;} #登録画面 exit; #-----------------# sub regist{ #(1)登録画面(新規登録・管理人代理登録・登録内容変更)(®ist) #クッキーを記録 if($FORM{'in_mode'} eq "mente"){ #登録内容変更時 &get_cookie; if($FORM{changer} ne "admin" && $FORM{pass}){$CK_data[0]=$FORM{pass};} #登録者パスワード $CK_data[1]=$FORM{id}; #ID if($FORM{changer} eq "admin"){$CK_data[2]="admin";} #変更者 if($FORM{changer} eq "admin" && $FORM{pass}){$CK_data[3]=$FORM{pass};} #管理者パスワード if($FORM{cookie} eq "off"){&set_fo_cookie;} else{&set_cookie;} } #パスワード認証(管理者認証) if($FORM{'changer'} eq "admin"){ local($cr_pass); if($EST{crypt}){$cr_pass=crypt($FORM{pass},$EST{pass});} else{$cr_pass=$FORM{pass};} if($cr_pass ne $EST{pass}){ if(!$ENV{'REMOTE_HOST'}){$ENV{'REMOTE_HOST'}=gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2);} &mes("パスワードの認証に失敗しました
認証したコンピュータのIPアドレス:$ENV{'REMOTE_ADDR'}
認証したコンピュータのホスト名:$ENV{'REMOTE_HOST'}","パスワード認証失敗","java"); } } #管理人のみが登録できるモード if($EST_reg{no_regist} && $FORM{in_mode} ne "mente" && $FORM{changer} ne "admin"){ &mes("現在、訪問者による新規登録は停止されています","エラー","java"); } # 各フィールドのデータを「$P〜」に入力 #$Pdata[0]=データID,$Pdata[1]=タイトル,$Pdata[2]=ホームページのURL,$Pdata[3]=マークデータ #$Pdata[4]=更新日,$Pdata[5]=パスワード,$Pdata[6]=紹介文,$Pdata[7]=管理人コメント #$Pdata[8]=お名前,$Pdata[9]=メールアドレス,$Pdata[10]=カテゴリ(リスト),$Pdata[11]=time #$Pdata[12]=バナーURL,$Pdata[13]=アクセス数,$Pdata[14]=IP,$Pdata[15]=キーワード # $Pmode=>送信先のモード # $FORM{'in_mode'}=>概入力値設定モード(なし,new_dairi,mente,form) # $Smode_name=>各モードの判定用の内部変数(なし,new_dairi,mente) # $$FORM{'changer'}=>変更者(なし,admin) ##概入力値設定($FORM{'in_mode'}) #新規登録() if(!$FORM{'in_mode'}){@Pdata=("","","http://","","","","","","","",$FORM{'kt'},"","http://","","","");} #管理人代理登録(new_dairi) elsif($FORM{'in_mode'} eq "new_dairi"){} #内容変更(mente) elsif($FORM{'in_mode'} eq "mente"){ local($cr_pass,$i=0); open(IN,"$EST{log_path}$EST{logfile}"); while(){ @Pdata=split(/<>/,$_); if($Pdata[0] eq $FORM{id}){ if($EST{crypt}){$cr_pass=crypt($FORM{pass},$Pdata[5]);} else{$cr_pass=$FORM{pass};} if($FORM{changer} ne "admin" && $Pdata[5] ne $cr_pass){&mes("パスワードが違います","パスワード認証エラー","java");} $i=1; last; } } close(IN); if(!$i){&mes("該当するデータはありません","エラー","java");} } #外部入力(form) elsif($FORM{'in_mode'} eq "form"){ $FORM{'Fkt'}=""; foreach $kt_no(1 .. $EST_reg{kt_max}){ $FORM{'Fkt'} .= $FORM{"Fkt$kt_no"} . "&"; } @Pdata=("",$FORM{'Ftitle'},$FORM{'Furl'},"","",$FORM{'Fpass'},$FORM{'Fsyoukai'},"",$FORM{'Fname'},$FORM{'Femail'},$FORM{'Fkt'},"",$FORM{'Fbana_url'},"","",$FORM{'Fkey'}); } else{@Pdata=();} ##$Smode_nameの設定 #管理人代理登録 if($FORM{'changer'} eq "admin" && $FORM{'in_mode'} ne "mente"){$Smode_name="new_dairi";} #登録内容変更 elsif($FORM{'in_mode'} eq "mente"){$Smode_name="mente";} #登録者の新規登録 else{$Smode_name="";} ##$Pmodeの設定 #登録内容変更 if($FORM{'Smode_name'} eq "mente"){ $Pmode="act_mente"; } #新規登録 else{ $Pmode="act_regist"; } ##その他の設定 #相互リンクの有無 $MES_sougo{1}=" checked"; $MES_sougo{0}=""; #テンプレートの読み込み if($Smode_name eq "new_dairi"){ print "Content-type: text/html\n\n"; require "$EST{temp_path}regist_new_admin.html"; } elsif($FORM{'changer'} ne "admin" && $Smode_name eq "mente"){ if($EST{syoukai_br}){ $Pdata[6]=~s/
/\n/g; $Pdata[7]=~s/
/\n/g; } if($EST_reg{no_mente}){&mes("現在、登録者による修正・削除は停止されています","エラー","java");} print "Content-type: text/html\n\n"; require "$EST{temp_path}regist_mente.html"; } elsif($FORM{'changer'} eq "admin" && $Smode_name eq "mente"){ if($EST{syoukai_br}){ $Pdata[6]=~s/
/\n/g; $Pdata[7]=~s/
/\n/g; } print "Content-type: text/html\n\n"; require "$EST{temp_path}regist_mente_admin.html"; } else{ print "Content-type: text/html\n\n"; require "$EST{temp_path}regist_new.html"; } } sub PR_mark{ ##マーク if($FORM{'changer'} eq "admin"){ local(@mark); @mark=split(/_/,$Pdata[3]); print<<"EOM";
  • 【マーク】
    EOM } } sub PR_kt{ ##登録するカテゴリを表示(&PR_kt) print<<"EOM"; EOM local($PRbf_kt,@kt_list,@kt,$kt_no=1,$line,@Pkt,$PRselect=" selected"); @Pkt=split(/&/,$Pdata[10]); if($EST_reg{kt_min} ne $EST_reg{kt_max}){print "

    EOM &mes($mes,"管理者への通知画面"); } $FORM{id}=~s/\D//g; if($FORM{id} && (index($ENV{HTTP_USER_AGENT},"Mozilla")>=0 || index($ENV{HTTP_USER_AGENT},"Lynx")>=0)){ local($ip_fl=1,@ip); if($EST{no_link_ip}){ @ip=split(/,/,$EST{no_link_ip}); foreach(@ip){if(index($ENV{REMOTE_ADDR},$_)>=0){$ip_fl=0;last;}} } if($ip_fl){ local($Dhoukoku,$Dcom,$Dname,$Demail,$fl=0); #報告種別(リンク切れ=0/サイト移転=1/バナーリンク切れ=2/規約違反=3/その他=4) if($FORM{type_no_link}){$Dhoukoku.="1,";$fl=1;} if($FORM{type_move}){$Dhoukoku.="2,";$fl=1;} if($FORM{type_bana_no_link}){$Dhoukoku.="3,";$fl=1;} if($FORM{type_ill}){$Dhoukoku.="4,";$fl=1;} if($FORM{type_other}){$Dhoukoku.="5,";$fl=1;} if(!$fl){&mes("「通知種別」に最低一つはチェックしてください","チェックミス","java");} #コメント $FORM{com}=~s/\n/
    /g; $Dcom=$FORM{com}; #名前 $FORM{c_name}=~s/\n//g; $Dname=$FORM{c_name}; #E-Mail $FORM{c_email}=~s/\n//g; $Demail=$FORM{c_email}; if(length("$Dcom$Dname$Demail")>500){&mes("コメント、お名前、E-Mailの文字数は
    合計で250文字(全角換算)までで、お願いします。","文字数オーバー","java");} open(OUT,">>$EST{log_path}no_link_temp.cgi"); print OUT "$FORM{id}<>$ENV{'REMOTE_ADDR'}<>$Dhoukoku<>$Dcom<>$Dname<>$Demail<>\n"; close(OUT); } } $FORM{ref}=~s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg; &mes("ご報告ありがとうございました
    管理人に「$FORM{title}」についての通知を行いました","ご報告ありがとうございます",$FORM{ref}); } sub act_regist{ #(p1)新規登録実行(&act_regist) require "$EST{log_path}task_ys.cgi"; local($new,$new_id,@hyouji_log); #$new=>追加データ書き込み用/%TASK=>更新するカテゴリリスト #@hyouji_log=>結果表示用のログデータ #パスワード認証(管理者認証) if($FORM{'changer'} eq "admin"){ local($cr_pass); if($EST{crypt}){$cr_pass=crypt($FORM{pass},$EST{pass});} else{$cr_pass=$FORM{pass};} if($cr_pass ne $EST{pass}){ if(!$ENV{'REMOTE_HOST'}){$ENV{'REMOTE_HOST'}=gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2);} &mes("パスワードの認証に失敗しました
    認証したコンピュータのIPアドレス:$ENV{'REMOTE_ADDR'}
    認証したコンピュータのホスト名:$ENV{'REMOTE_HOST'}","パスワード認証失敗","java"); } } ✓ #入力内容のチェック &lock; #ロック #ID取得&2重URL登録チェック $Cgane_pre=0; #総登録数 if($EST_reg{nijyu_url}){$new_id=&get_id_url_ch(1);} else{$new_id=&get_id;} &join_fld($new_id); #入力内容の整形 $new=join("<>",@Slog,"\n"); @hyouji_log=@Slog; if($EST{user_check} && $FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){ #<仮登録時> #仮登録ログデータに追加書き込み open(OUT,">>$EST{log_path}$EST{temp_logfile}"); print OUT $new; close(OUT); ##メールを送信 #件名に付けるマークを設定 local($PR_mail_add_line,$PR_mail_sougo,$PR_mail_com,$PR_mail_kt); &kenmei_put_mark; sub kenmei_put_mark{ if($FORM{Fsougo}){$PR_mail_sougo="(link)";} else{$PR_mail_sougo="";} if($FORM{Fto_admin}){$PR_mail_com="(com)";} else{$PR_mail_com="";} if($FORM{Fadd_kt}){$PR_mail_kt="(kt)";} else{$PR_mail_kt="";} $PR_mail_add_line=$PR_mail_sougo . $PR_mail_com . $PR_mail_kt; } $Slog[6]=~s/
    /\n/g; $Slog[7]=~s/
    /\n/g; if($EST{mail_temp}){require "pl/mail_ys.cgi";} if($EST{mail_to_admin} && $EST{mail_temp}){ #管理人へメール送信 &mail($EST{admin_email},$Slog[9],"$EST{search_name} 仮登録完了通知$PR_mail_add_line","temp","admin",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin}); } if($EST{mail_to_register} && $EST{mail_temp}){ #登録者へメール送信 &mail($Slog[9],$EST{admin_email},"$EST{search_name} 仮登録完了通知","temp","",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin}); } $Slog[6]=~s/\n/
    /g; $Slog[7]=~s/\n/
    /g; &unlock(); #ロック解除 ##登録結果出力 print "Content-type: text/html\n\n"; require "$EST{temp_path}regist_new_end_temp.html"; } # else{ #<新規登録時> #本体ログデータに追加書き込み open(OUT,">>$EST{log_path}$EST{logfile}"); print OUT $new; close(OUT); ##登録者のメッセージを保存する設定の場合 if(($FORM{Fadd_kt} || $FORM{Fto_admin}) && $EST_reg{look_mes} && $EST_reg{look_mes}=~/(\d+)(\w*)/){ local(@look_mes_list,@look_mes,$look_mes,$i=0,$max=$1); open(IN,"$EST{log_path}look_mes.cgi"); while(){ if($i<$max){push(@look_mes_list,$_);} else{last;} $i++; } close(IN); #一括送信する場合 if($2 eq "m" && $i>=$max){ $mail_mes=<<"EOM"; ## $EST{search_name} 登録者からのメッセージ通知 ## EOM local(@tlook_mes); foreach(@look_mes_list){ @tlook_mes=split(/<>/,$_); $mail_mes.=<<"EOM"; +-------------------------+ 登録日:$tlook_mes[1] / お名前:$tlook_mes[5] / Email: $tlook_mes[4] タイトル:$tlook_mes[7] URL: $tlook_mes[6] 修正用URL: $EST{cgi_path_url}regist_ys.cgi?mode=enter&id=$tlook_mes[0] EOM if($tlook_mes[2]){$mail_mes.="新設希望カテゴリ:$tlook_mes[2]\n";} if($tlook_mes[3]){ $tlook_mes[3]=~s/
    /\n/g; $mail_mes.=$tlook_mes[3] . "\n"; } } $mail_mes.="+-------------------------+\n"; require "pl/mail_ys.cgi"; &mail($EST{admin_email},$EST{admin_email},"$EST{search_name} 登録者からのメッセージ通知($max件)","any","","","","","","",$mail_mes); $i=0; @look_mes_list=(); open(OUT,">$EST{log_path}look_mes.cgi"); close(OUT); } if($i eq $max){pop @look_mes_list;} #新規追加データ($look_mes)を作成 $look_mes[0]=$Slog[0]; $look_mes[1]=$Slog[4]; $look_mes[2]=$FORM{Fadd_kt}; $look_mes[3]=$FORM{Fto_admin}; $look_mes[4]=~s/\n/
    /g; $look_mes[4]=$Slog[9]; $look_mes[5]=$Slog[8]; $look_mes[6]=$Slog[2]; $look_mes[7]=$Slog[1]; $look_mes=join("<>",@look_mes); $look_mes=~s/\n//g; $look_mes.="<>\n"; unshift(@look_mes_list,$look_mes); open(OUT,">$EST{log_path}look_mes.cgi"); print OUT @look_mes_list; close(OUT); } ##メールを送信 unless($FORM{FCmail} eq "no" && $FORM{changer} eq "admin"){ #送信する設定なら #件名に付けるマークを設定 local($PR_mail_sougo,$PR_mail_com,$PR_mail_kt); &kenmei_put_mark; $Slog[6]=~s/
    /\n/g; $Slog[7]=~s/
    /\n/g; if($EST{mail_new}){require "pl/mail_ys.cgi";} if($EST{mail_to_admin} && $EST{mail_new}){ #管理人へメール送信 &mail($EST{admin_email},$Slog[9],"$EST{search_name} 新規登録完了通知$PR_mail_add_line","new","admin",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin}); } if($EST{mail_to_register} && $EST{mail_new}){ #登録者へメール送信 &mail($Slog[9],$EST{admin_email},"$EST{search_name} 新規登録完了通知","new","",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin}); } $Slog[6]=~s/\n/
    /g; $Slog[7]=~s/\n/
    /g; } #更新するカテゴリリストを作成 #%TASK/@TASK_listを使用 @TASK_list=(); $TASK{"new"}=1; #新着情報 if($FORM{'changer'} eq "admin"){ #マークカテゴリの更新 foreach(1 .. 2){ #←マーク数を増やすときは修正 if($FORM{"Fmark$_"}){$TASK{"m$_"}=1;} } } if($EST{html}){ #カテゴリをHTMLファイルで表示する場合 local(@kt,$i,$tmp); foreach $i(1 .. $EST_reg{kt_max}){ if($FORM{"Fkt$i"}){ $TASK{$FORM{"Fkt$i"}}=1; push(@TASK_list,$FORM{"Fkt$i"}); @kt=split(/_/,$FORM{"Fkt$i"}); if($#kt>0){ pop(@kt); $tmp=join("_",@kt); $TASK{$tmp}=1; push(@TASK_list,$tmp); } } } } else{ #カテゴリをCGIで動的に表示する場合 local($kt,$i); foreach $i(1 .. $EST_reg{kt_max}){ if($FORM{"Fkt$i"}){ ($kt)=split(/_/,$FORM{"Fkt$i"}); $TASK{$kt}=1; } } } ##派生ファイルの処理 if($EST{html} && $EST{task} ne "2"){ #即時処理(html && !cron) &MK_html(*TASK_list); &make_task; } else{&make_task;} #タスクファイルに書き込み ##総登録数を記録 open(OUT,">$EST{log_path}total_url.log"); print OUT $Cgane_pre+1; close(OUT); &unlock(); #ロック解除 ##登録結果出力 @Slog=@hyouji_log; print "Content-type: text/html\n\n"; require "$EST{temp_path}regist_new_end.html"; } # } sub get_id_url_ch{ ##新規登録用のIDを取得&2重URL登録チェック #チェックに掛かった場合にはロックも解除 #$arg=>(新規登録=1/内容変更=2) local($id,$line,@Tlog,$fl=$_[0],$i=0,$pre_title); open(IN,"$EST{log_path}$EST{logfile}"); while($line=){ @Tlog=split(/<>/,$line); if($FORM{Furl} eq $Tlog[2]){$i++; $pre_title=$Tlog[1];} if($FORM{id} eq $Tlog[0]){@Spre_log=@Tlog;} if($fl<=$i){&unlock; &mes("そのURLはすでに登録されています

    $Tlog[1] :
    $Tlog[2]","2重登録エラー","java");} $id=$Tlog[0]; $Cgane_pre++; } if($fl eq "2" && $i eq "1" && $Spre_log[2] ne $FORM{Furl}){&unlock; &mes("そのURLはすでに登録されています

    $pre_title :
    $FORM{Furl}","2重登録エラー","java");} close(IN); if($FORM{changer} ne "admin" && $EST{user_check} && $FORM{mode} eq "act_regist"){ #仮登録モードでユーザの新規登録時 open(IN,"$EST{log_path}$EST{temp_logfile}"); while($line=){ @Tlog=split(/<>/,$line,5); if($FORM{Furl} eq $Tlog[2]){$i++;} if($fl<=$i){&unlock; &mes("そのURLは現在登録申\請中です

    $Tlog[1] :
    $Tlog[2]","2重登録エラー","java");} $id=$Tlog[0]; } close(IN); } return $id+1; } sub get_id{ ##新規登録用のIDを取得 local($id,$line); if($FORM{changer} ne "admin" && $EST{user_check} && $FORM{mode} eq "act_regist"){ #仮登録モードでユーザの新規登録時 open(IN,"$EST{log_path}$EST{temp_logfile}"); } else{ #その他 open(IN,"$EST{log_path}$EST{logfile}"); } while(){$line=$_; $Cgane_pre++;} close(IN); ($id)=split(/<>/,$line); return $id+1; } sub act_mente{ #(p2)登録内容変更(&act_mente) if($FORM{changer} ne "admin" && $EST_reg{no_mente}){&mes("現在、登録者による修正・削除は停止されています","エラー","java");} require "$EST{log_path}task_ys.cgi"; local($new,@log_lines,$line,@TASK_list); #$new=>追加データ書き込み用/%TASK=>更新するカテゴリリスト #パスワード認証(管理者認証) if($FORM{'changer'} eq "admin"){ local($cr_pass); if($EST{crypt}){$cr_pass=crypt($FORM{pass},$EST{pass});} else{$cr_pass=$FORM{pass};} if($cr_pass ne $EST{pass}){ if(!$ENV{'REMOTE_HOST'}){$ENV{'REMOTE_HOST'}=gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2);} &mes("パスワードの認証に失敗しました
    認証したコンピュータのIPアドレス:$ENV{'REMOTE_ADDR'}
    認証したコンピュータのホスト名:$ENV{'REMOTE_HOST'}","パスワード認証失敗","java"); } } ##その他の設定 $Smode_name="mente"; ✓ #入力内容のチェック &lock; #ロック #@Spre_log取得&2重URL登録チェック if($EST_reg{nijyu_url}){&get_id_url_ch(2);} else{ open(IN,"$EST{log_path}$EST{logfile}"); while(){ @Spre_log=split(/<>/,$_); if($Spre_log[0] eq $FORM{id}){last;} } close(IN); } #登録者のパスワード認証 if($FORM{changer} ne "admin"){ local($cr_pass); if($EST{crypt}){$cr_pass=crypt($FORM{pass},$Spre_log[5]);} else{$cr_pass=$FORM{pass};} if($Spre_log[5] ne $cr_pass){&unlock(); &mes("パスワードが間違っています$cr_pass $Spre_log[5]","パスワード認証エラー","java");} } &join_fld($Spre_log[0]); #入力内容の整形 $new=join("<>",@Slog); $new=~s/\n//g; $new .="<>\n"; #本体ログデータに書き込み open(IN,"$EST{log_path}$EST{logfile}"); while($line=){ @Tlog=split(/<>/,$line); if($Tlog[0] ne $Spre_log[0]){push(@log_lines,$line);} else{push(@log_lines,$new);} } close(IN); open(OUT,">$EST{log_path}$EST{logfile}"); print OUT @log_lines; close(OUT); ##メールを送信 $Slog[6]=~s/
    /\n/g; $Slog[7]=~s/
    /\n/g; if($EST{mail_new}){require "pl/mail_ys.cgi";} if($EST{mail_to_admin} && $EST{mail_ch}){ #管理人へメール送信 &mail($EST{admin_email},$Slog[9],"$EST{search_name} 登録内容変更完了通知","mente","admin",*Slog); } if($EST{mail_to_register} && $EST{mail_ch}){ #登録者へメール送信 &mail($Slog[9],$EST{admin_email},"$EST{search_name} 登録内容変更完了通知","mente","",*Slog); } $Slog[6]=~s/\n/
    /g; $Slog[7]=~s/\n/
    /g; ##更新するカテゴリリストを作成 #%TASKを使用 #更新情報or新着情報 {local(@time); @time=split(/_/,$Spre_log[11]); if(!$time[1] && $times-$time[0]<$EST{new_time}*86400){$TASK{"new"}=1;} else{$TASK{"renew"}=1;} } #マークカテゴリの更新 {local(@mark,$mark,$i=1); if($FORM{'changer'} eq "admin"){ foreach(1 .. 2){ #←マーク数を増やすときは修正 if($FORM{"Fmark$_"}){$TASK{"m$_"}=1;} } } @mark=split(/_/,$Spre_log[3]); foreach $mark(@mark){ if($mark){$TASK{"m$i"}=1;} $i++; } } if($EST{html}){ #カテゴリをHTMLファイルで表示する場合 local(@kt,$i,$tmp); foreach $i(1 .. $EST_reg{kt_max}){ if($FORM{"Fkt$i"}){ $TASK{$FORM{"Fkt$i"}}=1; push(@TASK_list,$FORM{"Fkt$i"}); @kt=split(/_/,$FORM{"Fkt$i"}); if($#kt>0){ pop(@kt); $tmp=join("_",@kt); if(!$TASK{$tmp}){push(@TASK_list,$tmp);} $TASK{$tmp}=1; } } } } else{ #カテゴリをCGIで動的に表示する場合 local($kt,$i); foreach $i(1 .. $EST_reg{kt_max}){ if($FORM{"Fkt$i"}){ ($kt)=split(/_/,$FORM{"Fkt$i"}); $TASK{$kt}=1; } } } ##派生ファイルの処理 if($EST{html} && $EST{task} ne "2"){ #即時処理(html && !cron) &MK_html(*TASK_list); &make_task; } else{&make_task;} #タスクファイルに書き込み &unlock(); #ロック解除 #マークの表示設定 {local(@mark,$mark,$i=1); $PR_mark=""; @mark=split(/_/,$Slog[3]); foreach $mark(@mark){ if($mark){$PR_mark .= $EST{"name_m$i"} . " ";} $i++; } } #カテゴリの変更表示設定 if($EST{user_change_kt}){$PR_kt="※登録者によるカテゴリ変更は現在禁止されています";} else{$PR_kt="";} ##表示用変数を設定 @Slog=split(/<>/,$new); ##登録結果出力 print "Content-type: text/html\n\n"; require "$EST{temp_path}regist_mente_end.html"; } sub act_del{ #(p3)削除実行(&act_del) local($Cdel=0,%kousin_list); require "$EST{log_path}task_ys.cgi"; if($FORM{del_mode} eq "single"){ #del_mode:single if($FORM{del_check} ne "on"){&mes("削除確認のためにチェックを入れてから削除ボタンを押してください","確認チェックをしてください","java");} if($FORM{changer} ne "admin" && $EST_reg{no_mente}){&mes("現在、登録者による修正・削除は停止されています","エラー","java");} if($FORM{changer} eq "admin"){&pass_check;} &lock; local(@log_lines,@Slog,$line,$fl=0); open(IN,"$EST{log_path}$EST{logfile}"); while($line=){ @Slog=split(/<>/,$line); if($FORM{id} eq $Slog[0]){ if($FORM{changer} ne "admin"){ #削除する人が登録者の場合 local($cr_pass); if($EST{crypt}){$cr_pass=crypt($FORM{pass},$Slog[5]);} else{$cr_pass=$FORM{pass};} if($cr_pass ne $Slog[5]){&unlock; &mes("パスワードの認証に失敗しました","エラー","java");} } local(@kt,$kt,@mark,$mark,$i=1,@time); @kt=split(/&/,$Slog[10]); foreach $kt(@kt){ #カテゴリ $kousin_list{$kt}=1; } @mark=split(/_/,$Slog[3]); foreach $mark(@mark){ #マーク if($mark){$TASK{"m$i"}=1;} $i++; } @time=split(/_/,$Slog[11]); if(time - $time[0]<86400*$EST{new_time}){ #新着・更新 if($time[1]){$TASK{renew}=1;} else{$TASK{new}=1;} } $Cdel++; $fl=1; } else{push(@log_lines,$line);} } close(IN); if(!$fl){&unlock; &mes("該当するデータは見つかりません","エラー","java");} open(OUT,">$EST{log_path}$EST{logfile}"); print OUT @log_lines; close(OUT); @log_lines=(); } else{ #del_mode:multi if($FORM{changer} ne "admin"){&mes("変更者指定が不正です","エラー","java");} &pass_check; &lock(); #リンク切れリストからの削除の場合 if($FORM{no_link} eq "on"){ local(@data,@lines); open(IN,"$EST{log_path}no_link.cgi"); while(){ @data=split(/<>/,$_); #id<>count<>ip<>url<>\n if(!$FORM{"id_$data[0]"}){push(@lines,$_);} } close(IN); open(OUT,">$EST{log_path}no_link.cgi"); print OUT @lines; close(OUT); } #デッドリンクチェック済みリストからの削除の場合 if($FORM{dl_check} eq "on"){ unless(-T $FORM{checkfile}){&unlock(); &mes("ファイル指定が異常です","エラー","java");} local(@data,@lines); open(IN,"./$FORM{checkfile}"); while(){ @data=split(/\t/,$_); #id=0<><><>url=13<>\n if(!$FORM{"id_$data[0]"}){push(@lines,$_);} } close(IN); open(OUT,">./$FORM{checkfile}"); print OUT @lines; close(OUT); } local(@log_lines,@Slog,$line); open(IN,"$EST{log_path}$EST{logfile}"); while($line=){ @Slog=split(/<>/,$line); if($FORM{"id_$Slog[0]"} eq "on"){ #削除リストに入っている場合 local(@kt,$kt,@mark,$mark,$i=1,@time); @kt=split(/&/,$Slog[10]); foreach $kt(@kt){ #カテゴリ $kousin_list{$kt}=1; } @mark=split(/_/,$Slog[3]); foreach $mark(@mark){ #マーク if($mark){$TASK{"m$i"}=1;} $i++; } @time=split(/_/,$Slog[11]); if(time - $time[0]<86400*$EST{new_time}){ #新着・更新 if($time[1]){$TASK{renew}=1;} else{$TASK{new}=1;} } $Cdel++; } else{push(@log_lines,$line);} } close(IN); open(OUT,">$EST{log_path}$EST{logfile}"); print OUT @log_lines; close(OUT); @log_files=(); } ##%kousin_listの内容をCGI/HTMLに応じて%TASK/@TASK_listに入れる ##派生ファイルの処理 if($EST{html} && $EST{task} ne "2"){ #即時処理(html && !cron) foreach(keys %kousin_list){ $TASK{$_}=1; push(@TASK_list,$_); } &MK_html(*TASK_list); } else{ #それ以外の場合 if($EST{html}){ #html foreach(keys %kousin_list){ $TASK{$_}=1; } } else{ #CGI local(@kt,$kt); foreach(keys %kousin_list){ @kt=split(/_/,$_); $TASK{$kt[0]}=1; } } } &make_task; ##総登録数を記録 open(IN,"$EST{log_path}total_url.log"); $Cgane_pre= - $Cdel; close(IN); open(OUT,">$EST{log_path}total_url.log"); print OUT $Cgane_pre; close(OUT); &unlock(); if($FORM{changer} eq "admin" && ($FORM{no_link} eq "on" || $FORM{dl_check} eq "on")){&mes("削除処理が完了しました","削除完了","kanri");} else{&mes("削除処理が完了しました","削除完了",$EST{home});} } ####個別処理#### ##目次## #フォームデータのデコード(&form_decode) sub form_decode{ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$form,$ENV{'CONTENT_LENGTH'}); } else { $form=$ENV{'QUERY_STRING'}; } @pairs=split(/&/,$form); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $name =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $value =~ s/>/>/g; $value =~ s/表示するメッセージ # $arg2=>ページのタイトル(省略時は「メッセージ画面」) # $arg3=>・JavaScriptによる「戻る」ボタン表示=java # ・$ENV{'HTTP_REFERER'}を使う場合=env # ・管理室へのボタン=kanri # ・通常のURL又はパスを指定する場合にはそのURL又はパスを記入 # ・省略時は非表示 # $arg4=>ロック解除=unlock #戻り値:なし sub mes{ print "Content-type: text/html\n\n"; $Munlock=$_[3]; if($Munlock eq "unlock"){&unlock();} $MES=$_[0]; if($_[1]){$TITLE=$_[1];} else{$TITLE="メッセージ画面";} if($_[2] eq "java" || ($_[2] eq "back_reg" && $FORM{mode} eq "act_mente")){ $BACK_URL="
    " } elsif($_[2] eq "env"){ $BACK_URL="【戻る】"; } elsif($_[2] eq "kanri"){ $BACK_URL="
    " } elsif(!$_[2]){$BACK_URL="";} elsif($_[2] eq "back_reg"){ $FORM{Fsyoukai}=~s/
    /\n/g; if($FORM{changer} eq "admin"){$FORM{in_mode}="new_dairi";} else{$FORM{in_mode}="form";} $BACK_URL=<<"EOM";
    EOM foreach(1 .. $EST_reg{kt_max}){ $BACK_URL .="\n"; } $BACK_URL .=<<"EOM"; EOM } else{$BACK_URL="【戻る】";} require "$EST{temp_path}mes.html"; exit; } ##-- end of regist_ys.cgi --##