• ベストアンサー

ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!に関係なく実行できるようにするには。

ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!のPerlを動かす場所(?)を指定する行が無かった場合や、違う場合でも、Apachが勝手にperlの場所を解釈しスクリプトを実行してくれるようになるhttpd.confの設定方法ってありますか?

noname#32059
noname#32059
  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • nipotan
  • ベストアンサー率59% (134/227)
回答No.2

> CGI(Perl使用)の部分もあるので、ローカルで実際に動かしてからサーバにアップしています。 > ローカルでの実行環境がApach(for win32)+ActivePerlで、サーバにアップするときにわざわざ#!部分を変更しなければなりません。それが少々めんどくさいので > 質問したわけであります。 発想の転換をしてみてください。 要するに「she-bang 書き換えが面倒くさい」だけなんですよね? Apache に依存させるのではなく、ActivePerl を入れなおして、ディレクトリをあわせてみてはいかがでしょうか。 ActivePerl をインストールする際に、例えばサーバ側が /usr/bin/perl だった場合、 c:\usr フォルダを作っておいて、インストール先を c:\usr にしておけば、perl インタプリタの実行ファイルが c:\usr\bin\perl.exe になります。 she-bang を #!c:\usr\bin\perl とすればいいのは勿論なんですが、Apache を介せば、UNIX 表記でも問題ないので、#!/usr/bin/perl と記述することが可能です。当然それなら、いちいち書き換えなくても、サーバ側でそのまま利用することが可能です。 コツとしては、perl のパスの bin ディレクトリの上位まで、Windows 上に作っておいて、インストール先として、そこまで指定します。 /usr/local/bin/perl としたい場合は、c:\usr\local フォルダを作っておいて、インストール先として c:\usr\local を指定すれば、自然と bin ディレクトリが作られ、その中に perl.exe がインストールされます。 で、CGI として使用したいファイルの先頭を #!/usr/local/bin/perl とすれば、サーバでも Win 環境でも共用できる she-bang が書けますので、そういうことを気にしなくてもいいと思います。 私はかれこれ 3 年間、この方法を使ってます。

noname#32059
質問者

お礼

ありがとうございます。 いい考えですね。感謝感謝です! 早速やってみます、ありがとうございました。

その他の回答 (1)

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.1

httpd.conf 自体でそれをやるのは無理だと思います。 例えば、私が業務で使用している開発環境は、3 つ異なるバージョンの perl が入っているのですが、先頭の #! (She-bang) が無いと、どのバージョンで動作させるのかすら設定出来ませんし、これは言ってしまえば拡張子で判別させる DOS 系 OS と異なり、UNIX 系での「カーネルに認識させるための記述」という、ひとつの「文化」であって、Apache がどうのこうのって事でもないです。 Win32 版の Apache を使ってたとしても、UNIX 文化に育まれた Apache には、その解決方法が無いかと思います。 Apache のソースコードを改編してコンパイルし、「自分専用の Apache を作る」か、mod_perl を組み込み、mod_perl の拡張モジュールを作れば、それも可能ですが…。

noname#32059
質問者

お礼

できないとなると、残念です。 ちなみに、いまやりたいことは・・・ 自分のWebページを作っています。 CGI(Perl使用)の部分もあるので、ローカルで実際に動かしてからサーバにアップしています。 ローカルでの実行環境がApach(for win32)+ActivePerlで、サーバにアップするときにわざわざ#!部分を変更しなければなりません。それが少々めんどくさいので 質問したわけであります。 apachの変りにhttpd for win32 を使うと、#!の行が違っても実行できるので、Apachではできないかと思いまして。。。

