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

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

ただいまの
回答率

90.51%

  • JavaScript

    20415questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Perl

    495questions

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

javascriptでcgiを制御する過程で問題が起きています。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,016

javascriptでクイズを作る過程で問題が起きています。
点数を記録するcgiが動かず、デベロッパーで次の個所にエラーが出ています。ご指摘いただけないでしょうか。

function require(filename){    var obj=document.createElement("script");obj.setAttribute("type","text/javascript");obj.setAttribute("src",filename);document.getElementsByTagName("head")[0].appendChild(obj);}


エラーメッセージは下記の通りです。
quiz-generator-ranking.js:326 GET http://oshibuchiryo5.chobi.net/europe/cgi/record.cgi?a=lr&n=aiueo&sk=100&ak=100&ln=20&ld=1&rc=1&rd=1&rn=20 

#!/usr/bin/perl
#------------------------------------------------------------------------
#   Quiz Generator Script Ranking+
#   Copyright 2012 Sawa's Factory
#   http://sawa-s.com/quiz-generator-ranking.html
#------------------------------------------------------------------------
use strict;
use lib "./lib";
use Jcode;

#一覧&ランキング&設定ファイルの指定
my $listing_file="data/listing.dat";
my $ranking_file="data/ranking.dat";
my $config_file="data/config.dat";
# ------------ 設定ここまで ------------ #

my %in = &read_param;
my @rc_d=('none','month','year');
my @youbi = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;
$mon = sprintf( "%02d", $mon ); 
$mday = sprintf( "%02d", $mday ); 
$hour = sprintf( "%02d", $hour ); 
$min = sprintf( "%02d", $min ); 
$sec = sprintf( "%02d", $sec ); 
my $date="$year/$mon/$mday";
my $time= "$hour:$min:$sec";
my @d_array =(0,$mon,$year);

if ($in{a} eq "lh"){&listing_html;}
if ($in{a} eq "rh"){&ranking_html;}
if ($in{a} eq "lr"){&listing_regist;}
if ($in{a} eq "rr"){&ranking_regist;}
if ($in{a} eq "lc"){&listing_clear;}
if ($in{a} eq "rc"){&ranking_clear;}
&output_js("alert('CGIエラー:不明な処理です');\n");
exit;

