• 締切済み

Perlのファイル名を変更して、複数のアンケートを取りたい

現在、アンケート収集のために使用しているPerlファイルがあるのですが、別のアンケートも同時に取得するため、単純にPerlファイル名とHTMLのform actionのPerlファイル名を変更して試したところ、サーバエラーが出てしまいました。 このform actionをもとのファイル名にもどすと正常に動作します。 なお、アンケート取得時には cgi-lib も使用しています。 初心者のため、どこを直せばよいのか分かりません。 アドバイスをよろしくお願いいたします。

みんなの回答

  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

>正直、サーバのエラーログの見方も分からない初心者なので、少し時間がかかりそうです。 逆に言えば、エラーログの見方さえ分かってしまえば脱初心者はすぐそこだと言うことです。 レンタルサーバだと見れないかもしれませんが、 /usr/apache2/log/error_log /usr/httpd/log/error_log など探すと良いでしょう。 見れない場合はローカル環境でCGIが動く環境を作ってみるのも良いでしょう。

rinego
質問者

お礼

度々のお返事ありがとうございます。 エラーログの生データは取得できるのですが、生成がうまくできない状況です。せっかくアドバイスいただいているのに、お恥ずかしい限りです…。 ローカルでのCGI環境は、ぜひ作成してみたいと思います。 分からないことが出てきましたら、またこちらで質問させていただきます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

どのような形式なのか全く分かりませんが、 CGIファイル名を変えたら、CGI内で元ファイル名を検索して新しいファイル名に置換すれば動くと思います。

rinego
質問者

お礼

アドバイスありがとうございます。 さっそく試してみましたが、CGI内に元ファイル名がみつかりませんでした。 外部ファイル?で制御しているとか、元ファイル名をどこかで別の文字?に置き換えているのかもしれませんね。 もう少し勉強してみます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

具体的なソースも無くエラー内容すらない状態では誰も適切なアドバイスは出来ないでしょう。 あなたの場合はまず「何故動かないのか」を追求する方法から学習すると良いです。 まずは「サーバの」「エラーログ」を見ましょう。 話はそれからです。

rinego
質問者

お礼

せっかくのお返事に、ずれた補足をしてしまい申し訳ありません。 見なくてはいけないのはエラーの内容ではなく、「サーバのエラーログ」だったんですね。 正直、サーバのエラーログの見方も分からない初心者なので、少し時間がかかりそうです。 Perlの修正は、htmlの修正と違ってむずかしいですね。 アドバイスどうもありがとうございました。

rinego
質問者

補足

