PHP カーネルを理解する: ライフサイクルと動作モード_PHP チュートリアル
PHP カーネルを理解する: ライフサイクルと動作モード
PHP実行モード
1) CGI (共通ゲートウェイインターフェース)
2) FastCGI (常駐 CGI/ロングライブ CGI)
3) CLI (コマンドライン実行/コマンドラインインターフェイス)
4) Webモジュールモード(ApacheなどのWebサーバーが動作するモード)
5) ISAPI (インターネット サーバー アプリケーション プログラム インターフェイス)
注: PHP5.3 以降、PHP には ISAPI モードがなくなりました
CGI はプロトコルであり、プロセスなどとは何の関係もありません。では、fastcgi とは何でしょうか? Fastcgi は、CGI プログラムのパフォーマンスを向上させるために使用されます。
PHP での CGI 実装
PHP の CGI 実装の本質は、ソケット プログラミングを通じて TCP または UDP プロトコル サーバーを実装することであり、開始時に TCP/UDP プロトコル サーバーのソケット モニターを作成し、関連する処理リクエストを受け取ります。これは単なるリクエストの処理であり、モジュールの初期化、sapi の初期化、モジュールのクローズ、sapi のクローズなどを追加すると、CGI のライフサイクル全体が構成されます。
CGI
CGI の正式名は「Common Gateway Interface」で、クライアントが Web ブラウザから Web サーバー上で実行されているプログラムにデータを要求できるようにします。
CGI は、クライアントとこのプログラムの間でデータを転送するための標準を記述します。
CGI の目的の 1 つは、どの言語にも依存しないことなので、言語に標準の入力、出力、および環境変数がある限り、CGI はどの言語でも作成できます。 php、perl、tclなど
CGI はすでに古いモデルであり、近年ではほとんど使用されていません。
ユーザーリクエストがあるたびに、最初に CGI サブプロセスが作成され、次にリクエストが処理され、処理後にサブプロセスが終了します。これが Fork-And-Execute モードです。 ユーザーリクエストの数が非常に多い場合、メモリやCPU時間などのシステムリソースが大量に占有され、パフォーマンスが低下します。 したがって、CGI を使用するサーバーには、接続要求と同じ数の CGI サブプロセスが存在することになり、サブプロセスの繰り返しロードが CGI パフォーマンスを低下させる主な原因となります。Web サーバーが /index.php のリクエストを受信すると、対応する CGI プログラム (PHP パーサー) が開始されます。次に、PHP パーサーは php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、CGI で指定された形式で処理結果を返し、プロセスを終了します。その後、Web サーバーは結果をブラウザーに返します。
高速CGI
fast-cgi は CGI のアップグレード版です。FastCGI は、有効化されている限り、毎回実行することができます (これが最も CGI です)。 fork-and-execute モードを批判しました)。
FastCGI の仕組み
FastCGI プロセス マネージャーは、Web サーバーの起動時にロードされます [PHP の FastCGI プロセス マネージャーは PHP-FPM (php-FastCGI プロセス マネージャー)] (IIS ISAPI または Apache モジュール)。FastCGI プロセス マネージャーは、それ自体を初期化し、複数の CGI インタープリター プロセスを開始します。複数の php-cgi.exe または php-cig が表示されます)、Web サーバーからの接続を待ちます。クライアント要求が Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタープリターを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi に送信します。FastCGI サブプロセスが処理を完了すると、同じ接続から標準出力とエラー情報が Web サーバーに返されます。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャー (WebServer で実行されている) からの次の接続を待機して処理します。 通常の CGI モードでは、php-cgi.exe はここで終了します。 CGI モードでは、CGI が通常どれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての DLL 拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。注: PHP の FastCGI プロセス マネージャーは PHP-FPM (PHP-FastCGI Process Manager) です
メリット
安定性の観点から、FastCGI は独立したプロセス プールを使用して CGI を実行します。単一のプロセスが停止した場合、システムはそれを簡単に破棄し、セキュリティの観点から新しいプロセスを再割り当てします。手術。 FastCGI はホスト サーバーから完全に独立しており、FastCGI がどのようにダウンしてもサーバーはダウンしません。FastCGI は動的ロジックの処理をサーバーから分離し、負荷の高い IO 処理を実行します。このように、通常の動的 Web ページでは、論理的な処理の一部しかなく、大量の静止画像などをホスト サーバーが思い切って IO できます。足りない
マルチプロセスであるため、CGI マルチスレッドよりも多くのサーバー メモリを消費します。PHP-CGI インタープリタは、プロセスごとに 7 ~ 25 メガバイトのメモリを消費し、大量のメモリを取得します。
Nginx 0.8.46+PHP 5.2.14 (FastCGI) サーバーには 30,000 の同時接続があり、開始された 10 個の Nginx プロセスは 150M のメモリ (15M*10=150M) を消費し、開始された 64 個の php-cgi プロセスは 1280M のメモリ (20M*64) を消費します。 =1280M)、システム自体が消費するメモリを加えた合計メモリ消費量は 2GB 未満です。サーバーのメモリが小さい場合は、25 個の php-cgi プロセスしか開くことができないため、php-cgi によって消費される合計メモリはわずか 500M になります。
上記のデータは、Apache (バージョン 6) よりも 10 倍優れた Web サーバーを構築するための Nginx 0.8.x + PHP 5.2.13 (FastCGI) からの抜粋です
クリ
PHP の開始フェーズと終了フェーズPHP-CLIとはPHP Command Line Interfaceの略で、Webサーバー上で動作するPHP環境(PHP-CGI、ISAPIなど)とは異なり、コマンドライン上でPHPを実行するためのインターフェースです。
つまり、PHP はフロントエンドの Web ページを作成できるだけでなく、バックエンド プログラムの作成にも使用できます。 PHP CLI シェル スクリプトは PHP のすべての利点に適用され、スクリプトまたはサーバー側システムの作成、または Windows と Linux の両方で PHP-CLI モードの作成が可能になります。Linux では、PHP がインストールした拡張機能を確認するために「php -m」をよく使用します。これは、PHP コマンドライン実行モードです。
PHP は実行開始後に 2 つの主なフェーズを経ます。リクエストを処理する前の開始フェーズとリクエストの後の終了フェーズです。
開始フェーズ
モジュール初期化フェーズMINIT
SAPI ライフサイクル全体 (Apache の開始後のライフサイクル全体、またはコマンドライン プログラムの実行プロセス全体など) で、このプロセスは 1 回だけ実行されます。モジュールアクティブ化フェーズRINITApache を起動すると、PHP インタープリターも起動します
PHP は各拡張機能 (モジュール) の MINIT メソッドを呼び出し、それによってこれらの拡張機能を使用可能な状態に切り替えます。
リーリー
このプロセスはリクエストフェーズで発生します。たとえば、URL を通じてページがリクエストされた場合、モジュールのアクティブ化は各リクエスト (RINIT リクエストの開始) の前に実行されます。リクエストが到着すると、SAPI レイヤーは制御を PHP レイヤーに渡し、PHP はこのリクエストのスクリプトを実行するために必要な環境変数を初期化します
この段階で、各モジュールはいくつかの関連操作も実行できます。モジュールの RINIT 関数は、プログラムの実行前に自動的に開始される準備プロセスと見なすことができます。
たとえば、セッション モジュールの RINIT が php.ini で有効になっている場合、モジュールの RINIT を呼び出すと、$_SESSION 変数が初期化され、関連するコンテンツが読み込まれます。 PHP はすべてのモジュールの RINIT 関数を呼び出します。これは「初期化要求」です。エンドステージ
リクエストが処理された後、通常、スクリプトが最後まで実行されるか、exit() または die() 関数を呼び出すと、PHP は開始フェーズに対応して終了フェーズに入ります。終了フェーズも 2 つのリンクに分割され、1 つはリクエスト終了後 (RSHUWDOWN)、もう 1 つは SAPI ライフサイクルの終了時 (MSHUTDOWN) です。
リクエスト終了後(RSHUWDOWN)
リクエストが処理されると終了ステージに入り、PHP はクリーンアッププロセスを開始します。
各モジュールの RSHUTDOWN メソッドを順番に呼び出します。RSHUTDOWN は、プログラムの実行中に生成されたシンボル テーブルをクリアする、つまり各変数の unset 関数を呼び出すために使用されます。
SAPI ライフサイクルの終了時 (MSHUTDOWN)
ついに、すべてのリクエストが処理されました
SAPIも閉店準備中ですPHP は各拡張機能の MSHUTDOWN メソッドを呼び出します
PHP のライフサイクル全体が終了しました。 「開始ステップ 1」と「終了ステップ 2」は、サーバーからの要求がない場合にのみ実行されることに注意してください。
これは、各モジュールがメモリを解放する最後の機会です。
(これは CGI や CLI などの SAPI の場合であり、「次のリクエスト」がないため、SAPI はすぐに終了し始めます。)
PHP の実行時に SAPI が通過するいくつかの段階
モジュール初期化
リーリーリクエスト初期化フェーズ (Request init)
リーリー PHPスクリプトを実行するシャットダウンをリクエスト
リーリーモジュールのシャットダウン
リーリー単一プロセス SAPI ライフサイクル
リーリー
多进程SAPI生命周期
通常PHP是编译为apache的一个模块来处理PHP请求。 Apache一般会采用多进程模式, Apache启动后会fork出多个子进程,每个进程的内存空间独立,每个子进程都会经过开始和结束环节 每个进程的开始阶段只在进程fork出来以来后进行,在整个进程的生命周期内可能会处理多个请求。 只有在Apache关闭或者进程被结束之后才会进行关闭阶段,在这两个阶段之间会随着每个请求重复请求开始-请求关闭的环节。
多线程的SAPI生命周期
<code>多线程模式和多进程中的某个进程类似,不同的是在整个进程的生命周期内会并行的重复着 请求开始-请求关闭的环节. </code>
在这种模式下,只有一个服务器进程在运行着,但会同时运行很多线程,这样可以减少一些资源开销,向Module init和Module shutdown就只需要运行一遍就行了,一些全局变量也只需要初始化一次,因为线程独具的特质,使得各个请求之间方便的共享一些数据成为可能。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











