• ベストアンサー
  • 困ってます

cgi(perl)でパラメータが渡せない

以下のプログラムでnum=9が伝わらないので、ミスをご指摘ください。 グラフィカルなアクセスカウンタを表示させようとしていますが うまくいかないのでテキストモードでデバッグしています。 [ /usr/local/apache2/htdocs/gif-view.html ] <html> <head> <meta http-equiv="Content-type:" content="text/html; charset=UTF-8"> <title>gif-view</title> </head> <body> <iframe src="/cgi-bin/gif-test.cgi?num=9"></iframe> <!-- <img src="/cgi-bin/gif-test.cgi?0" width=50 height=50> --> </body> </html> [ /usr/local/apache2/cgi-bin/gif-view.cgi ] permission は 755 にしています。 #!/usr/bin/perl print "Content-Type: text/plain;\n\n"; print "gif-test.cgi\n"; $prm0 = @ARGV[0]; if($prm0 = "") { print "Param is exist\n"; } else { print "Param is empty\n"; 実行結果として gif-test.cgi Param is empty となります。 httpd.conf で Script Alias /cgi-bin/ "/usr/local/apache2/cgi-bin/" を有効にしています。

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

  • 回答数1
  • 閲覧数113
  • ありがとう数3

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

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

>$prm0 = @ARGV[0]; 何これ? 何がやりたいのか判らん。 「CGIとして呼び出したperlのスクリプトでは、フォームからのパラメータは、ARGVには入って来ない」のだけど(ARGVは常に「空配列」になる) フォームからパラメータを受け取る場合は #!/usr/bin/perl (略) use CGI; my $q = CGI->new(); (略) $num = $q->param('num'); って感じで「CGIモジュール」と言うのを使う。 当然、perl本体に「CGIモジュール」がインストール済みである必要がある。 「CGIモジュール」をインストールできない場合は my $query; if ($ENV{'REQUEST_METHOD'} eq "POST") { $query = join "", <STDIN>; } else { $query = $ENV{'QUERY_STRING'}; } という感じで、リクエストの種類(GETとかPOSTとかの種類)を判断して、パラメータを標準入力から拾うか、環境変数の「QUERY_STRING」から拾う。 拾った「パラメータ列」は「デコードされてない」ので、自分で解析して、自分でパラメータを「名前」と「値」に分離しないといけない。 つまり、呼び出し時に <iframe src="/cgi-bin/gif-test.cgi?num=9"></iframe> と呼んでいたら、環境変数の「QUERY_STRING」には「num=9」が入っているし、 <iframe src="/cgi-bin/gif-test.cgi?num=9&data=aaa"></iframe> と呼んでいたら「QUERY_STRING」には「num=9&data=aaa」が入っているので、自分で文字列解析して、自前で名前と値を取り出さないとならない。

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

質問者からのお礼

ご回答ありがとうございました。 CGI モジュールはインストールされておりましたので use CGI; を追加してご指示のようにしたら動作しました。 感謝申し上げます。 さらに $prm0 = @ARGV[0]; >何これ? >何がやりたいのか判らん。 についてですが、beginners.atompro.net/sub_ccounter.html というサイトで紹介されている cconter.cgi に記載されている 方法をまねてみました。

