この記事では、PHP-FMP について詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
php-fpm とは
- php-fpm を理解する前に、まず質問について考えてください。ユーザーが PHP コードで Web (niginx サーバー) リクエストを開始した場合、
$_POST、$_GET、$_SERVER
を通じてリクエスト情報を取得するにはどうすればよいでしょうか?データを組み立てるにはどのような形式を参照すればよいでしょうか?
実際、各動的言語、つまりインタープリタ言語は、サーバー (ここでは Web サーバーを指します) に認識されるように、対応するパーサーを渡す必要があることがわかっていますが、インタープリターとサーバーは特定のプロトコルに従う必要があります。このプロトコルを介してのみ、両者は正常に通信できます。この場合、このプロトコルは CGI プロトコルですが、CGI のメカニズムは、Web リクエストに応答するたびに、新しい処理プロセスが作成され、初期化されます。このプロセスは、リクエストが完了すると強制終了されます。次に、各リクエストは、作成 -> 初期化 -> 終了の 3 つのステップを実行する必要があります。実際、このプロセスはリソースを無駄にするだけでなく、非常に非効率的です。何をするか? FastCGI は、時代に合わせて登場し、CGI の改良版として、ライフサイクル管理が不要な常駐サービスプロセスを起動し、プロセスの作成と終了を繰り返すことを回避します。繰り返し読み込む必要はありません 環境変数を取得します Webリクエストがあるたびに、FastCGIマネージャ、つまり常駐サービスプロセスがCGIインタプリタプロセスを起動します
- CGI が利用できるようになったので、php phython などのインタープリタ型言語を独自の言語に合わせて調整する必要があります。その後、PHP 関係者は、PHP の CGI のカスタマイズ版である PHP-CGI を考案しました。
- しかし、使用するうちに、誰もが PHP-CGI の問題を発見しました。
1. php.ini を変更した後、有効にするために PHP-CGI を再起動する必要があり、スムーズに再起動することはできません。達成される。 2. PHP-CGI を直接強制終了すると、php は実行できなくなりますが、これは明らかに容認できません。 3. これ自体はプロセスを管理せず、要求を解析して結果を返すことしかできません
FastCGI が登場しましたが、PHP の FastCGI ははるかに遅れているのでしょうか? もちろん違います、2004 年までに Andrei という男がNigmatulin 敗者が PHP-FPM を発明しました。PHP-FMP の正式名は PHP-FASTCGI Process Manager です。端的に言えば、FastCGI を PHP 用にカスタマイズしたバージョンです (ここで強調したいのは、PHP-CGI と PHP の両方であることです) -FPM は CGI プロトコルを実装するように設計されており、新しいプロトコルではありません)。実際、今私が言っていなかったことが 1 つあります。インターネット上の多くの人は、PHP-CGI は PHP のためのプログラムであると言っています。 FAST-CGI を管理する PHP-FMP の正式名は PHP-FASTCGI Process であることがわかりました。マネージャーになった後は、自信を持って FAST-CGI にノーと言え、この知識を広めることができます。
php-fpm のプロセスにはマスター (常駐サービス プログラム) とワーカー プロセスが含まれます
マスター プロセス
- マスターはプロセスのスケジューリングを担当します (たとえば、十分なワーカー プロセスがない場合、子プロセスをフォークします)
- はリスニング ポート (通常は 9000) を担当します。これは構成で設定できます。もちろん、別の方法もあります。ソケットを使用する方法もあります。
netstat -nap | grep マスターのプロセス番号
でポート情報を確認できます (ポート 9000 は実際には tcp の通信方式で、ソケットはUnix ソケット。プロセス間の通信であるため、効率の点では Unix ソケットが明らかに最高ですが、Unix ソケットはサーバー上にある必要があります。異なるマシン間の通信の場合は、やはり tcp 通信を使用する必要があります)
- サーバーからリクエストを受信します
#次のことからわかります。作業の進行状況の名前です。実際の作業クラスです。コードが実際に実行される場所です。
- php-fmp の仕組みを見てみましょう。
#
location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }この情報は誰でも理解できると思います、/tmp/ php-cgi.sock は php と nginx ブリッジの間の接続であり、
include fastcgi.conf も見ました。
root@6d05153a8988:/usr/local/nginx/conf# cat fastcgi.conf fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_param PHP_ADMIN_VALUE "open_basedir=NULL";を見てみましょう。REMOTE_ADDR などのよく知られたものがいくつかありました。 、REQUEST_URI、理解してください、私たちは渡します $_SERVER によって取得された情報は、この設定ファイルで指定されたものです php-fmp 設定ファイルを見てみましょう (内部のコメントに注意してください、説明はしません)
root@6d05153a8988:/usr/local/php/etc# cat php-fpm.conf [global] pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = notice [www] listen = /tmp/php-cgi.sock listen.backlog = -1 listen.allowed_clients = 127.0.0.1 listen.owner = www listen.group = www listen.mode = 0666 user = www group = www # 如何控制子进程,选项有static和dynamic #区别: #如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开#启设置数量的php-fpm进程。 #如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。 #系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程, #然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之#间调整php-fpm进程数。 pm = dynamic # 静态方式下开启的php-fpm进程数量 pm.max_children = 20 # 动态方式下的起始php-fpm进程数量 pm.start_servers = 10 # 动态方式下的最小php-fpm进程数 pm.min_spare_servers = 10 # 动态方式下的最大php-fpm进程数量 pm.max_spare_servers = 20 # php-fpm子进程能处理的最大请求数 pm.max_requests = 1024 pm.process_idle_timeout = 10s request_terminate_timeout = 100 request_slowlog_timeout = 0 slowlog = var/log/slow.log
- php-fpm関連の操作について
启动: /usr/local/php/sbin/php-fpm
查看进程数: ps aux | grep -c php-fpm
查看mater进程号:ps aux|grep 'php-fpm: master'|grep -v grep|awk '{print $2}'
或者cat /usr/local/php/var/run/php-fpm.pid
# 强制关闭 pkill php-fpm kill -INT `cat /usr/local/php/var/run/php-fpm.pid` kill -INT [pid] # 平滑重启 其实就是通过创建新的进程使 php.ini 生效 kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` kill -USR2 [pid]
小结
至此,php-fpm 算是说完了,其实通过上面的解说,大家也会明白一个问题,为什么lnmp 承受的并发比lamp高,除了nginx的高性能之外,php-fpm 是不是也是其中的一个原因呢?
推荐学习:《PHP视频教程》
以上がこの記事では、PHP-FMP の詳細な分析を提供します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









