▼スレッド
│
└◇1747:バグ? [パパート] 08/26 19:42
└◇1748:Re:バグ? [moon] 08/26 21:31
└◇1749:Re[2]:バグ? [パパート] 08/26 21:42
└◇1750:Re[3]:バグ? [moon] 08/26 22:01
└◇1751:Re[4]:バグ? [パパート] 08/26 22:19
└◇1752:Re[5]:バグ? [moon] 08/26 22:43
└◇1753:Re[6]:バグ? [パパート] 08/27 12:49
└◇1754:Re[7]:バグ? [moon] 08/27 22:26
└◇1755:Re[8]:バグ? [パパート] 08/27 23:27<-last
何度もすいません。パパートです。スレッド一覧
moonさんの、おかげで、たくさんのスクリプトを作れるようになり
自由度の高いゲームになってきました。
ありがとうございます。
さて、今回は、バグ?です。
えと、今日午前8時ごろまでは、正常にログインできたそうなんですが、その8時ごろにログインした人が、ログアウトしてから
ログインできない状態になってしまいました。
状態は↓です。
・ログインすると、ID 0000は存在しません と出る。
・誰が、ログインしても必ず「ID 0000は存在しません」と出てしまう。
いまのところ、これぐらいしか、分かりません。
どうか、教えてください。
追記:
・ユーザーデータを入れているフォルダの指定先は、ちゃんとあっています。
・ ID:0000 は存在しています。
です。 では、お願いします。
> さて、今回は、バグ?です。スレッド一覧
>
> えと、今日午前8時ごろまでは、正常にログインできたそうなんですが、その8時ごろにログインした人が、ログアウトしてから
> ログインできない状態になってしまいました。
>
> 状態は↓です。
> ・ログインすると、ID 0000は存在しません と出る。
> ・誰が、ログインしても必ず「ID 0000は存在しません」と出てしまう。
>
> いまのところ、これぐらいしか、分かりません。
>
> どうか、教えてください。
>
> 追記:
> ・ユーザーデータを入れているフォルダの指定先は、ちゃんとあっています。
> ・ ID:0000 は存在しています。
> です。 では、お願いします。
"ID 0000は存在しません"はファイルが開けない場合に発生するので以下を確認してみてください。
・0000.dat(拡張子はオリジナルの場合)に読み取りパーミッションがあるか?
・$usrdirディレクトリに実行パーミッションがあるか?
これが問題ないようならsub get_userの「open(IN,"$usrdir$_[0]\.dat") || &error("ID $_[0]は存在しません");」を以下のようにしてアクセス先が正しいかどうかを確認してみてください。(拡張子はオリジナルの場合)
open(IN,"$usrdir$_[0]\.dat") || &error("ID $_[0]は存在しません $usrdir$_[0]\.dat");
パーミッション を確かめたところ 0000だけ 666じゃなかったです。。(修正しました)スレッド一覧
スクリプトは
sub get_user {
return if $getuserflag;
open(IN,"$usrdir$_[0]\.dat") || &error("ID $_[0]は存在しません $usrdir$_[0]\.dat");
@_ = <IN>;
close(IN);
if (!@_) { &error("ID $_[0] 読みこみエラー") }
&get_userflag($_[0],'u');
$userline = shift(@_);
$getuserflag = 1;
return @_;
}
にしてみました。
(アクセス確認のため)
これで、ログインしようとしても
ID 0000は存在しません
と出ます。
あと 違うIDの人がログインしたら
必ず0000ではなく、その人の、「ID【ID】は存在しません」
と表示されたそうです。
なぜか、エラー
open(IN,"$usrdir$_[0]\.dat") || &error("ID $_[0]は存在しません $usrdir$_[0]\.dat");
の
error("ID $_[0]は存在しません $usrdir$_[0]\.dat");
が、実行されてないような気がします。
どうでしょうか・・・・?
お願いします。
> なぜか、エラースレッド一覧
> open(IN,"$usrdir$_[0]\.dat") || &error("ID $_[0]は存在しません $usrdir$_[0]\.dat");
> の
> error("ID $_[0]は存在しません $usrdir$_[0]\.dat");
> が、実行されてないような気がします。
ログイン時の現象ということでsub get_userに絞ったわけですが実行されないということは別の場所でのエラーのようです。
他の"ID 〜は存在しません"を変更して試してください。(どのサブルーチンかも重要です。)
別の場所を調べましたが、ありませんでした。スレッド一覧
とりあえず、関係のありそうな、スクリプトを
載せます。
ログイン前
print "つづきからプレイ<br>\n";
print qq|名前<input type=text name=name value="$c_name">\n|;
print qq|パスワード<input type=password name=pass value="$c_pass">\n|;
print qq|4桁のID<input type=password name=id value="$c_id">\n|;
&OKbuttoninform('','make_conn');
&form('end');
ログイン
# Sub Make Continue #
sub make_conn {
if ($Fm{'name'} eq "" && $Fm{'pass'} ne $admpas) { &error("名前を入力してください"); }
if ($Fm{'pass'} eq "") { &error("パスワードを入力してください"); }
if ($Fm{'id'} eq "") { &error("4桁のIDを入力してください"); }
@rcdlines = &get_user("$Fm{'id'}");
&error("名前がIDと一致しません") if $nm ne $Fm{'name'} && $Fm{'pass'} ne $admpas;
&error("パスワードが間違っています") if $ps ne $Fm{'pass'} && $Fm{'pass'} ne $admpas;
# &error("現在プレイ中か、前回セーブを行っていないので、ご利用できません。") if ($fg ne 'NS')&&($fg ne 'HS')&&($fg ne 'SS') ;
$now = int((time - $tm) / 3600);
if ($av eq 'dead') {
$bp += $now;
if ($bp >= $def_ha) {
$av = 'alive';
$hp = &hpcheck($hp,$xp,$bp - $def_ha);
$bp = ''
}
}
else { ($hp) = &hprecover($hp,$xp,$sp,$av,$tm,$fg) }
$lt = time;
$fg = ''; &userout;
&cookie_set; &play_form;
&get_user
sub get_user {
return if $getuserflag;
open(IN,"$usrdir$_[0]\.dat") || &error("ID $_[0]は存在しません $usrdir$_[0]\.dat");
@_ = <IN>;
close(IN);
if (!@_) { &error("ID $_[0] 読みこみエラー") }
&get_userflag($_[0],'u');
$userline = shift(@_);
$getuserflag = 1;
return @_;
}
です。 バグ確認お願いします...
> 別の場所を調べましたが、ありませんでした。スレッド一覧
sub errorの「print qq|<B><font color=#FF0000>$_[0]</font></B>\n|;」を以下のようにして呼び出し場所を確認してから試してください。
print qq|<B><font color=#FF0000>$_[0]</font>|, join(',', (caller(0))[1, 2]), qq|</B>\n|;
moonさんの、おかげで、直りました。スレッド一覧
ちょびっとだけ、指定先がおかしかったです。
ありがとうございました。
最後に
疑問なのですが、なぜこうなってしまったのでしょう?
昨日の
1、正常に動いてた 8時ごろまで
2、それ以降にログインする人にだけ、エラーが、出るようになった。
3、その時間帯 僕は何もいじってない
です。ハッキングとか、あるか心配です;;;
原因(例でもいいので)が、あれば、教えてください。
セキュリティ強化等、修正したいと思います。
> 疑問なのですが、なぜこうなってしまったのでしょう?スレッド一覧
>
> 昨日の
> 1、正常に動いてた 8時ごろまで
> 2、それ以降にログインする人にだけ、エラーが、出るようになった。
> 3、その時間帯 僕は何もいじってない
>
> です。ハッキングとか、あるか心配です;;;
> 原因(例でもいいので)が、あれば、教えてください。
> セキュリティ強化等、修正したいと思います。
さすがに情報が少ないので何とも言えないです。
CGIのソースファイル自体が書き換えられていたのでしたらWebサーバーおよびFTPサーバーのログを確認してみてはどうでしょうか。(レンタルサーバーでログが見れない場合でも問い合わせれば提供してもらえるかもしれませんし。)
わかりました。スレッド一覧
ありがとうございます。
とりあえず、サーバーのほうを確かめてみます。