이 글에서는 PHP-FMP에 대해 자세히 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
php-fpm이란 무엇입니까
- php-fpm을 이해하기 전에 먼저 질문에 대해 생각해 보십시오. 사용자가 PHP 코드에서 웹(niginx 서버) 요청을 시작했는데 어떻게 해야 할까요?
$_POST,$_GET,$_SERVER
를 통해 요청 정보를 얻을 수 있나요? 데이터를 조합하려면 어떤 형식을 참조해야 합니까?
사실 각 동적 언어, 즉 해석된 언어는 서버(여기서는 웹 서버)에서 인식되기 위해서는 해당 파서가 필요하다는 것을 우리는 알고 있지만, 인터프리터와 서버는 특정 프로토콜을 따라야 합니다. 정상적인 통신을 위해 이 프로토콜은 CGI 프로토콜이지만 CGI의 메커니즘은 웹 요청에 응답할 때마다 새로운 처리 프로세스가 생성 및 초기화되고 요청이 완료되면 해당 프로세스가 종료된다는 것입니다. 완전한. 그런 다음 각 요청은 생성->초기화->종료의 세 단계를 수행해야 합니다. 실제로 이 프로세스는 리소스를 낭비할 뿐만 아니라 매우 비효율적입니다. 무엇을 해야 할까요? FastCGI는 시대에 부응하여 등장했습니다. FastCGI는 상주 서비스 프로세스를 시작합니다. 이 프로세스는 프로세스의 반복적인 생성과 종료를 방지합니다. 반복해서 읽을 필요가 없습니다. 웹 요청이 있을 때마다 상주 서비스 프로세스인 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가 훨씬 뒤처지겠습니까? 물론 그렇지 않습니다. 이것은 Andrei Nigmatulin이라는 패배자가 발명한 것입니다. 2004년 PHP-FPM의 전체 이름인 PHP-FMP는 PHP-FASTCGI 프로세스 관리자입니다. 직설적으로 말하면 PHP용 FastCGI의 사용자 정의 버전입니다. 여기서는 PHP-CGI와 PHP-FPM이 모두 동일하다는 점을 강조하고 싶습니다. 새로운 프로토콜이 아닌 CGI 프로토콜을 구현하기 위해) 사실 제가 지금 말하지 않은 것이 하나 있습니다. 인터넷에서 많은 사람들이 PHP-CGI는 PHP가 FAST-CGI를 관리하는 프로그램이라고 말합니다. 당신은 PHP-FMP의 전체 이름이 PHP-FASTCGI Process Manager라는 것을 알고 있습니다. 당신은 자신있게 거절하고 이 지식을 전파할 수 있습니다.
php-fpm 프로세스에는 마스터(상주 서비스 프로그램) 및 작업자 프로세스가 포함됩니다.
마스터 프로세스
- 마스터는 프로세스 예약을 담당합니다(예: 작업자 프로세스가 충분하지 않은 경우 하위 프로세스 포크).
- 포트 모니터링을 담당하며 일반적으로 포트 9000을 구성 파일에서 설정할 수 있습니다. 물론 소켓을 통하는 다른 방법도 있습니다.
netstat -nap | 번호
포트 정보 (포트 9000번은 실제로 tcp의 통신 방식이고 소켓은 유닉스 소켓을 의미합니다. 프로세스 간 통신이기 때문에 효율성 측면에서는 유닉스 소켓이 가장 좋지만 유닉스 소켓은 반드시 보장되어야 합니다. 동일한 포트에 있어야 합니다. 다른 시스템 간의 통신인 경우에는 여전히 TCP 통신을 사용해야 합니다.)netstat -nap | grep master的进程号
查看端口信息(9000端口其实就是tcp的通信方式,而socket是说的unix socket,从效率上来说,unix socket显然是最好的,因为它是进程之间的通信,但是unix socket要保证是在一台服务器,如果是不同机器之间的通信,还是要使用tcp通信)
- 接收来自服务器的请求
work进度 看名字就知道了,就是真正的打工阶级,代码真正执行的地方
- 再来看看php-fmp和nignx是怎么通信的
以socker通信为栗子,nginx的conf文件里面,可以看到下面这段信息
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";🎜이 정보는 누구나 이해할 수 있을 거라 믿습니다. /tmp/php-cgi.sock은 php와 nginx 사이의 연결고리입니다. 동시에
include fastcgi.conf
도 봤습니다. 살펴보겠습니다🎜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🎜예를 들어 REMOTE_ADDR, REQUEST_URI와 같은 익숙한 항목을 보았습니다. 이제 $_SERVER를 통해 얻는 정보가 이 구성 파일에 지정된 정보라는 것을 이해해야 합니다🎜🎜php- fmp 구성 파일 (안에 있는 설명에 주의하세요. 설명하지 않겠습니다.) )🎜
# 强制关闭 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 관련 작업에 대해🎜🎜🎜INT, TERM QUIT 원활한 종료 USR1이 로그 파일을 다시 엽니다. USR2는 모든 작업자 프로세스를 원활하게 다시 로드하고 구성 및 바이너리 모듈을 다시 로드합니다🎜
启动: /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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

