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.24 (5.32 ※)/usr/local/bin/perl
/usr/bin/perl
(上記のどちらでも動作します)
Ruby 2.3 (2.6 ※)/usr/local/bin/ruby
Python 2.7 (3.8 ※)/usr/local/bin/python

※カッコ内は下記メンテナンス後のバージョン

  • s3サーバ: 9月22日実施
  • s2サーバ: 10月5日実施
  • s1サーバ: 10月19日実施

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

新しいバージョンに対応していない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 プログラムから呼び出して使用できる主なプログラムのパスは次の通りです。

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