PHP には 4 つの動作モードがあります:
1) CGI Common Gateway Interface)
2) fast-cgi Long-live CGI
3) cli コマンドライン操作 (Command) Line Interface)
4) Web モジュールモード (モジュール) apacheなどのWebサーバーで動作するモード)
1.CGI(Common Gateway Interface)
CGIとはCommon Gateway Interface(共通ゲートウェイインターフェース)のことで、平たく言えばブリッジのようなものです。 WebページとWEBサーバー上の実行プログラムを接続し、HTMLで受け取った命令をサーバーの実行プログラムに渡し、サーバーの実行プログラムの結果をHTMLページに返します。 CGI は非常にクロスプラットフォームであり、ほぼすべてのオペレーティング システムに実装できます。 CGI はすでに古いモデルであり、近年ではほとんど使用されていません。
ユーザーリクエストがあるたびに、最初に CGI サブプロセスが作成され、次にリクエストが処理され、処理後にサブプロセスが終了します。これが fork-and-execute モードです。 ユーザーリクエストの数が非常に多い場合、メモリやCPU時間などのシステムリソースが大量に占有され、パフォーマンスが低下します。したがって、CGI を使用するサーバーには、接続要求と同じ数の CGI サブプロセスが存在することになり、サブプロセスの繰り返しロードが CGI パフォーマンスを低下させる主な原因となります。
PHP をサーバー側ソフトウェア (Apache など) に埋め込んでモジュールとしてインストールしたくない場合は、CGI モードでインストールすることを選択できます。または、PHP とさまざまな CGI ラッパーを使用して、コード用に安全な chroot および setuid 環境を作成します。このようにして、各クライアントは php ファイルをリクエストし、Web サーバーは php.exe (Win では php.exe、Linux では php) を呼び出してファイルを解釈し、解釈結果を次の形式でクライアントに返します。ウェブページ。 このインストール方法では通常、PHP 実行可能ファイルが Web サーバーの cgi-bin ディレクトリにインストールされます。 CERT 勧告 CA-96.11 では、cgi-bin ディレクトリにインタプリタを配置しないことが推奨されています。
この方法の利点は、Web サーバーを特定のプログラム処理から分離し、明確な構造と強力な制御性を備えていることですが、同時に欠点は、アクセス需要が高い場合に CGI プロセスのフォークが非常に大きくなるということです。サーバーの負担が大きいため、何百もの同時リクエストが原因でサーバーが何百ものプロセスをフォークすることを想像してください。これが、cgi が常にパフォーマンスが低く、リソース消費量が多いことで悪名が高い理由です。
CGIモードのインストール:
CGIはすでに古いモードであり、近年ではほとんど使用されていないため、テストのみを目的としています。
CGI モードをインストールするには、
LoadModule php5_module modules/libphp5.so の行をコメントアウトする必要があります。この行をコメントしない場合は、ハンドラー モードまで進みます。それがモジュールモードです。
次に httpd.conf にアクションを追加します。
Action application/x-httpd-php /cgi-bin/
/cgi-bin/ ディレクトリで php-cgi が見つからない場合は、php の bin から 1 つを cp できます。
次に、Apache を再起動し、テスト ページを開くと、サーバー API が CGI/FastCGI に変更されることを確認します。説明: CGI モードに正常に切り替えられました。
問題:
1) /usr/local/httpd/cgi-bin/ で CGI プログラムを実行できず、403 または 500 エラーが発生した場合
Apache エラー ログを開くと、次のプロンプトが表示されます。許可が拒否されました: exec of
Linux コンテキスト ファイルの定義に従って、/usr/local/httpd/cgi-bin/ が httpd_sys_script_exec_t 属性である必要があります。 ls -Z で確認してください。そうでない場合は、次のコマンドで変更します。 chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*.cgi 仮想ホスト内の cgi の場合は、質問 2 を参照して使用できるようにしてください。その後、chcon を通じて CGI ファイルのコンテキストを
httpd_sys_script_exec_t に設定します。 chcon -R -t httpd_sys_script_exec_t cgi-bin/
2) Apache エラー メッセージ: .... スクリプトからの不正なヘッダー =
プロンプトによると、ファイルの最初の文を確認してください。出力は次のようになります。
Content-type: text/plain; charset=iso-8859-1nn
または Content-type: text/htmlnn
注: Content-type を宣言した後に 2 つの空白行が出力される必要があります。
3) Apache エラー メッセージ: 実行形式エラー
スクリプト インタプリタ設定エラー。スクリプトの最初の行は「#!Interpreter Path」の形式にする必要があります。PERL プログラムの場合、一般的なパスは #!/usr/bin/perl または # です。 !/usr/local/bin /perl PHP プログラムの場合、インタープリターのパスを入力する必要はなく、システムが自動的に PHP を見つけます。
2. Fastcgi モード
fast-cgi は、長寿命 CGI のようなもので、有効化されている限り常に実行されるわけではありません。一度フォークするのに時間がかかります (これは CGI の最も批判されているフォーク実行モードです)。
FastCGI の動作原理は次のとおりです:
(1) Web サーバーが起動すると、FastCGI プロセス マネージャーがロードされます [PHP の FastCGI プロセス マネージャーは PHP-FPM (php-FastCGI プロセス マネージャー)] (IIS ISAPI または Apache モジュール)。
(2) FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタープリター プロセス (タスク マネージャーに表示される複数の php-cgi.exe) を開始し、Web サーバーからの接続を待ちます。
(3). クライアントのリクエストが Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタープリターを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi に送信します。
(4). FastCGI サブプロセスは処理が完了すると、同じ接続から Web サーバーに標準出力とエラー情報を返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャー (WebServer で実行されている) からの次の接続を待機して処理します。通常の CGI モードでは、php-cgi.exe はここで終了します。
CGI モードでは、CGI が通常どれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての DLL 拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。
Fastcgi の利点:
1) 安定性の観点から、fastcgi は、単一のプロセスが停止した場合に、それを簡単に破棄し、実行する新しいプロセスを再割り当てできます
2。 ) セキュリティの観点から、Fastcgi はホスト サーバーから完全に独立しています。
3) パフォーマンスの観点からは、Fastcgi は動的ロジックを処理します。サーバーでは、負荷の高い IO 処理は引き続きホスト サーバーに任せられるため、ホスト サーバーは通常の動的 Web ページの場合、論理処理の一部のみが存在し、静的処理が多数存在します。 FastCGI の欠点 : 利点を説明した後、欠点について説明します。実際に使用したところ、FastCGI モードは実稼働環境のサーバーに適しています。ただし、開発マシンには適していません。 Zend Studio を使用してプログラムをデバッグすると、FastCGI は PHP プロセスがタイムアウトしたと判断し、ページ上で 500 エラーを返すためです。これは非常に面倒だったので、開発マシンで ISAPI モードに戻しました。
fastcgiモードをインストールします:
Apacheのインストールパスは/usr/local/httpd/ですphpのインストールパスは/usr/local/php/
1) mod_fastcgiをインストールします
wget http:// www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gztar zxvf mod_fastcgi-2.4.6.tar.gz
cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile
vi Makefile、編集 top_dir = / usr/local/ httpd
make
make install
インストール後、
/usr/local/httpd/modules/ にはもう 1 つのファイルが追加されます: mod_fcgid.so
2) php
./configure --prefix=/usr を再コンパイルします/local/ php --enable-fastcgi --enable-force-cgi-redirect --disable-climake
make install
この方法でコンパイルすると、PHP bin ディレクトリ内の php-cgi が fastcgi モードの php インタープリターになります。
インストール 成功したら、
php -v を実行して
PHP 5.3.2 (cgi-fcgi) を出力します
ここでの出力には cgi-fcgi が含まれます
注:
1 を追加することはできません。 apxs=/usr/ local/httpd/bin/apxs それ以外の場合、インストールされた php 実行ファイルは cli モードになります2 コンパイル時に --disable-cli を追加しない場合は、PHP 5.3.2 (cli)
3) 設定apache
apache を設定する必要があります fastcgi モードで php プログラムを実行します
vi httpd.conf
仮想マシンを使用して実装します:
www.bkjia.com