(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
読みにくい形式でのみ同じことを参照してください:)
CGIとCLIの違いを理解するために必要なことはすべてわかっています。 さらに進みます。
手紙、手紙
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_phpとphp-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-cgiとpython-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の バイナリイメージを使用しました。