スクリプト実行パス(shebang)の設定に関して

広告

ApacheではWindows環境であってもスクリプト実行パスを参照します。スクリプト実行パスとは1行目に記述されている下記の部分です。

#!/xampp/perl/bin/perl

print "Content-type: text/plain\n\n";
print "Hello !\n";

「#!」の後にスクリプトを実行するプログラムを指定するものですが、XAMPPでインストールした場合はPerlスクリプトを実行するプログラムは「(XAMPPをインストールしたディレクトリ)\perl\bin\perl.exe」ですので上記のように記述しておけば問題ありません。

ただ新規にスクリプトを記述する場合はいいのですが、多くのPerlスクリプトは1行目が「#!/user/bin/perl」と記述されています。これらのスクリプトをXAMPP環境で動かすには「#!/user/bin/perl」を「#!/xampp/perl/bin/perl」に書き換えなければなりません。書き換えずにアクセスしようとするとPerlの実行環境が見つからずにエラーとなります。

例として次のようなプログラムファイルをドキュメントルートに「sample.cgi」というファイル名で設置してみます。

#!/user/bin/perl

print "Content-type: text/plain\n\n";
print "Hello !\n";

p4-1

ブラウザから「http://localhost/sample.cgi」へアクセスして下さい。次のようにエラーが表示されてしまいます。

p4-2

全てのファイルの1行目を書き換えたくない場合には、解決方法として次の3つの方法があります。

1つ目は「http.conf」ファイルの中で適切なディレクトリに対して「ScriptInterpreterSource registry」を設定します。これはWindowsのファイルの関連付けを参照してスクリプトを実行するように指示するものです。この設定を行うとスクリプト実行パスの記述の有無に関わらず実行するファイルの拡張子に関連付けされたプログラムを使ってスクリプトが実行されます。ただしこの方法はあまり望ましいものではありません。

2つ目の方法は少し強引な方法ですがPerlの実行ファイルなどを「c:\user\」ディレクトリを作成し、そのディレクトリに丸ごとコピーする方法です。こうすることで多くのファイルで1行目に記載されている場所にPerlの実行ファイルが存在することになります。コピーするものは「c:\xampp\perl\」ディレクトリに含まれているものです。

p4-3

「c:\user\」ディレクトリへコピーを行いました。

p4-4

コピー完了後に改めてブラウザから「http://localhost/sample.cgi」へアクセスしてみます。今度はエラーも無く実行された結果が表示されました。

p4-5

3つ目の方法はシンボリックリンク(又はジャンクション)を設定する方法です。Windows Vista以降の環境であれば利用可能です。コマンドプロンプトを起動し次のように実行して下さい。

mklink /d c:\usr c:\xampp\perl

p4-6

改めてブラウザから「http://localhost/sample.cgi」へアクセスしてみます。今度はエラーも無く実行された結果が表示されました。

p4-7

なお先ほど作成したシンボリックリンクを削除する場合は次のようにコマンドプロンプトから実行して下さい。

rmdir c:\usr

p4-8

以上、3つの方法について簡単にご説明しました。ご利用されている環境で特に問題が起きなければ3番目のシンボリックリンクを使用する方法がおすすめです。

( Written by Tatsuo Ikura )