CLI、CGI、MODについて知りたいと思っていたが、質問するのは恥ずかしかった

...カンフー、空手、テコンドー、その他多くの恐ろしい言葉を知っています!

(c)冗談







最近、初心者の管理者からよく尋ねられ始めました。「php-cgi、php-cli、mod_phpパッケージの違いは何ですか? そして、たとえば、Pythonの場合はmod_pythonですが、python-cgiはありませんか?”

最初は面白かったが、その後、LAMP(リンク)および同様のサーバーを管理するすべての人にこの質問が少なくとも一度は生じることが明らかになった。

記事はfelvisとの会話に基づいて書かれたので、プレゼンテーションの自由をおfor びします。



プロセスに関するいくつかの言葉



システムで実行されている各プロセスには、環境などのゴミがあります- 環境 -環境変数によって記述されます。 coreutilsパッケージがインストールされたLinuxライクなシステムでは、 env



コマンドで環境を表示できます。 任意のプロセスの環境は、特別な/proc



ファイルシステムを介して表示できます。

cat /proc/$PID/environ ( $PID - ) .







別の例では、envコマンドの代わりに、次を実行できます。

cat /proc/self/environ







読みにくい形式でのみ同じことを参照してください:)

CGICLIの違いを理解するために必要なことはすべてわかっています。 さらに進みます。



手紙、手紙



PHPの場合、システムにはmod_php、php-cgi、およびphp_cliのパッケージがあります。

違いは何ですか?

mod_php -so-box。これは、Apacheの起動時に追加でプルアップされます。 ブラウザからphpスクリプトにアクセスすると、 httpdプロセス環境でスクリプトが実行されます。

php-cgi-さらに、Apacheの起動時および呼び出されるたびに何も起動しません
  http://www.domain.com/script.php 
適切に構成されたWebサーバーが/ usr / bin / php-cgi /path/to/script.phpを取得し、新しいプロセスが分岐され、スクリプトがphp-cgi環境で既に実行されています(httpdプロセス環境とは大きく異なる場合があります)。

mod_phpphp-cgiの共通点は、Webサーバーによって呼び出されることです。

異なる点は、スクリプトが異なる環境で実行されることです(たとえば、システム内の特定のディレクトリにアクセスできないようにphp-cgiを構成したり、一般的にすべてのスクリプトがウェイクアップで実行されます-オプションは海です。一般的に、 php- cgiは、phpスクリプトを処理するためのより安全な方法です。

php- cli-通常、このbinarは、コンソールからphpスクリプトを実行する必要があるときに、ユーザーによって直接呼び出されます。 したがって、スクリプトが実行される環境はユーザー定義(envで表示される環境)です。

コンソールからブラウザを介して、このようなスクリプトを実行してみてください。

<? php print $ _ENV [ 'PWD' ] ? >



* This source code was highlighted with Source Code Highlighter .






意味を理解します。



ところで、まさに上記のために、同じスクリプトはコンソールやブラウザとは異なる動作をします。 開発者、デバッグ時には注意してください!



パッケージについて少し



Pythonの場合。 mod_pythonがあるのにpython-cgipython-cliがないのはなぜですか?

それは簡単です、アナロジーを描きましょう:

  mod_php-> mod_python
 php-cli-> / usr / bin / python
 php-cgi-mod_cgiを使用したPython 


CGIは(Apacheだけでなく)Webサーバーの共通ゲートウェイインターフェイスであることを個別に明確にする必要があります。 つまり、CGIは、Webページを形成する任意のバイナリ(Cプログラムが記述されていても-気にしない)を実行できる単なるテクノロジーです。 Apacheでは、この技術はmod_cgiによって実装されます。このモジュールを介して、Apacheはシェバン #!/ Usr / bin / pythonまたは#!/ Usr / bin / phpが記述されたスクリプトをプルし、スクリプトが実行されます。

mod_cgiの主な欠点は、スクリプトの実行速度です。これが、PHP、Python、シェルスクリプトを解釈するApache用の個別のモジュールを記述する理由です。これは高速です。

もちろんmod_fcgiもあります 。これはmod_cgiよりもはるかに高速ですが、 mod_fcgiの説明はこの記事の範囲外です。

_________

テキストはHabraで準備されます

テキストは、 Brian "Visual Paradox" Kissingerの バイナリイメージを使用しました。



All Articles