ホームページ バックエンド開発 PHPチュートリアル FastCGI 不完全上級ガイド (PHP 版、Windows プラットフォーム)_PHP チュートリアル

FastCGI 不完全上級ガイド (PHP 版、Windows プラットフォーム)_PHP チュートリアル

Jul 13, 2016 am 10:52 AM
fastcgi php windows プラットホーム ガイド バージョン 質問 高度な



質問
FastCGI 不完全上級ガイド (PHP バージョン、Windows プラットフォーム)
解決策
1. FastCGIとは何ですか?
FastCGI は、言語に依存しないスケーラブルなアーキテクチャの CGI オープン拡張機能であり、その主な動作は CGI インタプリタ プロセスをメモリ内に保持することで、より高いパフォーマンスを実現します。ご存知のとおり、CGI インタープリタの繰り返しロードが CGI パフォーマンス低下の主な原因です。CGI インタープリタがメモリ内に残り、FastCGI プロセス マネージャーのスケジューリングを受け入れる場合、良好なパフォーマンス、スケーラビリティ、フェイルオーバー機能などが提供されます。
FastCGI の公式サイトは [url=http://www.fastcgi.com/] リンクには http://www.fastcgi.com[/url] とマークされています

FastCGI の動作原理は次のとおりです:
1. Web サーバーの起動時に FastCGI プロセス マネージャー (IIS ISAPI または Apache モジュール) をロードします。
2. FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタープリター プロセス (タスク マネージャーに表示される複数の php-cgi.exe) を開始し、Web サーバーからの接続を待ちます。
3. クライアント要求が Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタープリターを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi.exe に送信します。
4. FastCGI サブプロセスは処理を完了すると、標準出力とエラー情報を同じ接続から Web サーバーに返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャー (WebServer で実行されている) からの次の接続を待機して処理します。 通常の CGI モードでは、php-cgi.exe はここで終了します。

上記のケースでは、CGI が通常どれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての DLL 拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。

2. マルチスレッド CGI インタープリタの代わりに FastCGI を使用するのはなぜですか?
これは、次のような多くの考慮事項が原因である可能性があります:
1. Windows プラットフォームではマルチスレッド CGI インタープリタを安定して使用することはできません。IIS ISAPI メソッドであっても、APACHE モジュール メソッドであっても、一定期間実行すると必ずクラッシュします。不思議ですか?しかし、そのような状況は実際に存在します!
もちろん、マルチスレッド CGI インタプリタを安定して使用できる場合も多くありますが、FastCGI に切り替えると、Web ページにエラーが発生し、その原因が見つからない場合があります。このようなエラーの削減は大幅に増加します。これがなぜなのかはわかりませんが、結局のところ、独立したアドレス空間を持つ CGI インタプリタのほうが、共有アドレス空間形式よりももう少し安定しているのではないかと思います。
2.パフォーマンス!パフォーマンス?可能ですか、FastCGI はマルチスレッド CGI インタプリタよりも高速ですか?しかし、それが真実である場合もあり、Web サイトをテストすることによってのみ最終的な結論を下すことができます。理由を説明するのは難しいですが、Zend WinEnabler の時代に、当初 Zend は Windows プラットフォームで IIS ISAPI や Apache Module の代わりに FastCGI を使用することを推奨していましたが、現在 Zend はこの製品を製造していません。

3. FastCGI を使用しない理由
1. マルチプロセスは、マルチスレッドよりも多くのサーバー メモリを消費します。php-cgi.exe インタープリタは、プロセスごとに 7 ~ 25 メガバイトのメモリを消費します。この数値を 50 または 100 倍にして試してください。
2. パフォーマンス。確かに、マルチスレッド CGI インタプリタの方が高速な場合もあります (笑)。また、非常に安定している場合もあります。
3. CGI?すごく素朴な感じですね、笑

4. IIS FastCGI設定方法
1. まず、PHP 4.3.x 以降のバージョンが正しくインストールされていることを確認します。 PHP の以前のバージョンには、デフォルトでは FastCGI サポートが含まれていませんでした。以前のバージョンで作業したい場合は、再コンパイルする必要があります。 PHP は c:php にインストールされており、FastFCGI をサポートする実行ファイル名は php-cgi.exe であると仮定します。
注: Php.ini で cgi.force_redirect をオフにし、fastcgi.impersonate を有効にし、cgi.rfc2616_header を有効にすることをお勧めします

2. [url=http://www.caraveo.com/fastcgi/fastcgi-0.6.zip] リンクタグ http://www.caraveo.com/fastcgi/fastcgi-0.6.zip[/url] をダウンロードして配置しますisapi_fcgi.dll を c:php ディレクトリに解凍します (このディレクトリにある必要はありません。ここでは便宜上説明しているだけです)。

3. regedit.exe を使用して、次のレジストリ キーを作成します。
HKEY_LOCAL_MACHINE:SoftwareFASTCGI.php (必須)

4. この項目の下に次のキー値を作成します:
文字列型: AppPath、値は c:phpphp-cgi.exe (必須)
文字列型: BindPath、値は php-fcgi (必須)
以下はオプションの構成キーの値です:
DWORD タイプ: StartServers、起動時にデフォルトで開始されるインタープリターの数、デフォルト値は 5 です
DWORD タイプ: MaxServers、インタープリターの最大数、デフォルトは 25
DWORD型: IncrementServers、インタプリタが足りない場合のインクリメント数、デフォルトは2
DWORD タイプ: タイムアウト、増分インタープリター (StartServer の数を超える) 生存時間、デフォルト 600 (秒)
DWORD タイプ: ThreadPoolSize、スレッド プール サイズ、IIS でのみ有効、デフォルトは 10
DWORD タイプ: 偽装。1 の場合は IIS セキュリティ フラグを使用し、0 の場合はこの機能をオフにします。セキュリティ上の問題を心配しない場合は、オフにしないでください。デフォルト 1
DWORD タイプ: MaxPostData、投稿データの先読みバイト制限、デフォルトは 0
DWORD タイプ: BypassAuth、IIS でのみ有効で、isapi_fcgi.dll が IIS フィルターとして構成され、IIS が BASIC 認証を使用するように構成されている場合、すべての認証要求に IIS 匿名ユーザーの使用が強制されます。このオプションの目的は、スクリプトが独自のセキュリティ メカニズムを実装できるようにすることです。デフォルト 0
BINARY 型: CustomVars、追加の環境変数値、改行で区切られ、Null で終了

5. IIS6 の場合は、c:phpisapi_fcgi.dll を指す Web サービス拡張機能を追加して許可します。アプリケーションプールの「ワーカープロセスの最大数」は1のままにしてください。

6. アプリケーション拡張子のマッピング関係を追加します:
1) インターネット インフォメーション サービス マネージャーで、Web サイトまたはアプリケーションのルート ディレクトリを選択します。
2) ディレクトリのプロパティ ページを開き (右クリックして [プロパティ] を選択)、[ホーム ディレクトリ] を選択します。
3) 「設定」ボタンをクリックし、「マッピング」タブページを選択します。
4) [追加...] をクリックし、[実行可能ファイル] を c:phpisapi_fcgi.dll に設定し、拡張子を .php に設定します。必ず [ファイルが存在するかどうかを確認する] を選択して、[OK] を選択します。設定を保存します。
5) .php3 または .phtml 拡張子のサポートも追加します (オプション)。
6) 設定を保存し、IIS を再起動します。

