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です。
No.5ベストアンサー
- 回答日時:
>
http://www.310f.com/exocet/hiki/ はリンクがなくなっていたので、あせらずにそのページに表示された目次(Table of Contents)にさえ目をやれば,
「Windows版Apacheでshebang行を無視する設定」へのリンクが見つかります。
原因は全然違うところにありました。
Apacheをインストールする際にファイアウォールを無効にしないとエラーが出るようです。DOS窓がチラチラ開いてはすぐに閉じて、ついつい見過ごしていました。
ファイアウォールをはずしてインストールしたらメデタク
Hello Perl!
Helloというより、How do you do?って言いたいくらい、重たいコンニチハ・・・
No.4
- 回答日時:
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を格納した上で試してみます。
No.2
- 回答日時:
チェックポイントは結構多彩です。
お書きの状況から見ると、多分、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のコードが記述されてしまいます。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlなんですが、403エラーにつ...
-
Linux アプリケーションのイン...
-
Macで使うターミナルのemacsで...
-
ローカルでのCGIの動作させるた...
-
相対パス
-
ApacheでCGIが正常に動作しませ...
-
Viで書き込もうとすると、保...
-
scpコマンドでリモートサーバの...
-
Illustratorのデータをまとめて...
-
IBM漢字コードのSJIS変...
-
コマンドプロンプトにてコマン...
-
リナックスでDVDドライブを使い...
-
コマンド終了ステータス
-
Solarisが起動しなくなった・・・
-
ウィンドウズお自動起動後、ラ...
-
HP-UXのdateコマンドについて
-
Mac OSXのターミナルでemacsを起動
-
Linuxから別PCのLinux上のファ...
-
AIX ksh利用 grep 検索で マ...
-
Macの Terminal でのエラーと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
500エラーorダウンロードになる...
-
eclipseでC言語がコンパイルで...
-
CGIへのコンパイルエラー
-
perlなんですが、403エラーにつ...
-
Linux アプリケーションのイン...
-
pythonのエラーについて
-
ApacheでCGIが正常に動作しませ...
-
相対パス
-
ローカルでのCGIの動作させるた...
-
Macで使うターミナルのemacsで...
-
bashシェルスクリプトで空白が...
-
scpコマンドでリモートサーバの...
-
Viで書き込もうとすると、保...
-
書き込み権限が無いためコピー...
-
DOSコマンドでのワイルドカ...
-
【ターミナル】MacBookにディー...
-
属性変更できないです。
-
Illustratorのデータをまとめて...
-
AIX ksh利用 grep 検索で マ...
-
rcpコマンドについて、教えて!
おすすめ情報