アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近CGIを勉強し始めたものです。
apache2.2.9をいれ、ActivePerl(Ver5.005_03)を入れて
下記のような簡単なコードを書いて実行してみましたが起動ができません。
=====================
#!/usr/bin/perl
print "abc";
=====================
なにか設定が必要でしょうか?
httpd.confあたりで設定が必要な部分がありますでしょうか?
調べてみたところ、推奨する設定だったのでそのままにして
テストしています。

A 回答 (9件)

No.2です。


私の質問にお答えいただいてないので再確認です。
o Perl.exe は /usr/bin/ (Windowsなら C:\usr\bin)にありますか。
 そうでないなら、スクリプトの1行目に書く #!/usr/bin/perl を perl.exe のパスに合わせて書換えないといけません。
もし、C:\perl\bin\perl.exe なら、#!/perl/bin/perl です。
o cgiファイルは cgi-binフォルダに置いてありますか。
 apacheの初期設定は cgi-binフォルダ以外では cgiファイルは実行できないと思います。
o httpd.confで .cgiファイルが実行できるようにしましたか。
 httpd.cnf の中に、
 #AddHandler cgi-script .cgi という行があります。頭に付いている # を取ってください。
そうしたらいったん、apacheを止めて再起動した後、ブラウザから目的のcgiファイルをリクエストしてください。
    • good
    • 0

まず、Perlが正常に動いているか否かは次のように確認します。


コマンドプロンプトを開き
> perl -v [Enter]
これでPerlのバージョン等が表示されれば、perl.exeへのパスが通っていると判断できます。

さて、PerlのCGIをブラウザから呼び出すとコードが表示されてしまう件ですが、

初期設定のcgi-binディレクトリ内で実行するのであれば、#6さんが回答されているとおり、
httpd.conf内の「#AddHandler cgi-script .cgi」の先頭の#を取ればOKです。

cgi-binではなくhtdocs内で実行したいのであればhttpd.confのhtdocsにあたる
ディレクティブ設定内(例:<Directory "C:/Apache22/htdocs">)のoptionsに
ExecCGIを追加する必要があります。

※ここまでは Apache1.3系(正確には1.3.9以降)、2.0系共通です。
※以下はApache2.2系に限った説明になります。

初期設定のcgi-binでもhtdocsでもない、httpd.conf内にてディレクティブ設定を
行っていない場所で実行させたい場合は、extraディレクトリ内にある userdir.conf で
設定を行い、この設定ファイルをhttpd.conf側で読み込んでやる必要がありますが、
失礼ながら質問者さんにはまだ敷居が高いと思いますので割愛します。
※どうしてもこの設定を行いたいのであれば、引き続き質問してください。

※1.3系、2.0系であれば、上記の説明すべてをhttpd.confで行います。
    • good
    • 0

「コードだけが表示されてしまう。

」のコードって、ソースコードですか? エラーコードですか?

私はソースコードだと思ってましたが、確認させてください。
    • good
    • 0

No.3 です。



> >デフォルトでは、CGI禁止だったかも。
> これはどこを見たら禁止になっているのかわかるのでしょうか?

さくっと答えられる単純なものではありません。 前回の参考URLの内容で、判らない部分があるのでしょうか?
    • good
    • 0

何度もすいません


print "content-type:text/html\n\n";
を入れてみるとどうですか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

でも結果は同じでした。

お礼日時:2009/08/06 20:21

まずapacheが正常かみるために


apacheのルートディレクトリに適当なhtmlファイルを置いて
http//localhost/○○.htmlもしくはhttp://127.0.0.1/○○.html
でアクセスできるか確認します。

これで正常に見れるようだとapache自体は動いてることになるので
次はapacheから.plもしくは.cgiファイルを開いたとき
正常にperl.exeが呼び出せているか確認します。
apacheの設定ファイルを見て確認しましょう。

以上の二点が正常なら基本的には動くはずです。
フリーソフトの「Perlをはじめよう!」等でperl.exeが正常か確認してもよいでしょう。
http://www.vector.co.jp/soft/win95/util/se169799 …

これで駄目なら一度アンインストールしてみて
ネットの指南サイト等をみながらやったほうが良いと思われます。

この回答への補足

はい。apacheは正常に動いています。

>正常にperl.exeが呼び出せているか確認します。
>apacheの設定ファイルを見て確認しましょう。
この部分が気になったんですが正常に呼び出せているかの
確認はどうするのでしょうか?

補足日時:2009/08/06 20:20
    • good
    • 0

マニュアルは読まれましたか? 参考URLです。



デフォルトでは、CGI禁止だったかも。

参考URL:http://www.apache.jp/manual/howto/cgi.html
    • good
    • 0
この回答へのお礼

>デフォルトでは、CGI禁止だったかも。
これはどこを見たら禁止になっているのかわかるのでしょうか?

お礼日時:2009/08/06 20:19

「実行してみた」 というのはどういうふうにしたのですか。

ブラウザから、たとえば
(1) http://localhost/apache/cgi-bin/xxx.cgi とリクエストしたのですか。
(2) file:///C:/apache/cgi-bin/xxx.cgi とリクエストしたのですか。
もし、(2)ならば実行されず、ファイルの中身がそのまま表示されます。
(1)でリクエストしたのにファイルの中身がそのまま表示されたのなら、
o Perl は /usr/bin/ (Windowsなら C:\usr\bin)にありますか。
o apacheを起動しましたか。
o cgiファイルは cgi-binフォルダに置いてありますか。(設定によりますが)
o httpd.confで .cgiファイルが実行できるようにしましたか。
もし、上記のことが正しいのなら、このスクリプトにはヘッダ出力行がありませんから、500 InternalServerError になるはずです。
ブラウザ表示行に先だって print "content-type: text/html\n\n"; を記述しないといけません。
=====================
#!/usr/bin/perl
print "content-type: text/html\n\n";
print "abc";
=====================
※No.1さんは何か勘違いされたようです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
はい。(1)とリクエストしました。
apacheも起動しています。
http://localhost も正常に表示されます。

気になりましたけどこれはどう設定したらよいでしょうか?
o Perl は /usr/bin/ (Windowsなら C:\usr\bin)にありますか。
o cgiファイルは cgi-binフォルダに置いてありますか。(設定によりますが)
もしかしたらこれらが関与しているかもしれません。。。

お礼日時:2009/08/06 20:18

print "abc";→prinf "abc";

    • good
    • 0
この回答へのお礼

ありがとうございます。

でもこの部分を修正しても結果は同じでした・・・

心当たりありますか?
何らか設定が要ると思っていてあれこれ調べているんですが
それらしき情報がみつかりません。。。

お礼日時:2009/08/05 23:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!