質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

0回答

762閲覧

データファイルが一部破損する

0QlKBumLvXalP0N

総合スコア8

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

1クリップ

投稿2020/10/26 23:12

ネット上で配布されているCGIを使っているのですが
登録数が200を超えたあたりから、古いデータ(data.dat)が100個ほど消えてしまいました。
ただコピペしただけなのでなぜ消えたのかわかりません。
どこか直せばいい所があるのでしょうか?

Perl

1$max = 25; # テーブル1つあたりの人数 2$max_table = 2; # 1ページに表示するテーブルの数 3 4$checkname = 0; 5 6$makeindex = 0; 7 8$formmail = 1; 9 10$adminmail = 0; # 0:送らない 1:新規投稿の場合のみ 2:修正の時のみ 3:新規投稿と修正の時 11$mailfor = 'xxxx@xxx.xxx'; # 送り先メールアドレス。送らないときは変更の必要無し 12$mailfrom = 'Formmail'; # 差出人欄に表示するアドレス。これは変更しなくてもOK 13 14$usetag = 1; 15 16@errtag = ('table','script','meta','form','!--','embed','html','body','tr','td','th','noscript','style'); 17 18$autolink = 1; 19 20$show_host = 0; 21 22# 訪問者が入力したURLに飛ぶときは・・・0:同じ窓で表示 1:別窓表示 23$target = 1; 24 25# 日付は年まで取得する?(0=月まで 1=年まで) 26$getyear = 0; 27 28# 詳細表示ページで、前後のNoの人へのリンクを表示するするか? 29# (0=表示しない 1=上部にのみ表示 2=下部にのみ表示 3=上下に表示) 30$numlink = 3; 31 32# 曜日の表示法。変更例→ @wday_array = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); ←こんな感じ 33@wday_array = ('日','月','火','水','木','金','土'); 34 35# 登録者が自分で削除を行った場合の設定 36# 0:削除自体不可能にする(削除フォーム非表示) 37# 1:完全削除(再登録は不可能になるが、ログは軽くなる) 38# 2:欠番状態にする(再登録可) 39# 3:1と2で選択可 40$deltype = 2; 41 42# 項目入力フォームと、コメント入力フォームの幅 43$item_wid = 30; # 項目入力フォーム 44$com_wid = 60; # コメント入力フォーム 45 46# データベース風に使う場合は、$namaeを「情報」や「データ」としてもいいかも。 47# スクリプト中の「名前」とという単語をすべて置きかえます。 48$namae = '名前'; 49 50# 背景画像の設定(http://~でOK) 51$background = ''; 52 53 54#-------------------------------- 55# ファイル・フォルダへのパス設定 56#-------------------------------- 57# cgi-lib.plへのパス(同じフォルダならこのまま) 58require './cgi-lib.pl'; 59 60# jcode.plへのパス(同じフォルダならこのまま) 61$jcodepath = './jcode.pl'; 62 63# tool.cgiへのパス(同じフォルダならこのまま) 64$uppath = './tool.cgi'; 65 66$sendmail="/usr/sbin/sendmail"; 67 68$stylepath = './style.css'; 69 70$cgipath = './list.cgi'; 71 72$datapath = "./data.dat"; 73 74$imgdir = './img/'; 75 76 77$main_title = 'Miniりすと'; 78 79# タイトルに画像を使いたい場合は以下を設定 80$t_img= ''; # タイトル画像をURLで指定 81$twid = 135; #  〃 の横幅(ピクセル指定) 82$thei = 80; #  〃 の縦幅( 〃 ) 83 84 85$usedeny = 0; 86@deny = ("xxx.xxx.com","123.456.789.*",""); # 対象のホスト名(IPアドレス) 87 88# アクセス制限に引っ掛かる場合は・・・(0:名簿の閲覧自体禁止 1:閲覧はできるけど投稿できない) 89$denytype = 0; 90 91# アクセス制限に引っ掛かった場合のコメント。 92$denycom = '現在利用できません'; 93 94$base_url = ''; 95 96$method = 'POST'; 97 98 99$locktype = 0; 100 101$lockfile = "list.loc"; # ロックファイル名 102$lockdir = "lock/"; # ロックファイルディレクトリ(パーミッションは777or755) 103 104$encode = 1; 105 106$location = 1; 107 108$imgdir2 = ''; # 通常は空のままでOK 109 110 111&decode; 112$lockfile = "$lockdir$lockfile"; # ロックファイルを定義 113if(!$imgdir2){ $imgdir2 = $imgdir; } # CGI専用サーバーでの利用を考慮 114if($usedeny && !$denytype){ &host_check; } # アクセス制限 115 116if($mode eq "") { &index; } 117elsif ($mode eq "show") { &show; } 118elsif ($mode eq "view") { &show; } 119 120require "$uppath"; # 滅多に使わないサブルーチン入れ読み込み 121if ($mode eq "add") { &add; } 122elsif ($mode eq "find") { &find; } 123elsif ($mode eq "addform") { &form; } 124elsif ($mode eq "editform"){ &form; } 125elsif ($mode eq "send_form") { &send_form; } 126elsif ($mode eq "admin") { &admin; } 127elsif ($mode eq "edit"){ &edit; } 128elsif ($mode eq "c_pass") { &edit; } 129elsif ($mode eq "c_img") { &edit; } 130elsif ($mode eq "c_name") { &edit; } 131elsif ($mode eq "del") { &edit; } 132elsif ($mode eq "download") { &download; } 133elsif ($mode eq "send") { &send; } 134elsif ($mode eq "make") { &make; } 135elsif ($mode eq "remake") { &remake; } 136else{ &index; } 137exit; 138 139 140# ------------ # 141# デコード処理 # 142# ------------ # 143sub decode{ 144&ReadParse; 145if(%in){ require "$jcodepath"; } 146while (($key,$val) = each %in) { 147 if ($key ne "upfile") { 148 &jcode'convert(*val, "sjis", "", "z"); 149 150 # タグ処理 151 # 全て許可 152 if($usetag == 2) { 153 if($in{'kill_tag'} && $key eq "comment"){ 154 $val =~ s/</&lt;/g; 155 $val =~ s/>/&gt;/g; 156 $val =~ s/\"/&quot;/g; 157 } 158 foreach ( @errtag ){ 159 if ($value =~ /<$_(.|\n)*>/i) { &error("利用できないタグが含まれています"); } 160 } 161 } 162 else { 163 # コメントのみタグ許可 164 if($usetag == 1 && $key eq "comment"){ 165 if($in{'kill_tag'}){ 166 $val =~ s/</&lt;/g; 167 $val =~ s/>/&gt;/g; 168 $val =~ s/\"/&quot;/g; 169 } 170 else{ 171 foreach ( @errtag ){ 172 if ($value =~ /<$_(.|\n)*>/i) { &error("利用できないタグが含まれています"); } 173 } 174 } 175 } 176 # 全て不可 177 else{ 178 $val =~ s/</&lt;/g; 179 $val =~ s/>/&gt;/g; 180 $val =~ s/\"/&quot;/g; 181 } 182 } 183 184 # 区切り文字の”,”があれば",”に変換 185 $val =~ s/\,/,/g; 186 187 # 改行処理 188 if ($key eq "comment") { 189 $val =~ s/\r\n/<br>/g; 190 $val =~ s/\r/<br>/g; 191 $val =~ s/\n/<br>/g; 192 } 193 else { 194 $val =~ s/\r//g; 195 $val =~ s/\n//g; 196 } 197 198 if($autolink && $key eq "comment"){ 199 $val =~ s/([^=^\"]|^)(http\:[\w.\~\-/?\&+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target='_blank'>$2</a>/g; 200 } 201 } 202 $in{$key} = $val; 203} 204$mode = $in{'mode'}; 205$sort = $in{'sort'}; 206$in{'url'} =~ s/^http\:////; 207} 208

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2020/10/27 08:08

処理の肝心な部分のソースが開示されていないようです。 また、「ネット上で配布されているCGI」の出典を示して下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問