• ベストアンサー
  • すぐに回答を!

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の場所も正確です。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数96
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2

 以下補足要求 1.エラーが出るのならステータスコードを教えてください 2. FTP転送時にasciiモード(FTPソフトによってはtextモードとも言う)で送りましたか? 3. パーミッションは取り合えず最も普遍的な 755にしてみてください 4.  2.3.を確認しても駄目なら スクリプトの末尾に BEGIN{use CGI::Carp qw(fatalsToBrowser);} と追加してみてください 表示されたメッセージがあれば 補足に貼り付けてください ##以下、上の説明 1. ステータスコードとは サーバーから返される 404、500などの数字ですが http://www.studyinghttp.net/status_code <=ここが詳しい ブラウザのタイトル欄に表示されなければ  MSIEの場合なら ツール>インターネットオプション>詳細設定>  「HTTPエラーメッセージを簡易表示する 」<=これのチェックを外してからMSIEを再起動し 問題のCGIにアクセスし直してください 2. windows、MAC、UNIXの改行コード(Content-type: text/html\n\n の\n がそれです)  はそれぞれ違います。  上の書き方ではwindowsは \r\n macは\rだけ unixは\nだけ  asciiモードで転送しないと そのまま送られてしまいますので例えばwindowsからだと 正しいperlのパスであっても #! /usr/bin/perl\r\n となり unixは/usr/bin/perlではなく /usr/bin/perl\r を探しに言ってしまい、当然見つかりませんのでエラーに成ります。 3. サーバーによっては .cgiのパーミッションが700でも動いたり   777でも動いちゃったりします(<=これはすごく危険ですが)   あるいはごく稀にグループ権限で動く場合もあるらしいです  それらの場合でも最大公約数的に755なら動きます 4. これは perlのエラーメッセージを画面に表示するルーチンです   デバッグが終了したら消去しても構いません。 http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Carp.pod

共感・感謝の気持ちを伝えよう!

関連する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
  • CGIでフォームからの入力内容を表示されない。

    初歩的な質問ですみません。 自宅サーバを使っています。 ■ActivePerl 5.8.8 Build 822 ■httpd142p ------------------------------ ■httpd142p ┗■cgi-bin  ┣■cgi-lib.pl  ┣■test.cgi  ┗■test.html ------------------------------- CGIは動作します。 一行目のパスもあっています。 --------------------------- 【test.cgi】 #!C:/perl/bin/perl #require './cgi-lib.pl'; #&ReadParse(*MYDATA) print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<TITLE>RESULT</TITLE>\n"; print "<BODY>\n"; print "氏名 = $MYDATA{'simei'}\n\n"; print "住所 = $MYDATA{'jyusyo'}\n"; print "</BODY>\n"; print "</HTML>\n"; exit; -------------------------------- 【test.html】 <HTML> <HEAD> <TITLE>TEST</TITLE> </HEAD> <BODY> <P> <FORM ACTION="test.cgi" METHOD="POST"> 氏名:<INPUT TYPE="text" NAME="simei"> 住所:<INPUT TYPE="text" NAME="jyusyo"> <INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="リセット"> </P> </FORM> </BODY> </HTML> ---------------------------------- ■実行結果 氏名 = 住所 = ---------------------------------- どなたかご教授ください。

    • ベストアンサー
    • CGI
  • perlがうごきません

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • Perl

その他の回答 (1)

  • 回答No.1

