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

ActivePerlをC:\Perlにインストールしました。するとperl.exeはC:\Perl\bin\perlにありました。

そこでCGIファイルの1行目に
  #! C:/Perl/bin/perl
としましたが、実行してみるとコードがそのまま表示されてしまいます。

「Perl」と大文字を含むからかと「P」を小文字に変えてみたり、あるいは「/」を「\」にしてみたりと試しましたが、やはり機能しません。

httpd.confは教科書に書いてある通りに書き換えました。

何が原因でCGIがまともに動かないのでしょう。

OSはWindows Vista、Apacheは2.0.54、ActivePerlは5.8.7.813です。

A 回答 (5件)

>

http://www.310f.com/exocet/hiki/ はリンクがなくなっていたので、

あせらずにそのページに表示された目次(Table of Contents)にさえ目をやれば,
「Windows版Apacheでshebang行を無視する設定」へのリンクが見つかります。
    • good
    • 1
この回答へのお礼

原因は全然違うところにありました。

Apacheをインストールする際にファイアウォールを無効にしないとエラーが出るようです。DOS窓がチラチラ開いてはすぐに閉じて、ついつい見過ごしていました。

ファイアウォールをはずしてインストールしたらメデタク
  Hello Perl!

Helloというより、How do you do?って言いたいくらい、重たいコンニチハ・・・

お礼日時:2009/03/15 23:11

Perlへのパスが通っているか確認してください。


デスクトップのコンテキストメニューからプロパティ
また、コントロールパネルからシステムを選択して

 詳細設定タブわ選択し、下の「環境変数」ボタン
  →システム環境変数にあるPathを選択し、編集を押す。
   →変数値にG:\usr\local\bin;が含まれているか確認する。
    ★なければ、;に続いて追記する。
   普通はactivePerlをインストールすると追加されるはず。

ここまでで問題なければ、次はhppd.confの中身を見てみましょう。
 これで、apacheが、#行を認識していても、Perlが実行されるはずです。

この回答への補足

>Perlへのパスが通っているか確認してください。
D:\usr\local\binはPATHの中にありました。

shebangに関して、​http://www.310f.com/exocet/hiki/​はリンクがなくなっていたので、
http://www.redout.net/data/scriptinterpretersour …
を参考にしました。

以下をhttpd.confに記述。
  ScriptInterpreterSource Registry

レジストリの設定
  場所 HKEY_CLASSES_ROOT\.cgi\shell\ExecCGI\command
  名前 (規定)
  種類 REG_EXPAND_SZ
  データ d:\usr\local\bin\perl.exe %1

最後にregファイルの作成、実行
  Windows Registry Editor Version 5.00
  
  [HKEY_CLASSES_ROOT\.cgi]
  
  [HKEY_CLASSES_ROOT\.cgi\shell]
  
  [HKEY_CLASSES_ROOT\.cgi\shell\ExecCGI]
  
  [HKEY_CLASSES_ROOT\.cgi\shell\ExecCGI\command]
  @=hex(2):43,00,3a,00,5c,00,50,00,65,00,72,00,6c,00,5c,00,62,00,69,00,6e,00,5c,\
  00,70,00,65,00,72,00,6c,00,2e,00,65,00,78,00,65,00,20,00,25,00,31,00,00,00
  
  
  [HKEY_CLASSES_ROOT\.pl]
  
  [HKEY_CLASSES_ROOT\.pl\shell]
  
  [HKEY_CLASSES_ROOT\.pl\shell\ExecCGI]
  
  [HKEY_CLASSES_ROOT\.pl\shell\ExecCGI\command]
  @=hex(2):43,00,3a,00,5c,00,50,00,65,00,72,00,6c,00,5c,00,62,00,69,00,6e,00,5c,\
  00,70,00,65,00,72,00,6c,00,2e,00,65,00,78,00,65,00,20,00,25,00,31,00,00,00

参考にしているサイトと私のPCではPerlの置き場ば違いますけど、「@=」以降の文字列は変わらないものでしょうか。とりあえず、このままやってみましたが、アッサリ撃沈でした。