sub listing_html {
    my $output_data="listing_data=[\n";
    open(LTF,"$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
    my $i=0;
    while (<LTF>) {
        my ($host,$skey,$akey,$date,$time,$name) = split(/<>/);
        if ($i > 0){$output_data .= ",";}
        $output_data .= "[$skey,$akey,'$date','$time','$name']\n";
        $i ++;
    }
    close(LTF);

    $output_data .= "];\nquiz_listing_open();\n";
    if ($i == 0){$output_data = "alert('一覧はまだ登録されていません。');\n";}
    &output_js($output_data);
    exit;
}

sub ranking_html {
    my $output_data="ranking_data=[\n";
    open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
    my $i=0;
    while (<RKF>) {
        my ($host,$skey,$date,$time,$name,$comment) = split(/<>/);
        if ($i > 0){$output_data .= ",";}
        $output_data .= "[$skey,'$date','$time','$name','$comment']\n";
        $i ++;
    }
    close(RKF);
    $output_data .= "];\nquiz_ranking_open();\n";
    if ($i == 0){$output_data = "alert('ランキングはまだ登録されていません。');\n";}
    &output_js($output_data);
    exit;
}

sub listing_clear {
    open(LTF,">$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        print LTF "";
    close(LTF);
    if ($in{a} eq "lc"){&output_js("alert('一覧ファイルをクリアしました。');\n");}
}

sub ranking_clear {
    open(RKF,">$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        print RKF "";
    close(RKF);
    open(CFF,">$config_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        print CFF "$rc_d[$in{rc}]=$d_array[$in{rc}]";
    close(CFF);
    if ($in{a} eq "rc"){&output_js("alert('ランキングファイルをクリアしました。');\n");}
}

sub listing_regist {
    #ランキングクリアチェック
    open(CFF,"$config_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
            my $config = <CFF>;
    close(CFF);
    if ($config eq ""){$config="none=0";}    
    my ($key,$val) = split(/=/,$config);

    my $r_clear=0;
    if ($key ne $rc_d[$in{rc}]){$r_clear=1;}
    else {
        if ($val ne $d_array[$in{rc}]){$r_clear=1;}
    }
    if ($r_clear == 1){&ranking_clear;}
    #listing登録処理
    Jcode::convert(\$in{n}, 'sjis');
    my $host = &get_host;
    open(LTF,"$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        my @lines=<LTF>;
    close(LTF);
    my $addline="$host<>$in{sk}<>$in{ak}<>$date<>$time<>$in{n}<>\n";
    #重複しない場合 過去に登録した同じホスト名を取り除く
    if ($in{ld} == 1){ 
        my @nline=();
        foreach (@lines){
            my ($hs,$dammy) = split(/<>/);
            if ($hs ne $host){push(@nline, $_);}
        }
        @lines=@nline;
    }
    unshift(@lines, $addline);
    while ($#lines+1 > $in{ln}) { pop(@lines); }
    open(LTF,">$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        print LTF @lines;
    close(LTF);
    #ランキングの順位判定
    open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        my @rlines=<RKF>;
    close(RKF);
    my $sw=0;
    my $i=1;
    my $rank= 0;
    if ( $#rlines < 0 ){$rank= 1;}
    else {$rank=@rlines+1;}
    if ($rank > $in{rn}){$rank=0;}

    my $oldrank= $in{rn}+1;
    if ($in{rd} == 1){
        foreach (@rlines){
            my ($dhs,$dsk,$ddam) = split(/<>/);
            if ($dhs eq $host){$oldrank=$i;}
            $i ++;
        }
    }

    $i=1;
    foreach (@rlines){
        my ($rhs,$rsk,$dam) = split(/<>/);
        if ($rsk <= $in{sk}){
            $rank= $i;
            last;
        }
        $i ++;
    }

    if ($in{rd} == 1 && $rank > $oldrank){$rank=0;}

    #JS送信
    my $output_data = "cgi_rank=$rank;\nending();\n";
    &output_js($output_data);
    exit;
}

sub ranking_regist {
    #登録処理
    Jcode::convert(\$in{n}, 'sjis');
    Jcode::convert(\$in{cm}, 'sjis');
    my $host = &get_host;
    open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        my @lines=<RKF>;
    close(RKF);
    my $addline="$host<>$in{sk}<>$date<>$time<>$in{n}<>$in{cm}<>\n";
    my $sw=0;
    my $result=0;
    my @nline=();
    foreach (@lines){
        my ($rhs,$sk,$dammy) = split(/<>/);
        if ($sk <= $in{sk} && $sw == 0){
            push(@nline, $addline);
            $sw = 1;
            $result=1;
        }
        if ($in{rd} == 1 && $rhs eq $host){
            $result=2;
        }
        else {
            push(@nline, $_);
        }
    }
    if ($sw == 0 && $result == 0){
        push(@nline, $addline);
        $result=1;
    }
    while ($#nline+1 > $in{rn}) { pop(@nline); }
    open(RKF,">$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n");
        print RKF @nline;
    close(RKF);
    #JS送信
    my $output_data = "result=$result;\nranking_regist_result();\n";
    &output_js($output_data);
    exit;
}

sub get_host{
    # ホスト名を取得
    my $host = $ENV{'REMOTE_HOST'};
    my $addr = $ENV{'REMOTE_ADDR'};
    # ホスト名が取得できない場合、IPからホスト名を取得する
    if ($host eq "" || $host eq $addr) {
        $host = gethostbyaddr(pack("C4",split(/\./,$addr)),2) || $addr;
    }
    return $host;
}

sub read_param {
    my ($buf,%in);
    $buf = $ENV{QUERY_STRING};
    foreach ( split(/&/, $buf) ) {
        my ($key,$val) = split(/=/);
        $key =~ tr/+/ /;
        $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
        $val =~ tr/+/ /;
        $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
        $key =~ s/[<>"'&\r\n]//g;
        $val =~ s/&/&amp;/g;
        $val =~ s/</&lt;/g;
        $val =~ s/>/&gt;/g;
        $val =~ s/"/&quot;/g;
        $val =~ s/'/&#39;/g;
        $val =~ s/\r\n/<br>/g;
        $val =~ s/\n/<br>/g;
        $val =~ s/\r/<br>/g;
        $in{$key} .= "\0" if (defined($in{$key}));
        $in{$key} .= $val;
    }
    return %in;
}

sub output_js{
    #    ヘッダ
    print "Content-Type: text/javascript\n\n";
    #    送信
    print "$_[0]";
    exit;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina_dev

    2016/07/31 20:18

    デベロッパーコンソールにでたエラーメッセージや同一動作が起きるミニマムなHTML(問題ないなら全部でも可能)をはりつけてください

    キャンセル

  • kei344

    2016/07/31 21:19

    そもそもrecord.cgiは動いていますか?

    キャンセル

  • asahina_dev

    2016/07/31 21:20 編集

    とりあえず JS に問題がないです。(head タグがないと推察していた)
    でエラーログにあったURLを叩くと HTTP 500 が返ってきているので

    なので差し支えなければ [ record.cgi ] を張り付けてみたらいかがでしょうか
    PERL 実行時エラーです。

    キャンセル

回答 1

checkベストアンサー

0

CGIの設置方法を再確認してみてください。

【CGIセッティングの7ヶ条 - futomi's CGI Cafe】
http://futomi.com/lecture/setting/index.html

【「500 Internal Server Error」の原因と解決方法 - CMS「すぐ使えるCGI」】
http://sugutsukaeru.jp/support/3/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/01 19:07

    パーミッションの設定を変えたら動きました。ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • JavaScript

    20415questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Perl

    495questions

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