WeChat のサイレント モードとはどういう意味ですか? 現在、スマートフォンの人気とモバイル インターネットの急速な発展により、ソーシャル メディア プラットフォームは人々の日常生活に欠かせないものとなっています。 WeChat は中国で最も人気のあるソーシャル メディア プラットフォームの 1 つであり、ほとんどの人が WeChat アカウントを持っています。私たちは WeChat を通じて友人、家族、同僚とリアルタイムでコミュニケーションを取り、生活の瞬間を共有し、お互いの現在の状況を理解することができます。しかし、この時代では、特に集中力や集中力が必要な人々にとって、情報過多やプライバシー漏洩の問題にも必然的に直面します。

iOS デバイスでは、ヘルスケア アプリを使用して睡眠パターンなどを追跡できるようになってきました。でも、寝ているときに通知が来ると煩わしくありませんか?これらの通知は無関係である可能性があるため、その過程で睡眠パターンが混乱します。おやすみモードは、睡眠中に気を散らすのを避けるための優れた方法ですが、夜間に受信する重要な電話やメッセージを見逃す可能性があります。ありがたいことに、ここでスリープモードが登場します。それについてさらに詳しく、そしてiPhoneでそれを使用する方法を学びましょう。 iPhone ではスリープ モードはどのような役割を果たしますか? スリープ モードは iOS 専用のフォーカス モードで、「ヘルスケア」アプリの睡眠スケジュールに基づいて自動的に有効になります。アラームを設定するのに役立ちます。

