CGI-BBS > 電子掲示板 > WWWBBS > 「データ破損の可能性ありが」・・・


カレッヂ
カレッヂ


質問者 りょう  投稿日 3/15(木) 00:57:59
「データ破損の可能性あり」ってどおういうことなんでしょうか?

よろしくお願いします。
回答者 まさ  [削除]  投稿日 3/15(木) 09:07:51
それはBBSのログデータと言う事ですか?

ログファイルは同時アクセスがあれば壊れる可能性はあります。
通常それを回避する為にロック処理を行いますが、100%のロック処理はないので、結局
100%ファイルが壊れないとはいいきれないと言うことではないですか?

ロック処理とバックアップを取るようにする処理の2つをしていると、まあ大概の場合は
大丈夫ですけどね。実際わたしはそれで1日1万件のアクセスのあるBBSを作ったことが
ありますが、データは壊れたことはないです。

その時のロックのアルゴリズムは恐ろしく長いものでしたけど。
(BBSの大半はロック処理といっても過言ではなかったです)

回答者 羊相談員  [削除]  投稿日 3/15(木) 10:09:52
こういう場合はどういうときに「データ破損の可能性あり」と表示されるのかを明確にしていただけるよう
お願いします。

質問者 りょう  [削除]  投稿日 3/15(木) 21:25:14
ありがとうございます。
まささんのような高度なことではないのですが、
初心者で、BBSの項目を増やしたりしていると、
突然、「データ破損の可能性あり」と。

訳がわからなくなりいったん元にのどしたのですが、
CGI同士で同じDBから呼び出し、書きこみをしていたデータの配列を
変えたらなったようでした。
まだはっきりとは分かっていませんが。


回答者 羊相談員  [削除]  投稿日 3/16(金) 18:56:49
>BBSの項目を増やしたりしていると、

↑の意味がよくわからないのですが、
もしかしてWWWBBBSを改造している最中に
エディタが出すメッセージですか?

質問者 りょう  [削除]  投稿日 3/16(金) 20:42:07
書き方が悪くてすいません。
おっしゃる通りです。
項目を増やそうとしているうちに、
こういうメッセージがでるようになってしまいました。
回答者 羊相談員  [削除]  投稿日 3/17(土) 14:31:17
そのメッセージの全文を教えてください。
質問者 りょう  [削除]  投稿日 3/21(水) 20:59:59
#■記録

        if (!open(DB,"> ./msg/$basenum")) { &error('記録エラー','記事の記録ができません.'); }
        print DB "Crypt:$crypt_password\n";
        print DB "Rc:0\n";
        print DB "Date:$date_now\n";
        print DB "Subject:$FORM{'subject'}\n";
        print DB "Name:$FORM{'name'}\n";
        print DB "Email:$FORM{'email'}\n";
        print DB "Pobox:$FORM{'pobox'}\n";
        $size = length($FORM{'value'});
        print DB "Size:$size\n";
        print DB "Host:$host\n";
        print DB "Homepage:$FORM{'homepage'}\n";
        print DB "Tree:$FORM{'resp_base'}\n\n";
        print DB $FORM{'value'};
        close(DB);
        chmod(0666,"./msg/$basenum");

        if (! $no_tree) { &tree; }

ここに新たに項目を増やしたらダメなんです。
回答者 羊相談員  [削除]  投稿日 3/21(水) 21:53:30
いや、そっちじゃなくて
エディタが出す警告メッセージの全文を教えてください。
質問者 りょう  [削除]  投稿日 3/21(水) 22:15:37
「実行エラー」出るんですが・・・
質問者 りょう  [削除]  投稿日 3/22(木) 21:06:10
すいません。間違えてました。

if (!open(DB,"$file")) { &error("入出力エラー"); }
        @lines = <DB>;
        close(DB);
        $password = shift(@lines);
        chop($password) if $password =~ /\n$/;
        ($header,$password) = split(/:/,$password);
        if ($header ne 'crypt_password') { &error("データ破損の可能\性あり"); }

の「データ破損の可能性あり」が表示されます。
回答者 羊相談員  [削除]  投稿日 3/22(木) 22:19:29
それは「改造しているときにエディタが出すメッセージ」ではないような……。
まあとにかくそれは置いといて、
こういうときは$headerや$passwordの内容をprintして
期待していた通りの値が入っているかどうかを確認してみるのがいいです。
回答者 羊相談員  [削除]  投稿日 3/22(木) 22:27:59
今回の場合はerror関数を流用すればいいので
&error("$header $password");
とすると簡単に$headerと$passwordの内容を確認できます。

返信(回答)する


Web裏技