phpsessionstrackuserdataacrossmultiplepagerequestsususingauniqueIdStoredInAcookie.here'showtomanagetheMeftically : 1) STARTASESSIONSTART_START () andSTAREDATAIN $ _SESSION.2) RegenerATERATESSESSIDIDAFTERLOGINWITHSESSION_RATERATERATES (True) TopreventSES

PHP에서 세션 데이터를 통한 반복은 다음 단계를 통해 달성 할 수 있습니다. 1. Session_start ()를 사용하여 세션을 시작하십시오. 2. $ _session 배열의 모든 키 값 쌍을 통해 Foreach 루프를 통과합니다. 3. 복잡한 데이터 구조를 처리 할 때 is_array () 또는 is_object () 함수를 사용하고 print_r ()를 사용하여 자세한 정보를 출력하십시오. 4. Traversal을 최적화 할 때 페이징을 사용하여 한 번에 많은 양의 데이터를 처리하지 않도록 할 수 있습니다. 이를 통해 실제 프로젝트에서 PHP 세션 데이터를보다 효율적으로 관리하고 사용하는 데 도움이됩니다.

이 세션은 서버 측 상태 관리 메커니즘을 통해 사용자 인증을 인식합니다. 1) 세션 생성 및 고유 ID의 세션 생성, 2) ID는 쿠키를 통해 전달됩니다. 3) ID를 통해 서버 저장 및 세션 데이터에 액세스합니다. 4) 사용자 인증 및 상태 관리가 실현되어 응용 프로그램 보안 및 사용자 경험이 향상됩니다.

tostoreauser'snameinaphpsession, startSessionstart_start (), wathsignthenameto $ _session [ 'username']. 1) useSentess_start () toinitializethesession.2) assimeuser'snameto $ _session [ 'username']

phpsession 실패 이유에는 구성 오류, 쿠키 문제 및 세션 만료가 포함됩니다. 1. 구성 오류 : 올바른 세션을 확인하고 설정합니다. 2. 쿠키 문제 : 쿠키가 올바르게 설정되어 있는지 확인하십시오. 3. 세션 만료 : 세션 시간을 연장하기 위해 세션을 조정합니다 .GC_MAXLIFETIME 값을 조정하십시오.

PHP에서 세션 문제를 디버그하는 방법 : 1. 세션이 올바르게 시작되었는지 확인하십시오. 2. 세션 ID의 전달을 확인하십시오. 3. 세션 데이터의 저장 및 읽기를 확인하십시오. 4. 서버 구성을 확인하십시오. 세션 ID 및 데이터를 출력, 세션 파일 컨텐츠보기 등을 통해 세션 관련 문제를 효과적으로 진단하고 해결할 수 있습니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

SESSION.GC_MAXLIFETIME 및 SESSION.COOKIE_LIFETIME을 설정하여 PHP에서 세션 수명을 구성 할 수 있습니다. 1) SESSION.GC_MAXLIFETIME 서버 측 세션 데이터의 생존 시간을 제어합니다. 2) 세션 .Cookie_Lifetime 클라이언트 쿠키의 수명주기를 제어합니다. 0으로 설정하면 브라우저가 닫히면 쿠키가 만료됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