Linux カーネルを Ubuntu22.04 にインストールするには、次の手順に従います。 システムを更新します。 まず、Ubuntu システムが最新であることを確認し、次のコマンドを実行してシステム パッケージを更新します。 sudoaptupdatesudoaptupgrade カーネル ファイルをダウンロードします。公式 Linux カーネル Web サイト () から必要なカーネル バージョンをダウンロードします。安定したバージョンを選択し、ソース コード ファイル (.tar.gz または .tar.xz 拡張子付き) をダウンロードします。例: wget ファイルを解凍します。次のコマンドを使用して、ダウンロードしたカーネル ソース コード ファイルを解凍します: tar-xflinux-5.14 .tar.xz ビルドの依存関係をインストールする: カーネルのビルドに必要なツールと依存関係をインストールします。実行する

おやすみモードで電話に応答することさえ、非常に煩わしい経験になる可能性があります。名前が示すように、おやすみモードでは、すべての着信通知と電子メール、メッセージなどからの警告がオフになります。これらのソリューション セットに従って問題を修正できます。解決策 1 – フォーカス モードを有効にする 携帯電話でフォーカス モードを有効にします。ステップ 1 – 上から下にスワイプしてコントロール センターにアクセスします。ステップ 2 – 次に、携帯電話の「フォーカスモード」を有効にします。フォーカス モードでは、電話機のサイレント モードが有効になります。携帯電話に着信通知が表示されることはありません。解決策 2 – フォーカス モード設定を変更する フォーカス モード設定に問題がある場合は、修正する必要があります。ステップ 1 – iPhone の設定ウィンドウを開きます。ステップ 2 – 次に、フォーカス モード設定をオンにします

