Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

Strict Standards: Only variables should be assigned by reference in /home/yamatt/www/wiki/inc/JpegMeta.php on line 999

目次へ

WEB編 CGIスクリプトの置き場所とURL

webfox3.jpg

前回の話をちょっと補足します。webブラウザがアクセスするURLと、実際のスクリプトの置き場所の関係などについて。まあそんなに難しいものではないし、大体直感的にわかってはいるでしょう。

URL ってのは大体三つに区切ることができます。

http://localhost/cgi-bin/dokoka/no/script.cgi
                      ↓
http:
     //localhost
                /cgi-bin/dokoka/no/script.cgi

って感じ。最初の http: が、スキームって呼ばれる部分で、webを使う限りは http: です。たまに、https: ってのもありますけど。(httpsは、通信内容が暗号化されるやつです。詳細はそのうち。)

次の //localhost が、ホストですね。「//」は飾りみたいなものなので除いて考えてもいいです。ここは、どのコンピュータにアクセスするんだ、というのを示す部分です。googleにアクセスしているときは、この部分が www.google.co.jp だったりしますね。

で、最後の /cgi-bin/… が、パスって呼ばれる部分です。webサーバーは、このパスの部分を手掛かりに、どのファイルをブラウザに渡そうか、またはどのCGIスクリプトを実行しようか、ということを決めます。

このパスの部分は、実際のファイルシステムに対応しているのが普通です。(ファイルシステムというのは、Windowsでいうフォルダとかファイルとかのことをカッコ良く呼んでいるだけですよ。)AN HTTPD のフォルダには、cgi-bin という名前のフォルダがありますね。だから、ここが /cgi-bin に対応するんです。その次に /dokoka というのがあったら、その下に dokoka という名前のフォルダがあって、さらにその中を見る、ということです。最終的に、ディレクトリをどんどん掘り進んでいって、no という名前のフォルダの中にある script.cgi という名前のファイルを実行するんだ、ということです。

  • まあ、パスと実際のファイルの場所が対応しているというのはあくまで原則で、実際のwebサーバーの設定では、「このパスのときだけは特別にここを見てね」とかいうことも多いです。必ずしも単純ではありません。
  • cgi-bin とかいうフォルダを辿るのはわかったけど、それらの起点はどこになるのか。これは、webサーバーの設定では、一般に「ドキュメントルート」として設定する部分です。AN HTTPD では、初期設定ではプログラムが含まれるそのフォルダそのものをドキュメントルートとみなすようですね。

今回のような場合では、最後は .cgi がつく部分で終わります。ちまたの色々なサイトを見ていて、URLの最後が .cgi だったら、たぶん間違いなくCGIスクリプトが動いているんだなと考えていいでしょう。(もっとも、偽装も可能ではありますけど。)でも、その他の多くのサイトでは、こういった拡張子みたいなものが見つからないものも多いですね。ちょっと前とくらべると、最近は特にそうです。それはそれで、まあ、こういう設定も可能なんです、というくらいの話です。

CGIかどうかを拡張子で判断するのではなく、特定のフォルダに入っているファイルは何でもCGIとみなす、という設定なんていうものもありえます。/cgi-bin なんてのはそういう設定に使われる典型例です。これだと、拡張子を付けないファイルを置いておいて実行させることもできます。(今やっている設定では、cgi-bin 下に置いて、さらに.cgi をつけること、なんていう決まりになっていますけどね。)

何しろ、URLとそれに対応するCGIスクリプトを見つけるのは原則それほど難しいことではありませんが、それはwebサーバーがどう設定されているかに大きく依存しますので、実際に稼働しているような環境に触れるときはあまり予断を持たないほうがよいです。Apacheなんて、とても柔軟な設定ができるようになっていますからね。(柔軟すぎて、あまりいじくりすぎると手に負えなくなるときもあるよ。余談です。)

ところで実は、世の中のすべてのWEBアプリケーションがCGIの仕組みで作られているわけではありません。この方法は、大量に実行されたときに性能が落ちるという特徴がありますので、特に大規模なサイトではCGIなんて今更使うことはないでしょう。他にもWEBアプリを実現するための仕組みってのはいくつもありますから、そういったものが使われるのです。でも決して馬鹿にしたものではなくて、基本的な概念はすべてCGIを書くなかで学ぶことができますよ。

 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki