• ベストアンサー

perlのcgiが動かない・・・

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> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.5

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

azicyan
質問者

お礼

以下をやってみましたが、 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

azicyan
質問者

補足

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

その他の回答 (5)

回答No.6

なんか状況がさっぱり掴めませんけど、、、 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.html#options http://httpd.apache.org/docs/2.0/ja/mod/core.html#allowoverride

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

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

azicyan
質問者

補足

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

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

CGIの場合はhttpヘッダというものを最初に出力しないといけません。 #ヘッダ出力 print "Content-Type: text/html\n"; #ヘッダの終わりとして空行を出力 print "\n"; 上記を付け加えてみましょう

azicyan
質問者

お礼

そこかと思ったのですが、違ったようです。 httpd.confの設定が何か足りないようです。 回答ありがとうございました。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

うまく動かないというのはどういうふうに変なのか具体的に書いてみると,いろいろアドバイスが得られると思います. 僕が気がついたのは2点 ・perlのソースが表示されてしまう  → .cgiという拡張子がCGIであるという登録ができていない.    .htaccessとかhttpd.confで設定 ・何も表示されない  →ヘッダが抜けている.  #!/usr/bin/perl  print "Content-type: text/html";   ←この行を追加  print "";   ←この行を追加  print "<html>"; 以下略

azicyan
質問者

補足

 → .cgiという拡張子がCGIであるという登録ができていない.    .htaccessとかhttpd.confで設定 これかもしれません。 httpd.confに何か書かないといけないのですね?

noname#25358
noname#25358
回答No.1

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

azicyan
質問者

補足

すいません! どうなっちゃうか、を書いていませんでした。 ブラウザでアクセスすると、 #!/usr/bin/perl print "Content-type: text/html\n"; print "\n"; print "Hello World!"; みたいにソースそのものがでてきます。

関連するQ&A