7. 複数の Web ページを同時に要求してテストし、ページが完了した後も php-cgi.exe プロセスが実行され続け、終了しません。

5. Apacheの設定方法
1. まず、PHP 4.3.x 以降のバージョンが正しくインストールされていることを確認します。 PHP の以前のバージョンには、デフォルトでは FastCGI サポートが含まれていませんでした。以前のバージョンで作業したい場合は、再コンパイルする必要があります。 PHP は c:php にインストールされており、FastFCGI をサポートする実行ファイル名は php-cgi.exe であると仮定します。
注: Php.ini では、cgi.force_redirect をオンにし、fastcgi.impersonate をオフにし、cgi.rfc2616_headers をオフにすることをお勧めします。

2. [url=http://www.fastcgi.com/dist/mod_fastcgi-2.4.2-AP20.dll] リンク タグ http://www.fastcgi.com/dist/mod_fastcgi-2.4.2-AP20 をダウンロードします。 dll[/url] を作成し、Apache 2.x の Modules ディレクトリに置きます。

3. Apache 2.x が CGI モードで PHP を正常に実行できることを確認します。 httpd.conf には次の行が存在します:
ScriptAlias /php/ "c:/php/"
アクション application/x-httpd-php "/php/php-cgi.exe"
SetEnv PHPRC "C:/php"
AddType application/x-httpd-php .php

4. httpd.conf に
を追加します。 LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP20.dll
# 注: ここでの -processes 3 は、3 つの php-cgi.exe プロセスを開始することを意味します。
# FastCgiServer の詳細なパラメータについては、FastCGI のドキュメントを参照してください。
FastCgiServer "c:/php/php-cgi.exe" -processes 3

5. Apache を再起動し、上記のようにテストします。

6. 高度な構成
Apache 2 と IIS 6 がサーバー上で同時に実行されており、両方の Web サーバーが PHP アプリケーションを実行しているシナリオを想像してください。その場合、3 つの可能性があります:
A. PHP は、iis isapi および Apache モジュールを使用してインストールされます。どちらもマルチスレッド モードで実行されます。これは FastCGI とは関係ありません。
B. サーバーの 1 つは FastCGI を使用し、もう 1 つはマルチスレッドを使用します。これはうまくいきます。
C. どちらも FastCGI を使用しますが、これはしばしば異常です。一般的なパフォーマンスは次のとおりです:
2 つのサーバーはそれぞれいくつかの php-cgi.exe プロセスを開始しますが、一方のサーバーは php ページを解釈しないか、しばらくすると新しい php-cgi.exe プロセスを生成します (恐ろしいことです)。

なぜ?おそらく、上で使用した 2 つのもの (iis isapi と apache モジュール) の作成者は、これらを同時に使用することを考えていなかったからだと思います (笑)。よく考えてみると、Apache 2 と IIS 6 が php-cgi.exe インタープリターのバッチを共有できれば素晴らしいのですが、これによりメモリを無駄にせず、おそらくスケジュールの問題も発生しないでしょう。
研究とテストにより、このアイデアが実現可能であることが証明されました。ただし、Shane Caraveo は ISAPI DLL で外部 FastCGI サービスを使用する機能を提供していないため、このシナリオでは IIS は php-cgi.exe の起動と管理、およびこれらの IIS 管理サービスを使用するように Apache を構成することのみを担当できます。 php-cgi.exe プロセス。

設定方法:
1. 上記の 4 つの方法に従って IIS FastCGI を構成します。
2. 基本的に上記 5.4.5.4 の方法に従って Apache FastCGI を設定します。代わりに httpd.conf に
を追加します。 LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP20.dll
# 外部 FastCGI サーバーを使用するには、FastCGI のドキュメントを参照してください。
FastCgiExternalServer "c:/php/php-cgi.exe" -socket "php-fcgi"
注: -socket パラメーターの後の値は、2 つの FastCGI プロセス マネージャーが同じ名前付きパイプを使用して php-cgi.exe に接続するように、HKEY_LOCAL_MACHINE:SoftwareFASTCGI.php の BindPath の値と一致している必要があります。

注: この構成では、php-cgi.exe プロセスは、IIS の FastCGI プロセス マネージャーによってのみ管理されます。Apache のビジー リクエストによって、IIS の FastCGI がさらに php-cgi.exe プロセスをスケジュールすることはありません。したがって、IIS で FastCGI を構成する場合は、PHP インタープリターの数が不足しないように、StartServers の値を十分に大きくする必要があります。同じ問題は、IIS が閉じている場合、Apache が Php インタープリターを見つけることができないことです。これには注意してください。

ここから生じる疑問の 1 つは、「この時点で cgi.force_redirect、fastcgi.impersonate、および cgi.rfc2616_headers を php.ini でどのように設定する必要があるか」ということです。これは皆さんに考えてもらいます…笑

発生する可能性のあるもう 1 つの問題は、IIS が非常にアイドル状態になることです。しばらくすると、IIS によって起動された php-cgi.exe が終了し、Apache が Php を解釈できなくなります。この時点で、iis の Web サイトにアクセスすると、php-cgi.exe が再び起動します。 1 つの提案は、IIS 6 のプロセス プール管理を使用し、アプリケーション プールの「アイドル タイムアウト」をオフにし、「アプリケーション プール ID」の実行アカウントを Apache サービスの起動アカウントと一致するように設定することです。


ネチズンの提案:
コレクション...
ネチズンの提案:
お気に入り
ただし、FastCGI を使用すると、複数のマシンで同じようにクラッシュすることがよくあります。理由はわかりません。 ネチズンの提案:
公式ダウンロードアドレス: [url=http://www.fastcgi.com/dist/]リンクタグ http://www.fastcgi.com/dist/[/url]
バージョンは 2.4.6 にアップグレードされました。投稿者が提供したダウンロード アドレスは機能しません。この記事は比較的古いはずです。
[url=http://www.111cn.cn/html/30/n-34030.html]リンクタグ http://www.111cn.cn/html/30/n-34030.html[/url] この記事見てください
Windows で PHP を Apache 2.0.x で動作させるには 2 つの方法があります。 1 つは CGI 実行可能プログラムを使用し、もう 1 つは Apache モジュール用の DLL を使用します。
したがって、ある観点から見ると、Apache モジュール モードでインストールされた PHP4 は、CGI モードよりもセキュリティが高く、実行効率と速度が優れています。

質問: Apache モジュール モードでインストールされた PHP は fastcgi を使用できますか。つまり、どちらも Apache モジュール モードでロードされ、インストール後に通常どおり実行されますが、この 2 つの違いは何ですか?

FastCGI の Apache モジュールには、プロセスが壊れたり、ハングアップしても強制終了できないなど、いくつかの問題があり、非常に不安定になります。幸いなことに、FCGID のような解決策があり、FCGI を終了させることはありません。

http://fastcgi.coremail.cn/index.cn.htm

[ ]
ネチズンの提案:
使ったことない
ネチズンの提案:
マーク
ネチズンの提案:
それを取り去ってください、[img]http://www.111cn.cn/bbs/images/smilies/default/lol.gif[/img]
ネチズンの提案:
いいですね!
ネチズンの提案:
いいですね……つまり、FCGI よりも APACHE MODEL の方が優れています。 。 。 。 。 。 。 。 。 。 [img]http://www.111cn.cn/bbs/images/smilies/default/33.gif[/img] [img]http://www.111cn.cn/bbs/images/smilies/default/33 .gif[/img][img]http://www.111cn.cn/bbs/images/smilies/default/33.gif[/img]
ネチズンの提案:
建物の中で勉強



http://www.bkjia.com/PHPjc/632516.html

tru​​ehttp://www.bkjia.com/PHPjc/632516.html技術記事問題 FastCGI 不完全な上級ガイド (PHP バージョン、Windows プラットフォーム) 解決策 1. FastCGI とは何ですか? FastCGI は、言語に依存しないスケーラブルなアーキテクチャ CGI オープン拡張機能です...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 7にMySQLをインストールできますか? Windows 7にMySQLをインストールできますか? Apr 08, 2025 pm 03:21 PM

はい、MySQLはWindows 7にインストールできます。MicrosoftはWindows 7のサポートを停止しましたが、MySQLは引き続き互換性があります。ただし、インストールプロセス中に次のポイントに注意する必要があります。WindowsのMySQLインストーラーをダウンロードしてください。 MySQL(コミュニティまたはエンタープライズ)の適切なバージョンを選択します。インストールプロセス中に適切なインストールディレクトリと文字セットを選択します。ルートユーザーパスワードを設定し、適切に保ちます。テストのためにデータベースに接続します。 Windows 7の互換性とセキュリティの問題に注意してください。サポートされているオペレーティングシステムにアップグレードすることをお勧めします。

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 Apr 07, 2025 am 12:05 AM

PHPの厳格なタイプは、declare(strict_types = 1)を追加することで有効になります。ファイルの上部に。 1)関数パラメーターのタイプチェックと戻り値を強制して、暗黙の型変換を防ぎます。 2)厳格なタイプを使用すると、コードの信頼性と予測可能性を改善し、バグを減らし、保守性と読みやすさを向上させることができます。

特定のシステムバージョンでMySQLが報告したエラーのソリューション 特定のシステムバージョンでMySQLが報告したエラーのソリューション Apr 08, 2025 am 11:54 AM

MySQLのインストールエラーのソリューションは次のとおりです。1。システム環境を慎重に確認して、MySQL依存関係ライブラリの要件が満たされていることを確認します。異なるオペレーティングシステムとバージョンの要件は異なります。 2.エラーメッセージを慎重に読み取り、依存関係のインストールやSUDOコマンドの使用など、プロンプト(ライブラリファイルの欠落やアクセス許可など)に従って対応する測定値を取得します。 3.必要に応じて、ソースコードをインストールし、コンパイルログを慎重に確認してみてください。これには、一定量のLinuxの知識と経験が必要です。最終的に問題を解決する鍵は、システム環境とエラー情報を慎重に確認し、公式の文書を参照することです。

PHPの未来:適応と革新 PHPの未来:適応と革新 Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

MySQLはダウンロード後にインストールできません MySQLはダウンロード後にインストールできません Apr 08, 2025 am 11:24 AM

MySQLのインストール障害の主な理由は次のとおりです。1。許可の問題、管理者として実行するか、SUDOコマンドを使用する必要があります。 2。依存関係が欠落しており、関連する開発パッケージをインストールする必要があります。 3.ポート競合では、ポート3306を占めるプログラムを閉じるか、構成ファイルを変更する必要があります。 4.インストールパッケージが破損しているため、整合性をダウンロードして検証する必要があります。 5.環境変数は誤って構成されており、環境変数はオペレーティングシステムに従って正しく構成する必要があります。これらの問題を解決し、各ステップを慎重に確認して、MySQLを正常にインストールします。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

ターミナルからMySQLにアクセスできません ターミナルからMySQLにアクセスできません Apr 08, 2025 pm 04:57 PM

端末からmysqlにアクセスできない場合は、次の理由があります。MySQLサービスが実行されていません。接続コマンドエラー;許可が不十分です。ファイアウォールは接続をブロックします。 mysql構成ファイルエラー。

See all articles