関連するQ&A

  • CGIモードのphpスクリプトが400で動くわけ

    さくらインターネットのレンタルサーバを利用しています。 さくらに聞け!、と言われてしまうかもしれないですが教えてくれると助かります。 困っているのと技術的な興味の半々です。 私が利用している「プロ」プランの特徴はユーザ権限でapacheが起動されていることです。 (ユーザ毎にapacheが起動されていると考えられます。http://tanaka.sakura.ad.jp/archives/000971.html) PHPはCGIモードで設定されていてPHPスクリプトはパーミッション400で動作します。 同じディレクトリにperlスクリプトもあるのですがこれは少なくとも500を与えないと動作しません。 そこでこの動作条件の違いの原因を考えてみて思いついたのですが、 両者の違いとしてPERLスクリプトの先頭にはperlの位置が明示されているがPHPスクリプトのそれにはない。 それからCGIモードでPERLを動作させる場合とCGIモードでPHPを動作させる場合とではhttpd.confの記述内容が違う。 (ExecCGI, AddHandler, AddType, Actionなど) 質問1 httpd.confに、PHPを設定するようにPERLを設定すれば PERLスクリプトも400で動作するようになるのでしょうか? またその場合先頭行でperlの位置を明示する必要もなくなりますか? (テスト環境がないためテストはしておりません)

    • 締切済み
    • CGI
  • CGI版PHPについて

    一般的なPerlのCGIが実行可能な状態のApache(Linux上)にCGI版のPHPを追加インストールした場合、ApacheはスクリプトがPerlであるかPHPであるかの違いをどう認識するのでしょうか? 方法1 スクリプトはどちらも*.cgiとして作成し、スクリプト内先頭行のperlやphpへのパスの記述で認識する 方法2 perl→*.cgi php→*.php のようにhttpd.confや.htaccessで設定する 初心者のためこの二つくらいしか思い浮かばないのですが、どちらかが正解だったりしますか??

    • ベストアンサー
    • PHP
  • PerlのCGIとPHPを

     特定のディレクトリのCGIの中にPHP(Apacheのモジュール版)を書き、(CGIで<?php~?>とHTMLを出力させる)Perl/CGIを実行したときにその出力の中に含まれるPHPを実行させたくて、.htaccessに AddHandler application/x-httpd-php cgi AddHandler cgi-script .cgi を書いたのですが、どうやらPHPのAddHandlerの後に書かれているCGIの方が優先され、PHPが実行されず、CGIのみが実行されます。  順序を逆に書いても、今度はPHPが優先されてしまい、どちらか片方しか実行されません。  どうすれば、両方同時に実行させられるでしょうか、教えてください。  それが不可能ならば、とりあえずPerl/CGIからPHPを呼び出して先に実行させるようなことができるのならば教えてください。  ちなみに、httpd.confには拡張子cgiをすべてのディレクトリでCGIとして実行、拡張子phpもすべてのディレクトリでPHPとして実行させるようにAddHandlerされています。 Apache/2.0.58(Windows版) PHP/5.1.6 CGI: ActivePerl 5.88 です。

    • ベストアンサー
    • PHP
  • perlの実行環境について

    perlの実行環境に影響する部分は ■perlのバージョン ■httpd.conf ■perlモジュール 以外にあるのでしょうか。 例えば、phpでいうとphp.iniのような設定ファイルなどです。 ■perlのバージョン ■httpd.conf ■perlモジュール の設定がまったく同じ二つの環境で、 一方で使える関数がもう一方で使えない、ということが以前にありました。 肝心のその関数が何だったかを忘れてしまったのですが。

  • Apach での SSIとCGIとPHP

    Redhat Linux9.0 Perl-5.8.0-88.3 php-4.2.2.-17.2 ですが。。。 ユーザーディレクトリでPerlが動かなくて困っています。 通常、httpd.conf の <Directory /home/*/public_html> の部分に Options MultiViews Indexes SymLinksIfOwnerMatch Includes ExecCGI で動くと思うのですが、なぜかダメでした。 Error message: Premature end of script headers: test.cgi それで、httpd の フォルダを見たところ conf.d/perl.conf というのがあり、そこに次の様に記述したら、perlは動きました。 <Directory /home/*/public_html> SetHandler perl-script PerlHandler ModPerl::Registry::handler PerlOptions +ParseHeaders Options +ExecCGI </Directory> しかし、こうすると今度は SSI と PHP が動かなくなりました。 You don't have permission to access the requested object. It is either read-protected or not readable by the server. なお、上のディレクティブをコメントアウトすると、SSI と PHP はOKです。 この場合、PerlとPHPとSSIのすべてを動くようにするにはどうしたらいいのでしょうか? よろしくお願いします。

  • CGIを使用するためのApacheの設定

    今HPを作っています。 そこでカウンターを作ろうと思ってPerlを勉強したのですが、 Apacheでファイルを送り、 CGIを実行しようとすると、 「ファイルのダウンロード」 とでて「実行」を押すとメモ帳でそのCGIファイルが開かれてしまいます。 これはApacheの設定(httpd.conf)が関係してるんじゃないかと思うんですが、 設定の仕方がよくわかりません。 教えてください。 OSはWinXPでバージョンは2.0.55.0です。

  • ApacheでCGIが実行されない:FedoraCore4

    質問が立続きになってしまい申し訳ございません。 私はFedoraCore4を使い自宅サーバ開設に挑んでいます。 なかなか上手くいかずに苦戦中です。。。 さて問題の質問は「Apache2.0でCGIを使いたい」のですが上手くいきません。 このあたりについてご指導をお願いします。 ■現在までの設定■ ApacheがドキュメントルートでCGIを利用できるように設定。  > conf/httpd.conf  の、  > #Add Handler cgi-script.cgi  部分の、  > #  を取り除きました。また、  > <Directory "/var/www/html">  のOptionの部分に、  > ExecCGI  の文字を追加しました。 この上記設定において「Movable Type」を設置し 実際に動作確認が出来ました。 「Movable Type」  > /var/www/html  に、本体とLogを設置しています。 以上は質問とはまったく別件になってしまいましたが、 一般の配布されているCGIスクリプトを設置してみましたが まったく動作しません。 いちおう設置場所につきましては、  > /var/www/html と、  > /var/www/cgi-bin で試しました。実際には > /var/www/cgi-bin に設置するんですよね~?(不安 一般の配布CGIを設置実行するに当たり上記記載の"httpd.conf"の 設定以外にどこか設定する部分ってあるのでしょうか?? どうぞわかり易いご指導をお願いします。

  • xamppを使用してCGIが実行できなくて困っています。

    こんにちは。自分で作ったホームページにアクセスカウンターや掲示板を設置したいと思っています。 そこで、xamppを使用し、CGI(アクセスカウンターや掲示板)を設置したいのですが、できません。設置の仕方、設置場所などお分かりの方、教えてください!! いろんなサイト(xamppのホームページも含め)を探してみて、「httpd.conf」の中を変えると書いてあったので、そのとおりに変えてみました。 (DocumentRootの下に <Directory "C:/www"> AllowOverride All Options All </Directory> を加えるといったもの)しかし、実行できず、サーバエラーが出ます。 設置場所:xampp/htdocs/test.cgi アクセス:http://localhost/test.cgi エラー内容:Premature end of script headers: test.cgi [test.cgi]↓↓ #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<html><head>"; print "<title>TEST</title>; print "</head><body>\n; print "TEST<br>"; print "</body></html>\n"; [httpd.conf]の変更点 DocumentRoot "C:/xampp/htdocs"の下に <Directory "C:/xampp/htdocs"> AllowOverride All Options All </Directory> を追加。 分かりづらかったり、言葉が足りなかったらすみません。できなくて困ってます。。。どうかお願いします。

    • 締切済み
    • CGI
  • Perlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

    現在Perlスクリプトを作成し サーバにアップしました。 SSHでサーバにログインし #perl a.cgi と実行したところ(CGIとして動作させるため。中身はPerlスクリプト) Content-type: text/html <html> <body> あああああ </body> </html> のようなメッセージが表示され正常に動作しているとおもいます。 しかし、 http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると 500 Internal Server Error になります。 パーミッションは755で正常 Perlのパスは#!/usr/bin/perlとしており、これも正常です。 文字コードはeuc-jp 改行コードLF サーバはApache/1.3.33 Perlバージョンは5.8.4 自分のパソコン上でperl+HTTPサーバ(httpd)を使うと HTMLふぁいるとして出力されます。 サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。 このような現象が起こるのですが原因がわかりません。 お願いします。

    • ベストアンサー
    • Perl
  • CGIのスクリが勝手に実行されないようにするにはどうすればいいですか?

    CGIのスクリが勝手に実行されないようにするにはどうすればいいですか? IEとかでCGIファイルを開くと中に書いてあるperlスクリプトが開いた瞬間に実行されますよね。 もしそれが変なスクリプトだったら、勝手に実行されるのは非常に怖いです。 せめて、「このページのCGIを実行しますか」と警告が出てほしいです。 CGIが勝手に実行されないようにするにはどうすればいいですか? また、CGIファイルでは普通にIEで「ソースの表示」を押してもCGIの実行結果が表示されるだけです。 ブラウザからCGIのソースを表示する事はできますか?