レンタルサーバー各社のPerl、Ruby、Pythonのパス一覧

更新:

さくらのレンタルサーバ、ロリポップ!、エックスサーバー、バリューサーバーにおけるPerl、Ruby、Pythonのパスの一覧。

Perl、Ruby、Pythonのパス一覧

CGIプログラムを実行する場合、ファイルの先頭(1行目)にインタプリタを指定する。
例えば Perl の場合は以下のように書く。

#!/usr/bin/perl

この表記は シバン と呼ばれ、各インタプリタへのパスを指定する。

パスはレンタルサーバーによって異なる場合があるので、以下の主要なレンタルサーバーについてパスを調べた。
下表は2017年6月26日現在のもので、詳しくは さくらのレンタルサーバCGI・PHP・SSI についてロリポップ! CGI・SSI・PHP・SENDMAILについてエックスサーバー プログラム言語バリューサーバー 料金・プラン に書かれている。

PHP Perl Ruby Python
さくらのレンタルサーバ /usr/local/bin/php /usr/bin/perl /usr/local/bin/ruby /usr/local/bin/python
ロリポップ! 不明 /usr/bin/perl または /usr/local/bin/perl /usr/local/bin/ruby1.9 や /usr/local/bin/ruby2.0 /usr/local/bin/python2.7 や /usr/local/bin/python3.4
エックスサーバー sv1999まで /usr/bin/php7.1 など /usr/bin/perl または /usr/local/bin/perl /usr/bin/ruby1.9.3 や /usr/bin/ruby2.0.0 /usr/bin/python2.7 や /usr/bin/python3.3
エックスサーバー sv2001以降 /usr/bin/php7.1 など /usr/bin/perl /usr/bin/ruby /usr/bin/python3.4 など
バリューサーバー /usr/local/bin/php71 など /usr/bin/perl または /usr/local/bin/perl /usr/local/bin/ruby /usr/local/bin/python

複数のバージョンを選択できる場合は、バージョンによりパスが異なる。
さくらのレンタルサーバは公式には書かれていないが、Perl は #!/usr/local/bin/perl でも動作した。


Internal Server Error が表示されてCGIプログラムが動かない

パスを正しく指定しても Internal Server Error が表示される場合、CGIプログラムファイルの改行コードが CRLF(\r\n)になっている場合がある。
その場合は改行コードを LF(\n)に変更する。
テキストエディタによっては一括で改行コードを変換できるものがある。
サクラエディタでは名前を付けて保存する際、保存時のウィンドウの下方に「改行コード」があり、CRLF や LF を選択できる。


env 表記

パスは以下のような表記が出来る場合がある。

#!/usr/bin/env perl

このように書くことでサーバーによってパスが異なっていてもパスを書き換えなくて済む。
ただし、これで動作するかはサーバーによる。
さくらのレンタルサーバで試したところ、Perl、Ruby、Python についてCGIプログラムが動作するのを確認した。

Perl
#!/usr/bin/env perl

Ruby
#!/usr/bin/env ruby

Python
#!/usr/bin/env python

ただ、複数のバージョンがインストールされている場合、どのバージョンが実行されるか分からないので注意が必要となる。
バージョンはプログラムで確認すれば良いが、サーバー管理者により適用されるバージョンが変わる可能性があるので注意。
このエントリーをはてなブックマークに追加