- ベストアンサー
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です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>http://www.310f.com/exocet/hiki/ はリンクがなくなっていたので、 あせらずにそのページに表示された目次(Table of Contents)にさえ目をやれば, 「Windows版Apacheでshebang行を無視する設定」へのリンクが見つかります。
その他の回答 (4)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
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/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)
http://okwave.jp/qa4323948.html?ans_count_asc=2 の私の過去の回答No.2
- mitoneko
- ベストアンサー率58% (469/798)
チェックポイントは結構多彩です。 お書きの状況から見ると、多分、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のコードが記述されてしまいます。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
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を使うほうが早いような・・
お礼
原因は全然違うところにありました。 Apacheをインストールする際にファイアウォールを無効にしないとエラーが出るようです。DOS窓がチラチラ開いてはすぐに閉じて、ついつい見過ごしていました。 ファイアウォールをはずしてインストールしたらメデタク Hello Perl! Helloというより、How do you do?って言いたいくらい、重たいコンニチハ・・・