PHP에서 cgi는 "Common Gateway Interface"의 약자로 공용 게이트웨이 인터페이스를 의미합니다. cgi는 클라이언트가 웹 브라우저에서 네트워크 서버에서 실행되는 프로그램에 데이터를 요청할 수 있도록 허용하며 A 표준을 요청합니다. 핸들러 간에 데이터를 전송하는 데 사용됩니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, PHP 버전 7.1, DELL G3 컴퓨터
간단히 말하면, CGI와 FastCGI는 단지 프로토콜일 뿐이고, php-cgi는 cgi 프로그램의 구현인 php-fpm은 단지 php-cgi를 관리하는 관리자일 뿐입니다.
CGI의 전체 이름은 "Common Gateway Interface"(공통 게이트웨이 인터페이스)입니다. 이는 HTTP 서버가 사용자 또는 다른 컴퓨터의 프로그램과 "대화"하는 데 사용하는 도구입니다.
은 클라이언트가 웹 브라우저에서 웹 서버에서 실행되는 프로그램으로 데이터를 요청할 수 있도록 하는 중요한 인터넷 기술입니다.
CGI는 서버와 요청 처리기 간에 데이터를 전송하는 표준을 설명합니다.
CGI란 무엇인가요? CGI는 웹 서버가 전달하는 데이터가 CGI 프로그램 작성자에게 편리한 표준 형식인지 확인하는 것입니다.
웹 서버(예: nginx)는 단지 콘텐츠 배포자일 뿐입니다. 예를 들어 /index.html을 요청하면 웹 서버는 파일 시스템에서 이 파일을 찾아 브라우저로 보냅니다. 여기에 배포되는 것은 정적 데이터입니다. 좋아요, 이제 요청이 /index.php에 대한 것이라면, 구성 파일에 따르면 nginx는 이것이 정적 파일이 아니며 PHP 파서에 의해 처리되어야 한다는 것을 알고 있습니다. 그러면 단순히 요청을 처리하여 다음으로 넘겨줄 것입니다. PHP 파서. Nginx는 어떤 데이터를 PHP 파서에 전달합니까? URL이 있어야 하고, 쿼리 문자열이 있어야 하며, POST 데이터가 있어야 하고, HTTP 헤더가 있어야 합니다. CGI는 어떤 데이터를 어떤 형식으로 전달할지 규정하는 프로토콜입니다. 요청 처리를 위한 백엔드. PHP 코드에서 사용하는 사용자 데이터가 어디에서 왔는지 신중하게 생각해 보세요.
웹 서버가 /index.php에 대한 요청을 받으면 PHP 파서인 해당 CGI 프로그램을 시작합니다. 다음으로, PHP 파서는 php.ini 파일을 구문 분석하고, 실행 환경을 초기화하고, 요청을 처리하고, 처리된 결과를 CGI에서 지정한 형식으로 반환하고, 프로세스를 종료합니다. 그런 다음 웹 서버는 결과를 브라우저에 반환합니다.
알겠습니다. CGI는 프로토콜이며 프로세스나 그 어떤 것과도 관련이 없습니다. 그렇다면 fastcgi는 무엇입니까? Fastcgi는 CGI 프로그램의 성능을 향상시키는 데 사용됩니다.
FastCGI는 CGI에서 개발 및 개선되었습니다. 전통적인 CGI 인터페이스 방법의 가장 큰 단점은 성능이 좋지 않다는 것입니다. 왜냐하면 HTTP 서버가 동적 프로그램을 만날 때마다 구문 분석을 수행하기 위해 스크립트 파서를 다시 시작해야 하고 결과가 HTTP 서버로 반환되기 때문입니다.
성능 향상, 그렇다면 CGI 프로그램의 성능 문제는 무엇일까? "PHP 파서는 php.ini 파일을 구문 분석하고 실행 환경을 초기화합니다", 그게 전부입니다. 표준 CGI는 각 요청에 대해 이러한 단계를 수행하므로(지치지 마세요! 프로세스를 시작하는 것은 매우 피곤합니다!) 매번 처리하는 시간이 상대적으로 길어집니다. 이것은 분명히 불합리한 일입니다! 그렇다면 Fastcgi는 어떻게 이를 수행합니까? 먼저 Fastcgi는 마스터를 시작하고 구성 파일을 구문 분석하고 실행 환경을 초기화한 다음 여러 작업자를 시작합니다. 요청이 들어오면 마스터는 이를 워커에게 전달하고 즉시 다음 요청을 수락할 수 있습니다. 이는 작업의 중복을 방지하고 자연스럽게 매우 효율적입니다. 작업자가 충분하지 않은 경우 마스터는 구성에 따라 여러 작업자를 미리 시작하고 기다릴 수 있습니다. 물론 유휴 작업자가 너무 많으면 일부가 중지되어 성능이 향상되고 리소스가 절약됩니다. fastcgi의 프로세스 관리입니다.
그렇다면 PHP-FPM은 무엇일까요? Fastcgi를 구현한 프로그램으로 PHP에서 공식적으로 승인되었습니다.
우리 모두 알고 있듯이 PHP의 인터프리터는 php-cgi입니다. php-cgi는 단지 CGI 프로그램일 뿐입니다. 요청을 구문 분석하고 결과를 반환할 수 있을 뿐 프로세스를 관리하는 방법은 모릅니다. (폐하, 저는 정말 그렇게 할 수 없습니다!) 그래서 php-cgi를 예약할 수 있는 프로그램이 있습니다. 예를 들어,spawn-fcgi는 lighthttpd와 분리되어 있습니다. 글쎄요, PHP-FPM도 그런 것입니다. 오랜 개발 기간을 거쳐 점차 모든 사람에게 인식되어 점점 더 인기를 얻고 있습니다.
PHP-CGI는 PHP 스크립트를 해석하는 프로그램일 뿐입니다.
PHP-FPM은 FastCGI 관리자입니다
CGI 모드 작동 원리
Nginx가 browser/index.php 요청을 받으면 먼저 CGI 프로토콜을 구현하는 프로세스를 생성합니다. 여기에는 php-cgi(PHP 파서)가 있습니다. ). 다음으로 php-cgi는 php.ini 파일을 구문 분석하고 실행 환경을 초기화한 후 요청을 처리하고 처리된 결과를 CGI에서 지정한 형식으로 반환한 후 프로세스를 종료합니다. 마지막으로 Nginx는 결과를 브라우저에 반환합니다. 전체 프로세스는 Fork-And-Execute 모드입니다. 사용자 요청 수가 매우 많으면 메모리, CPU 시간 등 시스템 리소스를 많이 차지하게 되어 성능이 저하됩니다. 따라서 CGI를 사용하는 서버에서는 연결 요청 수만큼 CGI 하위 프로세스가 발생하게 됩니다. 하위 프로세스의 반복적인 로드는 CGI 성능이 저하되는 주요 원인입니다.
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP에서 CGI는 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!