Home > PHP

phpのcli版とcgi版の違い

2011.10.12 2:00
 PHPとは、WEBサーバーに付随した一種のプログラム言語なのですが、正確にいうとApacheというWEBサーバーのモジュールなんです。独立したプログラム言語ではありません。例えばC言語とかPerlとかRubyとかそういうプログラム言語は様々なマシンに独立してインストールできるし、それぞれの開発環境としていろいろな設定ができるようになっています。しかしPHPは独立した言語ではないのでApacheの上で走る言語なので一つのモジュールとして機能しているというのが本当の正しい解釈なのですが、それでもその機能はその他の言語に劣らずとも勝らないという具合で、現在に至ってはその普及の仕方も広範囲です。オライリー出版の「PHP」でも「未来のある言語です!」と豪語しています。
 しかし、Apacheのモジュールである筈なのに、PHP5(正確にはPHP4.xから...)端末でもって殆どシェルのような使い方ができるようになっています。これは、PHPというモジュールから一つ抽象度を上げてサーバースクリプトとして活躍できるということを意味しています。
 なので、PHPというものは、端末とWEBの両方から操作可能な言語になっています。これらの機能は同じものを提供しますが、設定を別々にすることができます。例えば、WEBではPOST、GET、COOKIEという値の受け渡しの方法がいくつかありますが、これらの設定はWEBサーバー(実際にクライアントが求める機能)と端末(主に開発者が利用する)という機能に若干の差を持たせたいものなのです。ある部分においてはカスタマイズしておいた方が開発が早く進むこともあります。
 というわけで、PHPのphp.iniという設定ファイルは2つあるんですね。すごいですね。
 Ubuntu9.10の環境では、
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini
という2つのファイルが存在しておりました。もし端末からとWEBからと同様の結果を得体場合は、これら2つのファイルを同様に設定しないといけません。

 さて、この端末から実行するPHPをcli版、WEBから実行するPHPをcgi版と一般に言われています。先ほどの説明にもあったように通常のプログラム言語というのは、cli版と似たような動作をします。しかしこのcli版は何が違うのかというと、
ヘッダーを出力しないかどうか
だけの話です。
 例えばPerlでは、HTMLに何某を書き出す際には、
print "Content-type: text/html\n\n";
なる定形のヘッダーを出力します。HTMLというプロトコルではヘッダーを出力してその中に様々なメタ情報を埋め込まないと読み取れないようになっています。一方、cli版は端末で操作するために返り値に対してヘッダーを出力する必要がありません。つまり、プレーンの文字列なり数値なりを出力すれば事足りるわけです。
 どちらのPHPが使われているかは、
# php -v
で確かめることができます。





プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer