はじめに
- PerlでCGIを行いたいときは、Apacheにperlを呼び込み起動させるか、 ApacheにperlのDSDモジュールを組み込んで置くかである。前者はアクセスが増えると負担が増え遅くなる。
Perlモジュールを組み込んでみる
- Apache Perl モジュールmod_perlの組み込みにはApacheに直接組み込む方法と、モジュールとしてロードする方法がある。さらにApacheを再度コンパイルしなくても良い方法としてはmod_perlをApacheのソースツリー外で、Dynamic Shared Object (DSO)としてコンパイルし、それをApacheのインストール先に移す方法を説明する。
- 展開されたmod-perlのフォルダのなかに、"INSTALL.apaci"という解説があるので、それに従う。まずコマンドラインから展開されたmod_perlのディレクトリに入る。
$ cd mod_perl-1.X
- 次に、mod-perlのフォルダの中には、コンパイル用の Makefileがあるので、これを利用する。その際、Mac OS X にデフォルトでインストールされているApacheのサポートツールapxsのパス"/usr/sbin/apxs"をオプション指定する。
$ perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/sbin/apxs EVERYTHING=1
$ make install
- これで、モジュール"libperl.so" は自動的に、Apacheのmodule "/usr/libexec/httpd/"の中に移され、適切なLoadModule?とAddModule?は"/etc/httpd/httpd.conf"ファイルに以下の用に追加される。
#/etc/httpd/httpd.conf
LoadModule perl_module libexec/httpd/libperl.so
AddModule mod_perl.c
- Apacheを"/usr/sbin/apachectl restart" で再起動させる前に、httpd.confの設定を次のように済ます。
httpd.conf
- 上述のようにモジュールがインストールされれば、今度は、セキュリティーの観点等からデフォルトでは、Offになっている CGIの設定を変更する必要がある。
さらにperl スクリプトが指定されたウェブの公開用のフォルダーtreeの外側のディレクトリで走るようにhttpd.confの設定を変更しなければならない。
- ScriptAlias? /cgi-bin/ "/Library/WebServer?/CGI-Executables/":これでエリアス"/cgi-bin/"で、"Library/WebServer?/CGI-Executables/"においたスクリプトを走らす。
- CGIを走らせたいディレクトリ<Directory>のOptionにExecCGIを追加する。Server Side Includes (SSI)とCGI を使用して、アクセスカウンターなどを作りたいなら、そ<Directory>に、さらにOptionにIncludesを追加する。
- <Directory "/Library/WebServer?/CGI-Executables"> と </Directory>の間に、
"Options None"のかわりに"Options ExecCGI"を追加する。
- "AddHandler? cgi-script .cgi"のコメントアウトをはずし、拡張子".cgi"のファイルを認識させる。
#AddHandler sever-parsed .shtml
#AddType text/html .shtml
- コメントアウトをはずす。SSI を拡張子.htmlで走らせたいなら、
AddHandler sever-parsed .html
AddType text/html .html
- 許可するディレクトリ<Directory>に追加する。
- 設定が終われば、Apacheを再起動("/usr/sbin/apachectl restart")する。
Perl-CGIの動作チェック:
- 次に、CGI を起動させるための、ウェブのツリー内に置くHTMLファイルでは、CGIスクリプトの指定は、先にhttpd.confで設定したエリアス指定をする。つまり"/Library/WebServer?/CGI-Executables/test.cgi" の替わりに、"/cgi-bin/test.cgi"とする。
- もし、SSIをperlのCGIスクリプトで利用するなら、perlのCGIスクリプト側で、" Print" 命令等で、変数をウェブに返すためには、 その前に、Print "Content=ype: text/plain\n\n"; 等を命令しておく必要がある。さらに呼び込むHTMLファイル側では、<!--#exec cgi="cgi-bin/test.cgi"-->というように、cgi指定を行う。
人気の5件
最新の6件
2021-05-17
2011-10-17
2011-12-07
2011-12-02
統計情報
counter: 2042,
today: 1,
yesterday: 0