リスト見た限りでは何が悪いのか発見できなかったので、コピペして手元のテスト用サーバで実験してみましたが、やはり正常稼動しました。 ・CGIは許可されているのか ・ファイル名は間違えていないのか ・パーミッションは正確に設定されているか ・確認時のURLは正確か ・動かないとはどういう症状か 状況を正確にお願いいたします。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • Perl CGI -入力フォーム-

    Perlを始めたばかりの初心者です。 Perlの中にフォームを入れたいのですが、エラーが出てしまいます。 現在は、ローカルで作動させています。 #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type="text" name="name"></p>\n"; print "</body>\n"; print "</html>"; 【print "<p><input type="text" name="name"></p>\n";】この記述がエラーの対象行となっています。 inputを使用する場合は他にも記述が必要なのでしょうか? 宜しくお願いします。

  • html →perlへフォームを渡そうとしてますが

    独学でmacでパールを勉強しています。 始めてからまだ1週間すこしくらい。 教科書読みながら、 CGIへフォームを渡す所の段階まで進んできました。 現段階で、htmlからperlへフォームを渡そうとしているのですが、 上手く行きません。 状況としては、htmlのフォームを入力して、登録を押す。 成功であれば→実行結果が表示されるはずなのですが、 現段階ではFinderがその実行htmlの場所を開くだけという形になっています。 下記は実験用に使っているソースです。 ーーーーーーーーーーー htmlは <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>test</title> <style type="text/css"> </style> </head> <body> <h1>メンバーズリスト</h1> <form method="post" action="form.cgi"> <p> 名前:<br/> <input type="text" name="name"/> </p> <p> 性別: <input type="radio" name="sex" value="male" checked>男 <input type="radio" name="sex" value="female">女 </p> <input type="checkbox" name="megane">メガネを付けてる </p> <p> <select name="kankei"> <option value="yuujin">友人 <option value="kaisya">会社関係 <option value="sonota">その他 </select> </p> <p> 住所: <textarea name="jyusyo" rows="5" cols="40" ></textarea> </p> <p> <input type="submit" value="登録"/><input type="reset" value="クリア"/> </p> </form> </body> </html> ーーーーーーーーーーーーーーーーー perlは #!/usr/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); $name = $form{'name'}; $sex = $form{'sex'}; $megane = $form{'megane'}; $kankei= $form{'kankei'}; $jyusyo = $form{'jyusyo'}; print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>情報受け取り</TITLE></HEAD>\n"; print " <BODY>\n"; print "<H1>情報受け取り</H1><HR>\n"; print "名前:${name}<BR>\n"; print "性別:${sex}<BR>\n"; print "めがね:${megane}<BR>\n"; print "関係:${kankei}<BR>\n"; print "住所${jyusyo}<BR>\n"; print "</BODY>\n"; print "</HTML>\n"; __END__ です。 ちなみに localhost上で同一ファイルに入れて、 動かしてます。 ご確認の上、ご助言ください、 perlの教科書に書いてあった構文は、 htmlの学習をするために使ってきたものと全く違ったため、 要点だけ残す形で、再度書いたものです。 htmlの文章がおかしいのか、perlがおかしいのか、 頭が変になりそうです。お助けください。

    • ベストアンサー
    • Perl
  • 超初心者 ローカルでOKだったからUPしたら動かない

    超初心者です。 Perlの超入門本で勉強中。 OSはWin98、PerlはCygwinPerl、WebサーバーはANHTTPDです。 ローカルではうまく動作したので、実際にアップロードして動かしてみたのですがうまく動きません。 単に文字を入れて実行ボタンをクリックすると、その文字が表示されるだけという簡単なものなのですが、CGIのソースそのものが表示されてしまうのです。 ソースはこんな感じです。 ==文字を入れるWebページ== <html> <head> <title>実験</title> </head> <body> <form action=http://CGIサーバーのpathとファイル名(a1.pl) method="get" > <p><input type="text" name="data"></p> <p><input type="submit" value="実行"></p> </form> </body> </html> ====== ==Perlのソース(ファイル名はa1.pl)== #!/usr/local/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<title></title>\n"; print "</head>\n"; print "<body>\n"; print $in{'data'}; print "</body></html>"; ===== perlのPathはプロバイダーの指定通り パーミッションも指定された番号に(なにやら755という事なので)しました。 プロバイダーの環境は、 OSはx86 Solaris2.6、Webサーバーはapache/1.3.12、言語はperlVer.5.005_003です。 誰か助けてください。

    • ベストアンサー
    • CGI
  • FORMを教えてください

    全くの素人で、どなたか教えて下さい。 <HTML> <TITLE>TEST</TITLE> <BODY> <FORM ACTION="test.cgi" METHOD="POST"> 氏名<INPUT TYPE="TEXT" NAME="name"> 住所<INPUT TYPE="TEXT" NAME="tokoro"> <INPUT TYPE="Submit" value="データ送信"> <INPUT TYPE="Reset" value="リセット"> </FORM> </BODY> </HTML> 名前と住所を記入して送信ボタンを押したら記入した内容が表示されるCGIプログラムを教えて下さい。 #!/usr/local/bin/perl print "Content-Type: text/html"; print "<html>\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; #受け取ったデータを表示する print "氏名=$in{'namae'}\n"; print "住所=$in{'tokoro'}\n"; print "</body>\n"; print "</html>\n"; exit; とした場合 氏名= 住所= しか表示されません。 何が足りないのでしょうか?

    • 締切済み
    • CGI
  • (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
  • Perl の use strict に付いて

    ●HTML <html><head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>テスト5(UTF-8)</title> </head> <body> <form action="test5.cgi" method="post" > <input type="text" name="f1" value="" size="80"> <button type="submit" >送信</button> </form> </body></html> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; ●Perl #!/usr/bin/perl #use strict; ※問題の行1 use warnings; use CGI; print "Content-type: text/html\n\n"; print "<meta charset=\"UTF-8\">\n"; # POST / GET パラメータを取得------------------------- my $q = new CGI; # パラメータ名を指定して取得する my $param1 = $q->param('name1'); my $param2 = $q->param('name2'); # FORM値の取得----------------------------------- # 全てのパラメータを取得する for my $param_name ($q->param) { print $param_name . ' = ' . $q->param($param_name) ; print "<br>\n"; ${$param_name} = $q->param($param_name); ※問題の行2 } #------------------------------------------------- print "テスト<hr>\n"; print "$f1<br>\n"; exit; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 【質問】 「※問題の行1」+「※問題の行2」 = エラー 「※問題の行1」のみ = 正常に動きます 「※問題の行2」のみ = 正常に動きます 「※問題の行1」の「use strict; 」と 「※問題の行2」の「${$param_name} = $q->param($param_name); 」 をどう書き換えれば、二つとも記述したまま正常に動くのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 標準入力からデータが読込めない

    現在perlにてcgiを作成しています。 以下のようなcgiを作成したのですが、POSTで受取ったデータが 標準入力より取得できません。 解決策、又は、調査方法等ご存知の方いらっしゃいましたら教えてください。 --------- a.cgi -------- #!/usr/bin/perl print "Content-type: text/html\n\n"; if( $ENV{'REQUEST_METHOD'} eq "POST" ){ read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} ); }else{ $buffer = $ENV{'QUERY_STRING' }; } print <<"HTML"; <HTML><HEAD><TITLE>テスト</TITLE> <META http-equiv=Content-Type content="text/html;"> </HEAD> <BODY> <FORM id=Form1 name=Form1 action=a.cgi method=post> HTML print <<"HTML"; <INPUT type=hidden value=aaa name=text1> <INPUT onclick="return confirm('送信します。よろしいですか?');" type=submit value=送信 name=Button1> </FORM> </BODY> </HTML> HTML exit; -------------------------------------------------- $ENV{'REQUEST_METHOD'} は POST を取得できていますし、 $ENV{'CONTENT_LENGTH'} も文字数は取得できています。 どうか宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Perlをcshスクリプトに書きなおしたい

    以下のPerlで書かれたCGIをcshスクリプトに書き直したく思っています。 #!/usr/local/bin/perl # load libraries require ("/usr/local/bin/cgi-lib.pl"); # cancel stdout buffering $| = 1; # header response print "Content-type: text/html\n\n"; print STDOUT "<HTML><HEAD></HEAD><BODY>\n"; &ReadParse; open(COMM, "|./message > ./message.out") || die; $in_text = $in{"Name"}; print COMM "Name: $in_text\n"; ... "Name"という変数名で受け取った文字列を$in_textに代入している ようですが、この辺りの処理、cshではどう書けばよいのでしょうか。

    • ベストアンサー
    • CGI
  • if 文についての質問です。

    下記ようなプログラムで、HTML 上のフィールド (AAA)が(100) で (BBB)が(200) の場合 (300) を (変数の$answer) に格納し、実行結果を Sendmail で送信する為、新しく生成された HTML 上のフィールド (CCC) に表示したいのですが、どこが間違っているのでしょうか?お手数ですがどなたか記述上、間違っている箇所をお教え頂けると有難いです。 ---------------------------------------------------------------- #!/usr/local/bin/perl #!/usr/local/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type: text/html\n\n"; print <<HTML_DOCUMENT; if ($in{'AAA'} eq "100" and $in{'BBB'} eq "200") { $answer = '300'; } <html> <head> <title>Web Design [ Estimate - Order ]</title> </head> <body> <form action="test_sendmail.cgi" method="post"> <input name="AAA" type="checkbox" id="AAA" value="100"> <input name="BBB" type="checkbox" id="BBB" value="200"> <input name="CCC" type="text" id="CCC" value="$answer" size="10"> </form> </body> </html> HTML_DOCUMENT

  • なぜエラー?

    フォームに書き込まれた内容をCGIへ送る練習をしているのですが、どーーーーしてもエラーがでます(泣) 何故でしょうか。(改行や日本語処理はおいておいて下さい) CGI側をコピペしてみます。 #!/usr/local/bin/perl require 'lib/cgi-lib.pl'; &ReadParse(*form); print "Content-type: text/html\n\n"; print "<html>\n"; print "<head><title></title></head>\n"; print "$form{'kousin'}\n"; print "</body>\n"; print "</html>\n"; __END__ でエラー内容が # lib/cgi-lib.pl did not return a true value. File 'Macintosh HD:Desktop Folder:home:new:new.cgi'; Line 3 です。 cgi-lib.plは置き場所を変更してみたりしてるんですが、どこに置いても同じです。Line3ってこれ以上どーすればいいのでしょう‥‥うぅ。 MacOSでMacJPerl、サーバーにQuid Pro Quoを使ってます。

    • ベストアンサー
    • Perl