お返事どうもありがとうございます。 エラーは「500 Internal Server Error」です。 先にも書いたのですが、変更しているのはPerlのファイル名のみで、Parlの内容は変更していません。 ファイルの設置場所も、まったく同じです。 htmlの「form action」のファイル名をもとに戻すと、正常に動作します。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • Perlがサーバー上でうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。

    • ベストアンサー
    • Perl
  • (Perl)ReadParseによるハッシュへの格納について

    PerlのReadPerseについて質問させてください。 以下少々長いですが、過程を書きます。 <form>タグにより、入力フォームのページをHTMLで作成したとします(form.html)。 その際、<form method="post" action="form.cgi"> と入力しておいて、別途form.cgiを作成するとします。 form.htmlには、<form>タグ内のname属性で、それぞれ'weight' 'height' 'age'という三種類のデータを入力してもらって、取得するようにしています。 そして<input type="submit" value="登録">による、 登録ボタンを押すことで、 form.cgiに処理をさせるようにしています。 form.cgiの中身ですが、まず、最初の三行を書きます。 #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); となるのですが、わからないのが、 三行目の &ReadParse(*form); です。 サブルーチンReadParseを引数*formで、 cgi-lib.plから呼び出しているということはわかるのですが、いきなり*formという形で、ハッシュを登場させているあたりがわかりません。(この際、ハッシュ名の前の%を*に変えなければならないことは、一応知っております。理由はわかりませんが。) そこで質問なのですが、 いきなり、ハッシュであるformを登場させていいものなのでしょうか?? 以下、form.cgiの内容です。 #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); $name=$form{'weight'}; $sex=$form{'height'}; $megane=$form{'age'}; print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "体重:${weight}<br>\n"; print "身長:${height}<br>\n"; print "年齢:${age}<br>\n"; print "</body>"; print "</html>"; _END_

    • ベストアンサー
    • CGI
  • フォームでCGIにとばした処理結果を。。

    はじめまして。 JavaScriptもHTMLもCGIもほとんど初心者です。 現在フリーのCGI(Perl:アンケートフォーム)を使用しようとしてるのですが、HTMLファイルのformにあるactionで CGIにとばして、その結果を(JavaScriptで開いた?)新しいウィンドウに表示したいのですが、可能でしょうか? さらに、出来ればその結果が表示される新しいウィンドウにはメニューバーやスクロールバーをなくして、「閉じる」というボタンをつけて閉じるようにしたいのですが、それも可能でしょうか? 何卒よろしくお願いします。 =====

  • Perlのファイルのアップロードの方法についてお聞きします。

    Perlのファイルのアップロードの方法についてお聞きします。 &ReadParseを用いた方法で、 $file = $in{'TENSOU'};で$file自体にデータが入るので 簡単だなと思っていましたが、送信元と送信後のファイルが若干違っていました。 使い方が間違っているのでしょうか? 以下、サンプル ◆HTML側 <FORM ACTION="up.cgi" ENCTYPE="multipart/form-data" METHOD="POST"><P> ファイル: <INPUT TYPE="file" NAME="TENSOU" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> ◆Perl側 &ReadParseの例を用いた方法 #!/perl/bin/perl #!/usr/local/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser); #--->エラー対策 require 'cgi-lib.pl'; require 'jcode.pl'; $BUFSIZE = 2048; &ReadParse; # ==> 強力な変換 $file = $in{'TENSOU'}; # ==> 実態自体がデータなので、取り扱いしやすい $file_size = length($file); $file_size *= ($BUFSIZE / 1024); open(OUT, "> test.jpg"); print(OUT $file); close(OUT); print "Content-type: text/html\n\n"; print "$file_size(KB)<br>\n"; print "<a href=\"test.jpg\">テスト</a>\n"; exit;

    • ベストアンサー
    • CGI
  • ファイル名でなく、ファイルの中身を保存したい

    テキストと画像を回答するHTMLで書かれたアンケートがあります。回答は、 <form name="a" method="post" action="cgitest.cgi" enctype="multipart/form-data"> つまり、POSTメソッド、multipart/form-dataモードで cgitest.cgi に回答を送ります。 perlで作成したCGIでテキストは正しく受信できましたが、画像がファイルの中身ではなくファイル名になってしまいます。画像ファイルを受信する方法を教えてください。 なお、CGIには、画像ファイルのバイナリデータも送信されていることは、別途C言語で記載した確認プログラムで確認済みです。 ----HTML---- <!DOCTYPE html> <html lang="ja-JP"> <head> <meta charset=Shift_JIS> </head> <body> <form name="a" method="post" action="cgitest.cgi" enctype="multipart/form-data"> 氏名 : <input type="text" name="ans1"> 困ったときの写真:<input type=file name="ansfig1" onChange="this.form.disp.src=window.URL.createObjectURL(this.files[0])"> <br><img name=disp> <input type="submit" value=" 送信 "> <input type="reset" value=" 取消 "> </form> </body> </html> ----CGI----- #!"D:\lib\xampp\perl\bin\perl.exe" use CGI; my $q = new CGI; #フォームからのデータ読み込み my $ans1 = $q->param('ans1'); my $fig1 = $q->param('ansfig1'); $ans1file = 'ans1.txt'; open(OUT, ">$ans1file") or die "$!"; print OUT $ans1; $ans2file = 'ans2.jpg'; open(OUT, ">$ans2file") or die "$!"; print OUT $fig1; ---- 参考 CGIに渡されるデータ確認用 --------- #include <stdio.h> #include <fcntl.h> #include <io.h> int main(void) { int c; FILE *fp; fp = fopen("temp.dat","wb"); setmode(fileno(stdin), O_BINARY); while((c=fgetc(stdin)) != EOF ) { fputc(c,fp); } fclose(fp); return 0; }

    • ベストアンサー
    • CGI
  • [Perl] CGI_Lite.pmでファイル名取得できない

    CGI_Lite.pmを使用してファイルをアップロードするCGIを書いていますが、ファイル名によっては、名前の途中までが消えてしまいます。 cgiとhtmlは、以下のとおりです。EUC、Shif-JISの両方で、また、LinuxとWindowsXPの両方で試してみました。 例 「可能性.txt」というファイルをアップすると、 「性.txt」というファイル名になります。 環境: CGI_Lite.pmは、2つのバージョンを試してみました。 (1), CGI_Lite 2.02 http://search.cpan.org/~smylers/CGI-Lite-2.02/Lite.pm (2), CGI_Lite 1.8 http://search.cpan.org/dist/CGI_Lite/ OSなど (1), WindowsXP + AnHTTPd + Perl5.8.8 (2), SuSE Linux + Apache2.0 + Perl5.8.3 ■アップするHTML <html> <form action='test.cgi' ENCTYPE='multipart/form-data' method='post'> <input type="file" name="file1"> <input type="submit"> </form> </html> ■アップされるCGI(test.cgi) #!/usr/bin/perl use CGI::Lite; my $cgi=new CGI::Lite; $cgi->add_timestamp(0); $cgi->set_directory('./') or die $!; $cgi->set_platform ('Unix'); $cgi->set_buffer_size (10000); my %in = $cgi->parse_form_data(); print"Content-type: text/html\n\n"; print"-->$in{'file1'}\n"; 以上、よろしくお願いします。

    • 締切済み
    • CGI
  • CGIによるアンケートフォームのメール送信

    私は今までHTMLでアンケートフォームを作成していました。しかし、HTMLで次のコードを組み込むとメール送信時に警告が出てしまいました。 <form action="mailto:○○○@△△△.co.jp"> そこで、いろいろなアンケートフォームのソースを見てみるとCGIが使われているようでした。 CGIはまったくの初心者です。 CGIでのアンケートフォームの作り方を教えてください。

    • ベストアンサー
    • CGI
  • アンケートCGI作成について、form actionの呼びだし等につい

    アンケートCGI作成について、form actionの呼びだし等について質問です。 初めまして、CGIアンケートを作成しようとしているPerl初心者です。 説明ページ(ex01.html) ↓ フォーム付きアンケートページ(enk01.html) ↓ 説明ページ(ex02.html) ↓ 以下略 という流れでアンケートを続かせたいのですが (だいたい、ex.htmlとenk.htmlが各20ずつくらいです。) フォーム付きアンケートのフォーム <form action="form.cgi" method="post"> <input type="radio" name="Emotion_Body" value="0" checked> 選択肢1 <input type="radio" name="Emotion_Body" value="1"> 選択肢2 <input type="radio" name="Emotion_Body" value="2"> 選択肢3 <input type="submit" value="次のアンケート"> となっていて、actionに次のページのhtmlをいれ込むことができませんでした。 (form.cgi:formから受け取ったデータを外部ファイルへ書きだすCGIファイルです。) フォームの「次のアンケートボタン」を押すと、 form.cgiにフォームのデータを送りつつ、ex02.htmlを表示させるということはできないものでしょうか? 過去ログによるCGIに表示させる方法を書くのだと、 フォームページの間に、ただのhtmlファイルを挟むので、 (例:enk01.html→ex02.html→enk02.html→…) 各ページに対応したCGIファイルを書かなければならないということなのでしょうか? よろしくお願いいたいします。

    • ベストアンサー
    • Perl
  • ファイルの転送。

    <Form>内、<Input type="file">タグにてファイルを転送し。それをPerlで受け取って、保存しようと思っています。保存する主なファイルは画像ファイルです。 前に立てたレスにて、cgi-lib.plを使用すると楽との指摘を受けました。 こちらでいろいろ調べてみましたが、ファイル転送を日本語で解説しているページが見つかりません。 参考にしたページはこちらです。 http://www.futomi.com/lecture/form/cgilib.html これだと<Input type="text">などの内容の取得方法はわかりますが。<Input type="file">の内容の取得方法がわからないのです。 残念なことなのですが、cgi-lib.plのソースコードに記載されている解説を見ても、私がまったく英語が読めない故に使用方法は分かりませんでした。 そこで、chi-lib.plでのファイルの内容を保存するまでの解説つきサンプルコード・cgi-lib.plでのファイルの転送を解説している日本語のページどちらかを教えていただきたく思います。 また、cgi-lib.plと比較し、CGI.pmも同等の機能を保有しているように見て取れるのですが、やはりperlの推奨している通り.plより.pmを使用したほうがよいのでしょうか? 分かる方がいらっしゃいましたら、この辺りのことについても教えていただきたく思います。 なにぶん、ファイル転送は初の試みゆえにいろいろと覚えることが多く大変です。分かりやすい解説をお願いします。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • ブラザー製の3780cdwというカラーレーザー複合機には「七年高耐久」という言葉がありますが、これはどういう意味なのでしょうか?
  • この言葉は耐久性に自信があるメーカーのメッセージを表しているのか、それとも保証期間とは関係なく単に載せているだけなのでしょうか?
  • カラーレーザー複合機を購入しようと思っているので、この「七年高耐久」について詳しく知りたいです。ご存知の方、教えてください。
回答を見る

専門家に質問してみよう