CGI (Perl, Ruby, Python)

CGIとは

CGI (Common Gateway Interface) とは、ウェブサーバでプログラムを実行するための仕組みです。

当サービスでCGIを介して使用できるプログラミング言語は、 Perl, Ruby, Python, PHP です。このページでは Perl, Ruby, Python についてご案内します。PHP についてはこちらをご覧ください。

CGIプログラムの設置場所と拡張子

CGIプログラムは、ディレクトリ public_html 下のどのディレクトリに設置しても動作します。また、拡張子が .cgi .pl .rb .py のいずれかのファイルがCGIプログラムとして扱われます。

インタプリタ

CGIプログラムのファイルの1行目でインタプリタを指定します。インタプリタとはプログラムのソースコードを実行するソフトウェアのことです。

Perlスクリプトならば1行目に #!/usr/local/bin/perl と記述します。

#!/usr/local/bin/perl
 
print "Content-type: text/html\n\n";
print "Hello, world!\n";

env を使用して次のように書くこともできます。

#!/usr/bin/env perl
 
print "Content-type: text/html\n\n";
print "Hello, world!\n";

各言語のインタプリタのパスは次の通りです。プログラムファイルにあらかじめ記述されているパスがこれと異なる場合は修正してください。

Perl 5.32
  • /usr/local/bin/perl
  • /usr/bin/perl
  • 上記のどちらでも動作します
Ruby 2.6 /usr/local/bin/ruby
Python 3.8 /usr/local/bin/python

古いバージョンのインタプリタ

新しいバージョンに対応していないCGIプログラムのために、古いバージョンのインタプリタを提供します。古いバージョンのインタプリタを使用する場合、追加のモジュールやライブラリは利用できません。

Perl 5.16 /usr/local/bin/perl5.16
Ruby 1.8 /usr/local/bin/ruby18
Python 2.7 /usr/local/bin/python2.7

CGIプログラムのパーミッション

パーミッションとは、ファイルやディレクトリに対するアクセス権のことです。誰に対して読み/書き/実行の権限を与えるかを設定するものです。CGIプログラムに関連するファイルの推奨パーミッションは次の通りです。

ファイルの種類説明推奨パーミッション
実行ファイル ウェブブラウザから直接アクセスされるファイル。
ファイルの所有者に読み/書き/実行権限を与えます。
700 (rwx — —)
データファイル CGIプログラムがデータを読み書きするファイル。
ファイルの所有者に読み/書き権限を与えます。
600 (rw- — —)
ディレクトリ 実行ファイルやデータファイルが入っているディレクトリ。
ディレクトリの所有者に読み/書き/実行権限を与え、他人に読み/実行権限を与えます。
705 (rwx — r-x)

suEXEC

当サービスのウェブサーバは suEXEC に対応しています。suEXECとは、CGIプログラムを実行する際のセキュリティを高めるための機能です。この機能により、CGIプログラムはユーザ権限で実行されます。また、ファイルに過剰なパーミッションが与えられていると動作しません。例えば、実行ファイルや実行ファイルが入っているディレクトリのパーミッションが 777 だと、Internal Server Error が発生します。

各種プログラムのパス

CGIプログラムから呼び出して使用できる主なプログラムのパスは次の通りです。

convert /usr/local/bin/convert
gzip /usr/bin/gzip
nkf /usr/local/bin/nkf
sendmail
  • /usr/lib/sendmail
  • /usr/sbin/sendmail
  • 上記のどちらでも動作します
uuencode /usr/bin/uuencode
uudecode /usr/bin/uudecode