プロが教える店舗&オフィスのセキュリティ対策術

cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、
うまくいかず困っています。

↓プログラムは、こんな感じです。
ファイル名:index.cgi
#!/usr/bin/perl
print "<html>";
print "<body>";
print "abc";
print "</body>";
print "</html>";

<やってみたこと>
・Perlのパス「#!/usr/bin/perl」 が間違っていないか?
which perl で
/usr/bin/perl
とでます。

・Apache の設定が正しく行なわれているか?
http://localhost
でindex.htmlがきちんと表示できています。

・「hello.cgi」 の設置場所を間違っていないか?
プログラムソースが出るということは、
間違っていないのではないでしょうか?

・ためしに実行してみた
TELNETで
./index.cgi
<html><body>abc</body></html>
とでてきました。
これはちゃんと動いているのでは??


何か勘違いしていますか?
お気づきの点を教えてください。よろしくお願いいたします。

A 回答 (6件)

>プログラムソースが出るということは、


>間違っていないのではないでしょうか?
ここを見てませんでした。
ソースがそのまま表示されるのならApacheのhttpd.confでCGIの設定をしていないのではないでしょうか。
Options ExecCGI
とか
AddHandler cgi-script .cgi
です

この回答への補足

ちょっとわからないので調べてみます。

補足日時:2006/05/15 14:42
    • good
    • 0
この回答へのお礼

以下をやってみましたが、
Forbidden
You don't have permission to access /hello.cgi on this server.
とでました。

パーミッションは777にしてみたのですが・・・??

~~~~~~~~~~~~~~~

CGIを置く場所を指定します
ScriptAlias /cgi-bin/ "ローカルパス"
<Directory "ローカルパス">

CGIの実行を許可します。
AddHandler cgi-script .cgi .pl

拡張子とPerlを関連付けます。
AddType application/x-httpd-cgi .cgi
AddType application/x-httpd-cgi .pl

ディレクトリインデックスにCGIを登録します。
DirectoryIndex index.html index.cgi

お礼日時:2006/05/15 14:54

なんか状況がさっぱり掴めませんけど、、、


1.そもそもOSとApacheのバージョンは何でしょうか?
2..cgiを置く場所は?ScriptAliasで指定したディレクトリ? ドキュメントルートの下辺り? それともユーザーディレクトリ?
3. 置きたいCGIは hello.cgiなの? それとも http://localhost/hoge/ でアクセスして index.cgiを表示したいと言う意味なの?

一応、汎用的な事で答えると
(1) パーミッション について 例えば/home/test/に置いた
wwwディレクトリが公開コンテンツを置くディレクトリで、
その中に hello.cgi を置いた場合
/home/ と /home/test/ と /home/test/www/ は701 でOK(ディレクトリ一覧を表示するならwwwは705)
hello.cgi は705でOK(Suexecなら700でOK)

(2)ScriptAlias で設定されたDirectoryに置くのならOptionsもAddHandlerも不要です

(3) ScriptAlias 以外の場所ならOptions ExecCGI とAddHandler cgi-script .cgi の指定が必要です
ありがちなミスは この2つの記述を違う<Directory コンテナに記述しているとか 記述後httpdを再起動していないとか?
あるいは .htaccess に記述するなら 該当コンテナにAllowOverride Noneとされているとか?
http://httpd.apache.org/docs/2.0/ja/mod/core.htm …
http://httpd.apache.org/docs/2.0/ja/mod/core.htm …
    • good
    • 0

Perlをインストールしましたか?

この回答への補足

which perl で
/usr/bin/perl
とでます。

補足日時:2006/05/15 11:31
    • good
    • 0

CGIの場合はhttpヘッダというものを最初に出力しないといけません。


#ヘッダ出力
print "Content-Type: text/html\n";
#ヘッダの終わりとして空行を出力
print "\n";
上記を付け加えてみましょう
    • good
    • 0
この回答へのお礼

そこかと思ったのですが、違ったようです。
httpd.confの設定が何か足りないようです。

回答ありがとうございました。

お礼日時:2006/05/15 13:08

うまく動かないというのはどういうふうに変なのか具体的に書いてみると,いろいろアドバイスが得られると思います.



僕が気がついたのは2点

・perlのソースが表示されてしまう
 → .cgiという拡張子がCGIであるという登録ができていない.
   .htaccessとかhttpd.confで設定

・何も表示されない
 →ヘッダが抜けている.
 #!/usr/bin/perl
 print "Content-type: text/html";   ←この行を追加
 print "";   ←この行を追加
 print "<html>";
以下略

この回答への補足

 → .cgiという拡張子がCGIであるという登録ができていない.
   .htaccessとかhttpd.confで設定

これかもしれません。
httpd.confに何か書かないといけないのですね?

補足日時:2006/05/15 11:27
    • good
    • 0

 パーミッションは設定されてますか?


 もしサーバーがUNIX系であれば、改行コードが CR+LF になってませんか?
 もしエラーメッセージ番号が499以下であれば、ディレクトリをどこかで勘違いしている可能性があります。

この回答への補足

すいません!
どうなっちゃうか、を書いていませんでした。

ブラウザでアクセスすると、
#!/usr/bin/perl

print "Content-type: text/html\n";
print "\n";
print "Hello World!";

みたいにソースそのものがでてきます。

補足日時:2006/05/15 11:26
    • good
    • 0

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