Linux のカーネル起動シーケンスの変更 1. RHEL6/CentOS6 のカーネル起動シーケンスの変更 /etc/grub.conf ファイルを確認して、システムのカーネルの状況を確認します。ドキュメントによると、システムには 2.6.32-573.18.1.el6.x86_64 と 2.6.32-431.23.3.el6.x86_64 という 2 つのカーネル バージョンがあります。カーネルのバージョンは上から下にリストされています。 grub.conf ファイルでは、デフォルトのパラメータを調整することで、システムの起動時に使用するカーネルのバージョンを決定できます。デフォルト値は 0 で、システムが最新のカーネル バージョンを起動することを意味します。値 0 は、grub.conf ファイルにリストされている最初のコンテンツに対応します。

epc+o モデルとは、設計、調達などを統合した総合請負の枠組みを指します。これは、epc から派生した一部の運用上のリンクであり、建設期間中、ゼネコンは従来の意味での設計業務を請け負うだけでなく、さらに、運用期間中はすべてのメンテナンス作業も実行する必要があります。このモデルは、多くのプロジェクトの運用効率を大幅に向上させ、運用コストを迅速に削減できます。

S モードの Windows は、Microsoft Store からのアプリのインストールのみを許可することで、セキュリティとパフォーマンスが強化されるように設計されています。この機能はマルウェアを防止し、安全なコンピューティング環境を確保するのに役立ちますが、Microsoft Store 以外のソースからアプリケーションをインストールしたいユーザーが制限される可能性があります。このような状況に陥り、Windows 10/11 で S モードから切り替える方法を自問し続けている場合は、2 つの異なるモードを使用して Windows 10/11 で S モードから切り替える方法を説明するので、ここは正しい場所に来ています。 S モードに移行すると、どこからでもアプリを自由にインストールできるようになります。 Windows で S モードを終了する方法を学習します。

iPhone 15 Pro および iPhone 15 Pro Max モデルで、Apple は、音量ボタンの上にある従来の着信音/サイレント スイッチに代わる、物理的にプログラム可能なアクション ボタンを導入しました。アクション ボタンは、いくつかの異なる機能を実行するようにプログラムできますが、サイレント モードと着信モードを切り替える機能はなくなっていません。デフォルトでは、アクション ボタンを長押しするとデバイスが沈黙し、ボタンの触覚フィードバックが 3 回脈動します。どちらの iPhone 15 Pro モデルでも、ステータス バーの時刻の横に取り消し線のベル記号が表示され、サイレント/サイレント モードが有効になっていることを示します。また、アクション ボタンを再度長押ししてデバイスのミュートを解除するまで、この状態が維持されます。 iPhoneをマナーモードにしたい場合
