• ベストアンサー

1行目、Perlの宣言

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です。

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.5

>http://www.310f.com/exocet/hiki/ はリンクがなくなっていたので、 あせらずにそのページに表示された目次(Table of Contents)にさえ目をやれば, 「Windows版Apacheでshebang行を無視する設定」へのリンクが見つかります。

makoji
質問者

お礼

原因は全然違うところにありました。 Apacheをインストールする際にファイアウォールを無効にしないとエラーが出るようです。DOS窓がチラチラ開いてはすぐに閉じて、ついつい見過ごしていました。 ファイアウォールをはずしてインストールしたらメデタク   Hello Perl! Helloというより、How do you do?って言いたいくらい、重たいコンニチハ・・・

その他の回答 (4)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

Perlへのパスが通っているか確認してください。 デスクトップのコンテキストメニューからプロパティ また、コントロールパネルからシステムを選択して  詳細設定タブわ選択し、下の「環境変数」ボタン   →システム環境変数にあるPathを選択し、編集を押す。    →変数値にG:\usr\local\bin;が含まれているか確認する。     ★なければ、;に続いて追記する。    普通はactivePerlをインストールすると追加されるはず。 ここまでで問題なければ、次はhppd.confの中身を見てみましょう。  これで、apacheが、#行を認識していても、Perlが実行されるはずです。

makoji
質問者

補足

>Perlへのパスが通っているか確認してください。 D:\usr\local\binはPATHの中にありました。 shebangに関して、​http://www.310f.com/exocet/hiki/​はリンクがなくなっていたので、 http://www.redout.net/data/scriptinterpretersource.html を参考にしました。 以下を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を格納した上で試してみます。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 チェックポイントは結構多彩です。  お書きの状況から見ると、多分、ApacheがCGIを認識していません。  想定される大きそうな理由を羅列しておきます。 ・httpd.confの中で  ・LoadModule で、mod_cgi.so の指定してある行のコメントは外してありますか?  ・AddHandler cgi-scriptは正しい拡張子が指定されていますか?  ・CGIが置かれている領域のDirectory指定子の中で、Option +ExecCGIはセットされていますか?又は、CGIのあるディレクトリの.htaccessで、同じ指定がされていますか? ・アプリケーションのディレクトリ内で  ・CGIファイルの拡張子は正しくAddHandlerの指定に合わせてありますね?  とこのくらいをチェックすれば、多分、どこかに間違いがあると思いますけど・・・どちらにしても、「教科書に書いてある通りに」はやめた方が良いかと思います。教科書に書いてある「趣旨」の通りに指定できる程度に教科書を理解してください。CGI関係の指定はセキュリティーがらみもあり、指定するべき項目が多く複雑なのですが、総ての項目には「指定しなければならない理由」が存在します。その意味がちゃんと教科書には書いてあるはずです。そこを理解しておかないと、自分で何かを作り始めた時にとても困りますよ。(外部に公開するHPを作った時に、外から悪意満点のプログラムのアップロードし放題なんてページになりかねません(苦笑))  がんばってくださいね。

makoji
質問者

補足

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のコードが記述されてしまいます。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

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を使うほうが早いような・・

関連するQ&A

専門家に質問してみよう