dポイントプレゼントキャンペーン実施中!

ネットにあった、ハイスコアランキングのサンプルをダウンロードして、サーバーにアップロードしてみたのですが、おもうように表示されません。

CGIは機能しているようなのですが、ランキング一位の人のスコアだけが表示されないのです.

一位の人が二位になると、二位のスコアは表示されるようになるのですが、あらたに一位の人のスコアが表示されなくなります。

バーミッションはcgi755、dat666にしてありますし、アスキー転送で改行はLFにしてあります。一位のスコアの表示以外の点では正常に作動してるので、どこがおかしいかわからないのです。

ダウンロードしたものを手を加えずにそのままアップロードしましたので、CGIの文法やフラッシュのスクリプトが間違っているということはないと思います。(他の人は同じサンプルファイルでうまく表示されてるようなので)


cgi設置も初めてなので、何か見逃しているのかもしれません。

原因かわからなくなってしまいました。誰か助けてください。

サーバーにアップロードしたページです↓
http://mokat.hp.infoseek.co.jp/cgi-bin/hiscsampl …

A 回答 (3件)

CGIに直接アクセスしてみました。


http://mokat.hp.infoseek.co.jp/cgi-bin/hisc.cgi
自動挿入の広告タグがじゃまをしているようです。
CGIのスクリプトを
#----- データをFlashへ送る
print "Content-type: text/plain\n\n";
print "dummy=dummy&";
for ($i = 0; $i < 10; $i++) {
($sc, $pname) = split(/,/,$sortdata[$i]);
print("score$i=$sc&name$i=$pname&");
}
というふうにダミーのデータを入れたらどうでしょう。
    • good
    • 0
この回答へのお礼

すごい!!!
でました。ダミーのデータを入れたらちゃんと動いてます!!
感動です!
意味はわかってないのですが、なぜこの文字を入れるだけで動くようになるのでしょう・・
ありがとうございました!
ずっとできなかったので嬉しくてたまりません・・
本当にありがとうございます!

お礼日時:2005/06/30 12:19

ちょっと今は寝る前なので詳しくは検証できませんが、



chop(@sortdata);

この箇所が気になりますね。

これは

chomp(@sortdata);

で良いと思います。

ただこの箇所が原因がどうかはわかりませんが。
明日検証してみます。
    • good
    • 0
この回答へのお礼

いろいろ検証していただいてありがとうございました。

お礼日時:2005/06/30 12:22

そのデータの中にはちゃんと一位の人のスコアが書かれていますか?



書かれていればCGIの問題の可能性があります。
書かれていなければFLASHのスクリプトの問題の可能性があります。

いずれにせよファイルに正常にデータが書かれているか確認してみて下さい。

この回答への補足

今、DATファイルをダウンロードして見てみました。一位の人のデータは9999999999999999に上書きされてて、ちゃんと書かれていました。

cgiはダウンロードしたそのままなので、これであってると思います。↓

#!/usr/local/bin/perl

#----- ランキングデータファイル
$logfile = "./hisc.dat";

#----- データの値の読み込み
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
}

@getlist = split(/&/,$buffer);
foreach(@getlist) {
($key,$value) = split(/=/,$_);
$getdata{"$key"} = $value;
}

#----- ランキングファイルの読み込み
open(IN, "$logfile");
@sortdata = <IN>;
chop(@sortdata);
close(IN);

#----- データの追加
if ($getdata{'score'} ne "") {
$data = "$getdata{'score'}\,$getdata{'playername'}";
push(@sortdata, $data);
}

#----- データのソート
@sortdata = sort{(split(/\,/,$b))[0] <=> (split(/\,/,$a))[0]} @sortdata;

#----- データをFlashへ送る
print "Content-type: text/plain\n\n";
for ($i = 0; $i < 10; $i++) {
($sc, $pname) = split(/,/,$sortdata[$i]);
print("score$i=$sc&name$i=$pname&");
}

#----- データの書き換え
if ($getdata{'score'} ne "") {
open(OUT, ">$logfile");
for ($i = 0; $i < 10; $i++) {
print OUT "$sortdata[$i]\n";
}
close(OUT);
}
exit;

はじめにサンプルファイルをアップした時には、数字をいじったので、そのデータがどこかに残っているのかもしれません。

そのいじったファイルはすべて捨てて今はデフォルトの状態でアップしなおしたのですが・・

ブラウザのキャッシュもクリアしました・・

何度サンプルファイルをサイトからダウンロードしなおしてアップロードしなおしても、一位の人のスコアだけ表示されないという悪循環がくりかえされます・・

補足日時:2005/06/29 23:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!