ホームページ  >  記事  >  バックエンド開発  >  phpの仕組みを詳しく解説

phpの仕組みを詳しく解説

小云云
小云云オリジナル
2018-03-15 13:05:0914874ブラウズ

1. すべての PHP アプリケーションは、WEB サーバー (IIS、Nginx、Apache など) と PHP エンジン プログラムの解釈と実行を通じて完成します。 作業プロセス:

(1) ユーザーがブラウザのアドレスにアクセスする PHP を入力するとき。次に、ページ ファイル名によって Web リクエストがトリガーされ、そのリクエストが WEB サーバーに送信されます。

(2) WEBサーバーはこのリクエストを受け付け、サフィックスに基づいてPHPリクエストであると判断し、ユーザーがアクセスしたいPHPアプリケーションをハードディスクやメモリから呼び出し、PHPエンジンに送信します。プログラム。

(3) PHPエンジンプログラムは、WEBサーバーから送信されたファイルを最初から最後までスキャンし、コマンドに従ってバックグラウンドで読み込み、データを処理し、対応するHTMLページを動的に生成します。

(4) PHP エンジンは HTML ページを生成し、WEB サーバーに返します。次に、WEB サーバーは HTML ページをクライアントのブラウザーに返します。

2. PHP 動作モード:

1) CGI 共通ゲートウェイインターフェイス)

2) fast-cgi 常駐 (ロングライブ) CGI

3) cli コマンドライン操作 (コマンドライン) インターフェイス)

4) Webモジュールモード(ApacheなどのWebサーバーで動作するモジュールモード)

補足説明:

1) モジュールモード:

モジュールモードはmod_php5モジュールの形で統合されます この時、mod_php5モジュールの役割を受け取ります。 Apache によって渡された PHP ファイル リクエストは、これらのリクエストを処理し、処理された結果を Apache に返します。 Apache が起動する前に設定ファイルで PHP モジュール (mod_php5) を設定すると、PHP モジュールは apache2 の ap_hook_post_config フックを登録し、Apache が PHP ファイルに対するリクエストの受け入れを開始したときにこのモジュールを起動します。

この起動時のロード方法に加えて、Apache のモジュールは実行時に動的にロードすることができます。これは、ソース コードを再コンパイルすることなく、またはサーバーをまったく停止せずにサーバーの機能を拡張できることを意味します。必要なのは、シグナル HUP または AP_SIG_GRACEFUL をサーバーに送信して、モジュールをリロードするようにサーバーに通知することだけです。ただし、動的にロードする前に、モジュールをダイナミック リンク ライブラリにコンパイルする必要があります。このときのダイナミックロードとは、ダイナミックリンクライブラリをロードすることです。 Apache のダイナミック リンク ライブラリの処理は mod_so モジュールによって完了するため、mod_so モジュールは動的にロードできず、Apache のコアに静的にコンパイルすることしかできません。これは、Apache とともに起動されることを意味します。

2) Nginx での PHP 実行モード (Nginx+ PHP-FPM)

詳細については、nginx + php の原理セクションを参照してください

補足:

1. cgi、fast-cgi プロトコル

cgi の歴史

CGI の正式名は「Common Gateway Interface」です。これは、HTTP サーバーが自分のマシンまたは他のマシン上のプログラムと「通信」するために使用するツールです。プログラムはネットワーク サーバー上で実行する必要があります。 CGI は、標準入力、出力、および環境変数を備えている言語であれば、どの言語でも作成できます。 php、perl、tclなど。

初期のウェブサーバーはhtmlなどの静的ファイルのみを処理していましたが、テクノロジーの発展に伴い、phpなどの動的言語が登場しました。ウェブサーバーがそれを処理できません。どうすればよいですか?次に、PHP インタープリターに処理させます。しかし、php インタープリターはどのようにして Web サーバーと通信するのでしょうか?

異なる言語インタプリタ(php、pythonインタプリタなど)とウェブサーバー間の通信の問題を解決するために、cgiプロトコルが登場しました。 CGI プロトコルに従ってプログラムを作成する限り、言語インタープリターと Web サーバー間の通信を実現できます。 php-cgiプログラムなど。

fast-cgi の改良点

cgi プロトコルにより、php インタプリタとウェブサーバー間の通信の問題が解決され、ウェブサーバーは最終的に動的言語を処理できるようになりました。ただし、Web サーバーはリクエストを受信するたびに CGI プロセスをフォークし、リクエストの完了後にプロセスを強制終了します。リクエストが 10,000 件ある場合、php-cgi プロセスを 10,000 回フォークして強制終了する必要があります。それが資源の無駄だと感じたことはありますか?その結果、cgi の改良版、fast-cgi が登場しました。

fast-cgi は、各リクエストの処理後にプロセスを強制終了しませんが、プロセスが一度に複数のリクエストを処理できるようにプロセスを保持します。このようにして、毎回プロセスを再フォークする必要がなくなり、効率が大幅に向上します。 FastCGI は、言語に依存しないスケーラブルなアーキテクチャの CGI オープン拡張機能であり、その主な動作は CGI インタプリタ プロセスをメモリ内に保持することで、より高いパフォーマンスを実現します。ご存知のとおり、CGI インタープリタの繰り返しロードが CGI パフォーマンス低下の主な原因です。CGI インタープリタがメモリ内に残り、FastCGI プロセス マネージャーのスケジューリングを受け入れる場合、良好なパフォーマンス、スケーラビリティ、フェイルオーバー機能などが提供されます。

2. php-fpm とは何ですか?

PHP-FPM は、PHP でのみ使用される PHP FastCGI マネージャーです。 PHP-FPM は実際には PHP ソース コードのパッチであり、FastCGI プロセス管理を PHP パッケージに統合するように設計されています。 PHP-FPM は、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。
プロセスにはマスタープロセスとワーカープロセスが含まれます。
ポートをリッスンして Web サーバーからのリクエストを受信する役割を担うマスター プロセスは 1 つだけですが、通常は複数のワーカー プロセスが存在します (特定の数は実際のニーズに応じて構成されます)。各プロセスには PHP インタープリターが組み込まれています。内部は、PHP コードの実際のインタプリタです。

関連するおすすめ:

Apacheとphpの動作原理の分析

以上がphpの仕組みを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。