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

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

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

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

JavaScript

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

Q&A

解決済

1回答

2593閲覧

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

oshibuchiryo5

総合スコア11

Perl

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

JavaScript

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

0グッド

0クリップ

投稿2016/07/31 10:46

編集2016/07/31 12:34

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

javascript

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

エラーメッセージは下記の通りです。
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

perl

1#!/usr/bin/perl 2#------------------------------------------------------------------------ 3# Quiz Generator Script Ranking+ 4# Copyright 2012 Sawa's Factory 5# http://sawa-s.com/quiz-generator-ranking.html 6#------------------------------------------------------------------------ 7use strict; 8use lib "./lib"; 9use Jcode; 10 11#一覧&ランキング&設定ファイルの指定 12my $listing_file="data/listing.dat"; 13my $ranking_file="data/ranking.dat"; 14my $config_file="data/config.dat"; 15# ------------ 設定ここまで ------------ # 16 17my %in = &read_param; 18my @rc_d=('none','month','year'); 19my @youbi = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); 20my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); 21$year += 1900; 22$mon += 1; 23$mon = sprintf( "%02d", $mon ); 24$mday = sprintf( "%02d", $mday ); 25$hour = sprintf( "%02d", $hour ); 26$min = sprintf( "%02d", $min ); 27$sec = sprintf( "%02d", $sec ); 28my $date="$year/$mon/$mday"; 29my $time= "$hour:$min:$sec"; 30my @d_array =(0,$mon,$year); 31 32if ($in{a} eq "lh"){&listing_html;} 33if ($in{a} eq "rh"){&ranking_html;} 34if ($in{a} eq "lr"){&listing_regist;} 35if ($in{a} eq "rr"){&ranking_regist;} 36if ($in{a} eq "lc"){&listing_clear;} 37if ($in{a} eq "rc"){&ranking_clear;} 38&output_js("alert('CGIエラー:不明な処理です');\n"); 39exit; 40 41sub listing_html { 42 my $output_data="listing_data=[\n"; 43 open(LTF,"$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 44 my $i=0; 45 while (<LTF>) { 46 my ($host,$skey,$akey,$date,$time,$name) = split(/<>/); 47 if ($i > 0){$output_data .= ",";} 48 $output_data .= "[$skey,$akey,'$date','$time','$name']\n"; 49 $i ++; 50 } 51 close(LTF); 52 53 $output_data .= "];\nquiz_listing_open();\n"; 54 if ($i == 0){$output_data = "alert('一覧はまだ登録されていません。');\n";} 55 &output_js($output_data); 56 exit; 57} 58 59sub ranking_html { 60 my $output_data="ranking_data=[\n"; 61 open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 62 my $i=0; 63 while (<RKF>) { 64 my ($host,$skey,$date,$time,$name,$comment) = split(/<>/); 65 if ($i > 0){$output_data .= ",";} 66 $output_data .= "[$skey,'$date','$time','$name','$comment']\n"; 67 $i ++; 68 } 69 close(RKF); 70 $output_data .= "];\nquiz_ranking_open();\n"; 71 if ($i == 0){$output_data = "alert('ランキングはまだ登録されていません。');\n";} 72 &output_js($output_data); 73 exit; 74} 75 76sub listing_clear { 77 open(LTF,">$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 78 print LTF ""; 79 close(LTF); 80 if ($in{a} eq "lc"){&output_js("alert('一覧ファイルをクリアしました。');\n");} 81} 82 83sub ranking_clear { 84 open(RKF,">$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 85 print RKF ""; 86 close(RKF); 87 open(CFF,">$config_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 88 print CFF "$rc_d[$in{rc}]=$d_array[$in{rc}]"; 89 close(CFF); 90 if ($in{a} eq "rc"){&output_js("alert('ランキングファイルをクリアしました。');\n");} 91} 92 93sub listing_regist { 94 #ランキングクリアチェック 95 open(CFF,"$config_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 96 my $config = <CFF>; 97 close(CFF); 98 if ($config eq ""){$config="none=0";} 99 my ($key,$val) = split(/=/,$config); 100 101 my $r_clear=0; 102 if ($key ne $rc_d[$in{rc}]){$r_clear=1;} 103 else { 104 if ($val ne $d_array[$in{rc}]){$r_clear=1;} 105 } 106 if ($r_clear == 1){&ranking_clear;} 107 #listing登録処理 108 Jcode::convert(\$in{n}, 'sjis'); 109 my $host = &get_host; 110 open(LTF,"$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 111 my @lines=<LTF>; 112 close(LTF); 113 my $addline="$host<>$in{sk}<>$in{ak}<>$date<>$time<>$in{n}<>\n"; 114 #重複しない場合 過去に登録した同じホスト名を取り除く 115 if ($in{ld} == 1){ 116 my @nline=(); 117 foreach (@lines){ 118 my ($hs,$dammy) = split(/<>/); 119 if ($hs ne $host){push(@nline, $_);} 120 } 121 @lines=@nline; 122 } 123 unshift(@lines, $addline); 124 while ($#lines+1 > $in{ln}) { pop(@lines); } 125 open(LTF,">$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 126 print LTF @lines; 127 close(LTF); 128 #ランキングの順位判定 129 open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 130 my @rlines=<RKF>; 131 close(RKF); 132 my $sw=0; 133 my $i=1; 134 my $rank= 0; 135 if ( $#rlines < 0 ){$rank= 1;} 136 else {$rank=@rlines+1;} 137 if ($rank > $in{rn}){$rank=0;} 138 139 my $oldrank= $in{rn}+1; 140 if ($in{rd} == 1){ 141 foreach (@rlines){ 142 my ($dhs,$dsk,$ddam) = split(/<>/); 143 if ($dhs eq $host){$oldrank=$i;} 144 $i ++; 145 } 146 } 147 148 $i=1; 149 foreach (@rlines){ 150 my ($rhs,$rsk,$dam) = split(/<>/); 151 if ($rsk <= $in{sk}){ 152 $rank= $i; 153 last; 154 } 155 $i ++; 156 } 157 158 if ($in{rd} == 1 && $rank > $oldrank){$rank=0;} 159 160 #JS送信 161 my $output_data = "cgi_rank=$rank;\nending();\n"; 162 &output_js($output_data); 163 exit; 164} 165 166sub ranking_regist { 167 #登録処理 168 Jcode::convert(\$in{n}, 'sjis'); 169 Jcode::convert(\$in{cm}, 'sjis'); 170 my $host = &get_host; 171 open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 172 my @lines=<RKF>; 173 close(RKF); 174 my $addline="$host<>$in{sk}<>$date<>$time<>$in{n}<>$in{cm}<>\n"; 175 my $sw=0; 176 my $result=0; 177 my @nline=(); 178 foreach (@lines){ 179 my ($rhs,$sk,$dammy) = split(/<>/); 180 if ($sk <= $in{sk} && $sw == 0){ 181 push(@nline, $addline); 182 $sw = 1; 183 $result=1; 184 } 185 if ($in{rd} == 1 && $rhs eq $host){ 186 $result=2; 187 } 188 else { 189 push(@nline, $_); 190 } 191 } 192 if ($sw == 0 && $result == 0){ 193 push(@nline, $addline); 194 $result=1; 195 } 196 while ($#nline+1 > $in{rn}) { pop(@nline); } 197 open(RKF,">$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); 198 print RKF @nline; 199 close(RKF); 200 #JS送信 201 my $output_data = "result=$result;\nranking_regist_result();\n"; 202 &output_js($output_data); 203 exit; 204} 205 206sub get_host{ 207 # ホスト名を取得 208 my $host = $ENV{'REMOTE_HOST'}; 209 my $addr = $ENV{'REMOTE_ADDR'}; 210 # ホスト名が取得できない場合、IPからホスト名を取得する 211 if ($host eq "" || $host eq $addr) { 212 $host = gethostbyaddr(pack("C4",split(/\./,$addr)),2) || $addr; 213 } 214 return $host; 215} 216 217sub read_param { 218 my ($buf,%in); 219 $buf = $ENV{QUERY_STRING}; 220 foreach ( split(/&/, $buf) ) { 221 my ($key,$val) = split(/=/); 222 $key =~ tr/+/ /; 223 $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; 224 $val =~ tr/+/ /; 225 $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; 226 $key =~ s/[<>"'&\r\n]//g; 227 $val =~ s/&/&amp;/g; 228 $val =~ s/</&lt;/g; 229 $val =~ s/>/&gt;/g; 230 $val =~ s/"/&quot;/g; 231 $val =~ s/'/&#39;/g; 232 $val =~ s/\r\n/<br>/g; 233 $val =~ s/\n/<br>/g; 234 $val =~ s/\r/<br>/g; 235 $in{$key} .= "\0" if (defined($in{$key})); 236 $in{$key} .= $val; 237 } 238 return %in; 239} 240 241sub output_js{ 242 # ヘッダ 243 print "Content-Type: text/javascript\n\n"; 244 # 送信 245 print "$_[0]"; 246 exit; 247} 248

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

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

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

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

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

asahina_dev

2016/07/31 11:18

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

2016/07/31 12:19

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

2016/07/31 12:22 編集

とりあえず JS に問題がないです。(head タグがないと推察していた) でエラーログにあったURLを叩くと HTTP 500 が返ってきているので なので差し支えなければ [ record.cgi ] を張り付けてみたらいかがでしょうか PERL 実行時エラーです。
guest

回答1

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/07/31 13:05

kei344

総合スコア69398

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

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

oshibuchiryo5

2016/08/01 10:07

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問