関連するQ&A

  • htmlで画像が表示されない

    CGIを勉強し始めた者です。 手始めにCGIを使わずに画像表示をさせたところ早速つまづきました。 アドバイスお願いします。 vine linux 6.3 に apache2.4をソースからインストールしました。 /usr/local/apache2/htdocs に以下の cgi-test.html を置きました。 <html> <head> <meta http-equiv="Content-Type:" content="text/html; charset=UTF-8"> <title>CGI TEST</title> </head> <body> <h3>CGI TEST</h3> <img src="../cgi-bin/a0.gif">&nbsp;<img src="./a1.gif"> </body> </html> パーミッションは 755 root root cgi-test.html /usr/local/apache2/cgi-bin のパーミッションも 755 root root です。 ここに 数字0&#65374;9のgif画像を置いています。パーミッションは 644 root root 表示されないので/usr/local/apache2/htdocsにa0.gif, a1.gif を置いてみました。 パーミッションは 同じく 644 root root です。 数字0は表示されませんが、1は表示されます。 なぜ0が表示されないのかお教えください。

    • 締切済み
    • CGI
  • CGIが文字化けしてしまう。(Perl)

    環境 WinXP    Apache ActivePerl 開くソフトは「Tera pad」      でやっています。ソースは #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ああああ。</BODY>\n"; print "</HTML>\n"; __END__ です。「ああああ」部分が「&#8218; &#8218; &#8218; &#8218; &#129;B」 と表示されます。 どなたか解決方法ご存知の方いらっしゃいましたら ご回答お願いします。

    • ベストアンサー
    • CGI
  • Mac OSX LionでCGI/Ruby動かず

    Mac OSX Lionを使っています。 CGIでRubyを使いたいと思い、 以下のことを試したのですが、 500 Internal Server Error となってしまいます。 ◆やったこと 以下のファイルを /Library/WebServer/CGI-Executables に置きました。 (改行コードはLFとしました) --test.cgi--- #!/usr/bin/ruby print "Content-Type: text/html&#165;n&#165;n" puts "Hello Ruby" ----- そしてchmod 777としてブラウザから http://localhost/cgi-bin/test.cgi にアクセスしたところ、 500 Internal Server Error となってしまいます。 その際の/var/log/apache2/error.logは、 Premature end of script headers: test.cgi とだけ表示されます。 なんだか一番最初の所でつまづいてしまい、 めげそうになっております。 よろしくご教授ください。

    • ベストアンサー
    • CGI
  • solaris10にて、SMFからのapache+ssl起動

    solaris10にて、apache2+sslの環境を構築しているのですが、SMF経由でapacheを起動させると、sslが有効になりません。 SMFにて使用する、起動用のスクリプト「/lib/svc/method/http-apache2」内のsvcpropというコマンドで、チェックしているところまでは分かったのですが、ここからが分かりません。 どなたか、ご教授願います。 ★SMFからの起動(apache2のみ起動される) # /usr/sbin/svcadm disable svc:/network/http:apache2 # /usr/sbin/svcadm enable svc:/network/http:apache2 # svcs -a |grep apache2 online 11:30:43 svc:/network/http:apache2 # ps -ef|grep http |grep -v grep root 692 1 19 11:30:43 ? 0:06 /usr/local/apache2/bin/httpd -k start webservd 698 692 0 11:30:51 ? 0:00 /usr/local/apache2/bin/httpd -k start ★apache2+SSL手動起動 ・apache無効化 # /usr/sbin/svcadm disable svc:/network/http:apache2 # /usr/local/apache2/bin/apachectl startssl # ps -ef|grep http webservd 675 670 0 11:25:45 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL root 670 1 9 11:25:42 ? 0:03 /usr/local/apache2/bin/httpd -k start -DSSL

  • perlでpostが受け取れない

    perlでCGI を作ってみましたが、POSTでデータが受け取れません。GETは問題ないのですが。read stdin が NULL になります。 ローカルのapache2でテストしています。$ENV{'CONTENT_LENGTH'}がゼロのためだと 思いますが対応が分かりません。 OS:CENTOS6 (VirtualBox) APACHE2.2 Perl 5.10 /var/www/cgi-bin で実行。 呼び出しは <form action='localhost/cgi-bin/uptag.cgi' method='post'"> です。

    • 締切済み
    • CGI
  • 普通のhtmlからcgiを呼び出す方法

    なんとか解らないなりにいろいろ勉強しているものです。 よく、普通のHTMLにカウンターなどをつける際に <IMG src="/cgi-local/it-mark.cgi?itservicemark"> とか言うようなかんじでしています。 自分もこのような形でカウンターではなく画像をhtmlに貼りたいのですが、うまく行きません(下記参照) //////////////////////////////////////////// #!/usr/local/bin/perl $itservice_mark = int(itservicemark); # Content-typeヘッダ出力 print "Content-type:text/html\n\n"; # HTML出力 print << "END_OF_HTML"; <IMG src="../image2/common/common-name3.gif" border="0"> END_OF_HTML ///////////////////////////////////////////// このような具わいで作っても普通のhtmlはcgiをよんでくれないのでしょうか?誰か宜しくお願い致します。

    • 締切済み
    • CGI
  • サクラのレンタルサーバーです。CGIが動きません

    サクラのレンタルサーバーを借りました。 早速CGIを試そうと思ったのですが、原因不明のInternal Server Errorが出ます。 cgi-binはいらないとのことですので、wwwにそのまま入れました。 index.htmlも同じ場所にありそれは出ますのでパス間違いではないです。 またパーミッションも777にしてみましたが駄目です。 #!/usr/local/bin/perl print "Content-Type: text/html\n"; print "\n"; print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; こんな感じで、TELNETでログインして実行も出来ます。 bash-2.05b$ ./index.cgi Content-Type: text/html <html><body>abc</body></html>bash-2.05b$ いろいろ調べたのですが ◆パーミッション→OK ◆TELNETで実行してみる→OK ◆perlへのパスは?→/usr/local/bin と /usr/bin どちらでもいいそうです。験しに変えましたが状況変わらず。 何か気が付いたことがあれば教えてください

    • ベストアンサー
    • CGI
  • htmlにCGIプログラムの埋め方。

    window2000+apache2+perl5の環境ですが。 ディレクトリの構成: c:\Program Files\Apache Group\apache2 apache2にcgi-bin とhtdocsの二つのディレクトリがあり、 cgi-binにwforum.cgiというCGIプログラムがあるとします。 \htdocs\index.htmlを次のように作りました: ------------------------------------ <html> <head> <title> test page </title> </head> <body> ここに”BBS 行き”というハイパーテキスト をクリックしたら、wforum.cgiを実行してくれる </body> </html> -------------------------------------- 上のようなプログラムをどう作れますか。できれば、相対 パスを使いたいです。

    • ベストアンサー
    • CGI
  • CGI設置時に500エラーになります

    CGIを設置しようとしたところ、500 Internal Server Error になります。 共用サーバーIDを使用しています。 CGIファイルは「cgi-bin」の中に入れています。 たとえばこんな簡単なCGIでテストしたのですが、500 Internal Server Errorになってしまいます。 ↓ #!/usr/local/bin/perl print "Content-type: text/html \n\n"; print "Hello"; #!/usr/local/bin/perlを #!/usr/bin/perlにしても結果は同じです。 (サーバーの指定は#!/usr/local/bin/perl) パーミッションは755にしています(705に変えてもダメでした)。 CGIファイルの改行コードはLFにしており、テキスト(ASCII)モードでアップロードしています。 それでも500 Internet Server Errorになります。 サーバーではエラーログが見られないのでみなさんにお聞きしたいのですが、他にどんな原因が考えられるでしょうか?

  • CGI勉強中(初心者です)

    #!/usr/bin/perl print "content-type:text/html\n\n"; print "<HTML>\n"; print "<head><title>CGI</title></head>\n"; print "<BODY>\n"; print "<H1><FONT COLOR=\"#FF0000\">こんにちは</FONT></H1>\n"; print "</BODY>\n"; print "</HTML>\n"; というCGIつくりました。 プロバイダの説明には Perlの場所 /usr/bin/perl または /usr/local/bin/perl となっていますが、 どこにどう置いて(ホームディレクトリでしょうか?)、どうやって起動させてよいのかさっぱりわかりません。 ご教授ください。

    • ベストアンサー
    • CGI