気を取り直して、明日はこのサイトと同じ場所にPerlを格納した上で試してみます。

補足日時:2009/03/15 02:11
    • good
    • 0
    • good
    • 0

 チェックポイントは結構多彩です。


 お書きの状況から見ると、多分、ApacheがCGIを認識していません。
 想定される大きそうな理由を羅列しておきます。
・httpd.confの中で
 ・LoadModule で、mod_cgi.so の指定してある行のコメントは外してありますか?
 ・AddHandler cgi-scriptは正しい拡張子が指定されていますか?
 ・CGIが置かれている領域のDirectory指定子の中で、Option +ExecCGIはセットされていますか?又は、CGIのあるディレクトリの.htaccessで、同じ指定がされていますか?
・アプリケーションのディレクトリ内で
 ・CGIファイルの拡張子は正しくAddHandlerの指定に合わせてありますね?

 とこのくらいをチェックすれば、多分、どこかに間違いがあると思いますけど・・・どちらにしても、「教科書に書いてある通りに」はやめた方が良いかと思います。教科書に書いてある「趣旨」の通りに指定できる程度に教科書を理解してください。CGI関係の指定はセキュリティーがらみもあり、指定するべき項目が多く複雑なのですが、総ての項目には「指定しなければならない理由」が存在します。その意味がちゃんと教科書には書いてあるはずです。そこを理解しておかないと、自分で何かを作り始めた時にとても困りますよ。(外部に公開するHPを作った時に、外から悪意満点のプログラムのアップロードし放題なんてページになりかねません(苦笑))
 がんばってくださいね。

この回答への補足

ORUKA1951さん、mitonekoさん、ありがとうございます。

Perl、Apache共にDドライブに移しました。

perl.exeはD:\usr\local\binにあります。1行目の記述は
  #! /usr/local/bin/perl
としました。

ApacheもD:\usr\localにインストールしました。するとこの下に\Apache2ができ、その下にApacheのファイルが各々格納されました。問題のCGIファイルはD:\usr\local\Apache2\htdocs\testにあります。httpd.confは以下のように記述しました。

>LoadModule で、mod_cgi.so の指定してある行のコメントは外してありますか?
  LoadModule cgi_module modules/mod_cgi.soの「#」をはずしました。

>AddHandler cgi-scriptは正しい拡張子が指定されていますか?
>CGIが置かれている領域のDirectory指定子の中で、Option +ExecCGIはセットされていますか?又は、CGIのあるディレクトリの.htaccessで、同じ指定がされていますか?
  <Directory "D:/usr/local/Apache2/htdocs/test">
  Options +ExecCGI
  AddHandler cgi-script .pl .cgi
  </Directory>

  また、今回は.htaccessは利用しません。

>アプリケーションのディレクトリ内でCGIファイルの拡張子は正しくAddHandlerの指定に合わせてありますね?
ファイル名はhello.cgiです。

この他、教科書に書いてあった変更点は、
  Options Indeses FollowSymLinks Includes EcecCGI
  AllowOverride All
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

これで、IEには
http://127.0.0.1/test/hello.cgi
と入力しているのですが、現状ではhello.cgiのコードが記述されてしまいます。

補足日時:2009/03/15 00:25
    • good
    • 0

Windowsの場合も、


#/Perl/bin/perl
で良いです。同じドライブにあるときはC:はいらない。
 ただ、Windowsは、この部分を読まないため必要ないかも・・
 なぜ、「かも・・」なのかというと、ローカルのテスト環境を作るときは、通常別のドライブを用意(G:)して、そこの、(G:)\usr\localにactivePerlを、apacheを(G:)\usr\local\apacheにインストールして、パスなどがリモートサーバーと合致するようにインストールすることが多いからです。そうすると、CygwinというUNIXの色々なツールを使うものを、同じドライブのルートにインストールしておけば、UNIXサーバーにあるシェル(shとかbashとか)、やfind,lsなとのPerlから使う機会の多いツールがそのまま使えるからです。
 それで、私はC:にインストールしたactivePerlやapacheの挙動をよく知らない。
 なお、apacheでしたら、modperlを使うほうが早いような・・
    • good
    • 0

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