インターネット活用塾 2.CGI


サーバー

    CGIはPerl以外にもC言語でも開発することができますが、ここではPerlによって開発されたCGIを説明します。
また、CGIがサーバー内でどのように処理されているか、CGIはどのような制限を受けているかについても概要を知っておく必要があります。
1.CGIが動作するサーバー
 サーバーにPerlがインストールされていればCGIは動作します。
 Perlがインストールされており、サーバーで独自CGIの使用が許可されていれば、CGIを使用することが出来ます。

 またPerlがどこにインストールされたのかによってCGIのPerlへのパスが異なります。
 Perlへのパスはサーバーによって異なりますが、大半は
 #!/usr/bin/perl
 又は
 #!/usr/local/bin/perl
 になっています。

 CGIの一行目にこのパスを記載することでCGIファイルを実行することができるようになります。
   2.CGIの実行過程
 Perlという言語で開発されたスクリプトを実行するまでにはサーバーサイドでいろいろな処理を行っています。スクリプトが実行されるまでの概要は以下のとおりです。

CGIの実行過程
PC
(ブラウザ)

CGIを実行
WEBサーバー
CGIファイルの1行目を読む
スクリプトをPerlに渡し、コンパイル
閲覧
実行結果
コンパイルしたソフト(perl.exe)を実行


3.CGIの制限
CGIはサーバーで動作しますので、サーバーの制限を受けます。

CGIは誰でも作成することができ、修正も容易です。
そのため、記述を誤ったり、処理が終了しないようなCGIを実行してしまう可能性があります。

このような誤った処理が行われたり、つまり、プログラムが処理した結果を他のユーザーと共有することができません。

(1)実行時間制限
 CGIが実行し続けるとサーバーダウンの原因になります。
CGIが一定時間動作し続けた場合、強制的に自動停止するよう制限されています。
制限時間はサーバー管理者によって様々ですが、数分程度に設定されている場合が多いようです。
また、制限時間は悪用される方も多いことから非公開となっている場合が多いです。

そのためCGIはこの制限時間以内で動作を完了する必要があります。
また、実行されていないCGIが突然処理を始めることはありませんので、自動実行も出来ません。

例えば、○月○日に自動的にメールを配信するといった処理はCGI単独では出来ません。
また、処理が完了するまでに数十分もかかるような処理も出来ません。

 このような処理を行いたい場合、独自にサーバーを構築するか専用サーバーを用意し、時間制限を長くすることで対応出来ます。(専用サーバーでも多数のCGIを同時に実行するとサーバーがダウンします。)

 また、自動実行したい時はCRONを使用するのが一般的です。


(2)メモリー使用制限
 CGIがメモリーを多く使用すると、サーバーの処理速度が低下します。
そのため、1つのCGIは○Mb以内で処理しなければならないという制限があります。

 CGIは「perl.exe」にコンパイルされて実行されますが、このコンパイル時に、スクリプトには無い実行用のソフトも添付されるため、CGIファイルが1kbであっても「perl.exe」は数百kbになっています。
 また、データファイルなどを開く場合、データを読み込む量に応じてメモリーを使用します。

 このようにCGIはメモリー制限の中で実行する必要があります。

 大きなファイルの操作を行いたい場合、やはり独自にサーバーを構築するか専用サーバーを用意し、メモリー使用制限を大きくすることで対応出来ます。
 ただし、サーバー全体のメモリー量の大半を使ってしまうと動作が遅くなってきますし、サーバーダウンの原因にもなりますのでご注意願います。



(2)その他の制限
 メールサーバーから1秒に1通以上メールを配信できないなど、サーバーによって様々な制限があります。
CGIはサーバー内で実行されますので、これらの制限の中で動作するようになります。




© Copy Right 2001 Chama.ne.jp