カレッヂ |
質問者 駆け出しPG
投稿日 1/3(水) 00:06:32
APACHEをPCにセットアップして、ローカルでCGIの動作テックをしているのですが、 登録系はうまくいくのですが、検索ではInternal Server Errorになります。 なお、サンプルプログラムでは正常に動作します。 ファイルのパス・タイトル名などの、CGIの前半部分は正しいはずなのですが。 変数名は追加・変更しているのですが、Internal Server Error とは関係ありますでしょうか? 原因が解らずに、悩んでいます。どうか、よろしくお願いします 返信(回答)する |
回答者 まさ
[削除]
投稿日 1/3(水) 06:36:13
Internal Server Errorはプログラムが途中で異常終了したり、ヘッダーが 出力されなかったりで出ます。 このエラーを見つける一番簡単な方法は、コマンドラインから「perl -wc foo.cgi」 を実行することです。 これでほとんどの場合、エラーはなくなります。 |
質問者 駆け出しFP
[削除]
投稿日 1/3(水) 12:07:39
ご回答いただき、どうもありがとうございます。 >Internal Server Errorはプログラムが途中で異常終了したり、ヘッダーが >出力されなかったりで出ます。 >このエラーを見つける一番簡単な方法は、コマンドラインから「perl -wc foo.cgi」 >を実行することです。 >これでほとんどの場合、エラーはなくなります。 ActivePerl522で構文チェックすると、下記のエラーがでます。 ’Unrecognized character \272 at01 search.cgi line7’ のメッセージがでますが解読できなく困っています。 ご回答の’コマンドラインから「perl -wc foo.cgi」の実行’は上記の構文チェックとは 違う方法なのでしょうか? コマンドラインとは、DOSプロンプトから実行できるのでしょうか? 素人の質問で恐縮ですがご回答よろしお願いします。 |
回答者 しあわせのツボ
[削除]
投稿日 1/3(水) 14:41:42
エラーメッセージの意味は 「7行目に\272という意味不明の文字がある」ですね。 どこかに全角文字が紛れ込んでいませんか? |
質問者 駆け出しPG
[削除]
投稿日 1/3(水) 17:20:12
幸せのツボさんご回答どうもありがとうございます。 上記のエラーメッセージはサンプルで本当は下記なのですが、 ’Unrecognized character \201 at01 search.cgi line134’ もしよろしければ、この134行目のCGIソースを下記しますので、診ていただけないでしょうか? print "<th nowrap>商品格付け</th>\n"; 上記が134行目なのですが、上にも同じような部分があり、そちらはエラーが出ていません。 ちなみに、下記なのですが、 print "<th nowrap>登録日</th>\n"; print "<th nowrap>保険会社</th>\n"; print "<th nowrap>会社格付け</th>\n"; print "<th nowrap>会社格付けの理由</th>\n"; print "<th nowrap>その他の理由</th>\n"; print "<th nowrap>保険種類</th>\n"; print "<th nowrap>その他の種類</th>\n"; print "<th nowrap>保険商品名</th>\n"; この134行目の意味は、秀丸エディタの134行目と理解しているのですが、そのような理解でよろしいのでしょうか? 本当は別の意味でエラーの部分は違うところのような気がするのですが・・・ |
回答者 まさ
[削除]
投稿日 1/3(水) 18:15:57
わたしはそのエラーの意味はわかりませんが、エラー行数は正確にその位置にエラーが あるという意味ではありません。だいたいはその行か、あるいは2,3行上にエラーがあ ります。 また、エラー行数はコメントも空白も含んでいます。 もういちどスクリプトを見直して見て下さい。 #ゴミレスですみません。 |
質問者 駆け出しPG
[削除]
投稿日 1/3(水) 20:11:57
まささんどうもありがとうございます この201の数字の意味はエラーコードなのでしょうか? 上記のサンプルの場合、しあわせツボさんいわく、272は’意味不明の文字がある’という エラーコードみたいなのですが、201はどうなるのでしょう? どなたか、ご存知の方がいらっしゃたら教えてください |
質問者 駆け出しPG
[削除]
投稿日 1/4(木) 14:25:47
上記のスクリプトから133行目のprint "<th nowrap>保険商品名</th>\n"; から削除すると、構文チェックのエラーがなくなったのですが、この場合、検索結果の項目が3つ 削除されます。エラーがない状態での検索結果項目は7つなのですが、検索結果項目には制限 数又はどこかで定義されているのでしょうか? どなたか教えていただけないでしょうか? |
回答者 まさ
[削除]
投稿日 1/4(木) 15:52:24
7つぐらいで制限にひっかかることはまずないですね。 制限は確かにあります。しかしそれは途方もない大きな数です。7つとかそんな程度では ないです。 これは間違いなく別の問題です。 |
質問者 駆け出しPG
[削除]
投稿日 1/5(金) 22:55:41
まささん ご回答どうもありがとうございます どうしても原因がわからず、項目を削って6つにすることにいたしました。 しかし、また問題が発生して、データファイル(CSV)にあるデータと一致する検索条件 で検索しても、”ご指定の条件で見当たりませんでした”というメッセージが返ってきます。 もし、お時間があれば、その検索部分のCGIを下記いたしますので診てもらえないでしょうか?ちなみに、サンプルスクリプトはDB項目以外はいじっておりません。 #■検索処理 if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); } @BASE = <IN>; close(IN); if ($FORM{'FF'} eq '') { $FF = 0; } else { $FF = $FORM{'FF'}; } $TO = $FF + $page - 1; if ($TO > $#BASE) { $TO = $#BASE; } $hit = 0; $next_num = ''; foreach $num ($FF .. $#BASE) { $data = $data2 = $BASE[$num]; &jcode'convert(*data,'euc'); ($d,$DATE,$s1,$s2,$t1,$s3,$s4,$t2) = split(/\,/,$data); # 保険会社(一致) if ($FORM{'s1'} ne 'all') { if ($s1 eq $FORM{'s1'}) { ; } else { next; } } # 保険会社の格付け(一致) if ($FORM{'s2'} ne 'all') { if ($s2 eq $FORM{'s2'}) { ; } else { next; } } # 保険種類(一致) if ($FORM{'s3'} ne 'all') { if ($s3 eq $FORM{'s3'}) { ; } else { next; } } # 保険商品の格付け(一致) if ($FORM{'s4'} ne 'all') { if ($s4 eq $FORM{'s4'}) { ; } else { next; } } # 検索終了処理 if ($hit == $page) { $next_num = $num; last; } else { push(@NEW,$data2); $hit++; } } #■検索結果 print "Content-type: text/html\n\n"; print <<"EOF"; <html><head><title>$title</title></head> <!-- MiniDatabase v2.1 (c) www.rescue.ne.jp --> $body <h2>《検索結果》</h2> EOF if (!@NEW) { print "●ご指定の条件では見当たりませんでした.<p>\n"; } else { print "<table border=2 cellpadding=1 cellspacing=1><tr>\n"; print "<th nowrap>登録日</th>\n"; print "<th nowrap>保険会社</th>\n"; print "<th nowrap>会社格付け</th>\n"; print "<th nowrap>会社格付けの理由</th>\n"; print "<th nowrap>保険種類</th>\n"; print "<th nowrap>商品格付け</th>\n"; print "<th nowrap>商品格付けの理由</th>\n"; print "</tr>\n"; foreach $data (@NEW) { ($d,$DATE,$s1,$s2,$t1,$s3,$s4,$t2) = split(/\,/,$data); print "<tr>\n"; print "<td nowrap>$DATE</td>\n"; print "<td nowrap><center>$s1</center></td>\n"; print "<td nowrap><center>$s2</center></td>\n"; print "<td nowrap><center>$t1</center></td>\n"; print "<td nowrap><center>$s3</center></td>\n"; print "<td nowrap><center>$s4</center></td>\n"; print "<td nowrap><center>$t2</center></td>\n"; print "</tr>\n"; |
回答者 まさ
[削除]
投稿日 1/6(土) 09:30:55
&jcode'convert(*data,'euc'); これを &jcode'convert(*data,'sjis'); にすればどうなりますか? |
質問者 駆け出しPG
[削除]
投稿日 1/6(土) 11:42:33
まささん、何回もご回答いただき、どうもありがとうござます。 まささんのご回答の通り、まず検索処理の部分のコード変換を”sjis”に変更して、 実行させたのですが、残念ながら、結果が変わりませんでした。 それで、入力処理の部分のコード変換も”sjis”に変更して、実行させたのですが、 残念ながら、結果が変わりませんでした。 そこで、登録(rejist.cgi)スクリプトをみたところ、 ”&jcode'convert(*value,'sjis');”このように記述されているのですが、こちらは変更する必要があるのでしょうか? |
返信(回答)する
Web裏技 |