추천: "PHP 비디오 튜토리얼"
PHP에는 5가지 작동 모드가 있고 4가지 공통 모드가 있습니다:
1.CGI(Common Gateway Interface)
2.FastCGI(Resident) CGI / Long-Live CGI)
3.CLI(Command Line Run/Command Line Interface)
4.LoadModule [Apache 전용]
5. ISAPI(Internet Server Application Program Interface) [IIS 전용]
Remarks: PHP5.3 이후에는 PHP 없음 더 이상 ISAPI 모드가 있으며 설치 후 php5isapi.dll 파일이 더 이상 존재하지 않습니다. IIS6에서 더 높은 버전의 PHP를 사용하려면 FastCGI 확장을 설치한 다음 IIS6에서 FastCGI를 지원하도록 설정해야 합니다.
현재 실행 중인 모드 보기
echo php_sapi_name();
CGI 모드
소개:
CGI는 일반 게이트웨이 인터페이스(Common Gateway Interface)입니다. CGI는 웹 페이지와 웹 서버의 실행 프로그램을 연결하는 브릿지와 같습니다. HTML에서 받은 명령을 서버의 실행 프로그램에 전달하고, 서버 실행 프로그램의 결과를 HTML 페이지로 반환합니다. CGI는 크로스 플랫폼이며 거의 모든 운영 체제에서 구현될 수 있습니다.
호출 프로세스: Fork-And-Execute 모드
사용자 요청 —> 웹 서버가 요청(일반적으로 사용되는 Nginx, apache)을 수신합니다 —> CGI 하위 프로세스를 포크하고 요청을 처리합니다 —-> 요청 처리되어 반환됩니다. 결과는 웹 서버로 이동하여 하위 프로세스를 파괴합니다. -> 웹 서버는 결과를 사용자에게 반환합니다. , 각 요청은 독립적으로 처리되며 호출 프로세스는 충분히 간단합니다. 명확하고 제어 가능합니다.
프로세스는 데이터가 오염되지 않도록 격리되어 있습니다.단점:
모든 요청은 새로운 CGI 하위 프로세스를 포크해야 합니다. . 동시에 1,000개의 동시 요청이 있는 경우 1,000개의 하위 프로세스를 포크해야 하며 이로 인해 여러 가지 문제가 발생할 수 있습니다.
하위 프로세스가 너무 많으면 CPU가 컨텍스트 전환에 많은 시간을 소비하게 됩니다
각 요청에는 관련 리소스를 다시 로드해야 합니다
FastCGI 모드
웹 서버가 시작되면 PHP-FPM 마스터 프로세스(주로 처리를 위해 유휴 자체 하위 프로세스에 요청을 할당하는 역할을 담당함)와 특정 수의 fast-cgi 하위 프로세스(요청 처리 담당) PHP-FPM 마스터 프로세스는 프로세스 풀을 관리합니다. 풀에는 여러 개의 fast-cgi 하위 프로세스가 있으며, 각 fast-cgi 하위 프로세스는 서로 간섭하지 않고 독립적으로 요청을 처리합니다.
사용자 요청 -> 웹 서버가 요청을 수신합니다. 요청을 처리하기 위한 cgi 하위 프로세스 —> Sub 프로세스가 파일(예: php.ini) 및 기타 리소스 처리 요청을 로드합니다. —> 처리가 종료되고 리소스가 지워지고 결과가 마스터로 반환되며 하위 프로세스가 정지되고 유휴 상태로 표시됩니다. > 마스터는 결과를 웹 서버에 반환 —> 웹 서버 결과를 사용자에게 반환
그림:보안 관점에서 FastCGI는 호스트 웹 서버와 완전히 독립적입니다. 웹 서버 [PHP-FPM이 닫히면 502 잘못된 게이트웨이가 사용자에게 반환됩니다.]
성능 관점에서 FastCGI는 동적 로직 처리를 웹 서버와 분리합니다. 호스트 서버가 IO에 집중할 수 있도록 합니다. [일반적인 동적 웹 페이지의 경우 논리적 처리의 일부만 있을 수 있으며 사진과 같은 정적 리소스의 로딩은 더 많습니다.]
단점:
빠른 cgi 하위 프로세스는 한 번에 하나의 요청만 처리할 수 있으므로 웹 사이트의 동시 성능은 하위 프로세스 수에 따라 제한됩니다.
너무 많은 프로세스가 열리면 CPU가 많은 시간을 낭비하게 됩니다. 프로세스 컨텍스트 스위칭.
fast-cgi 하위 프로세스가 요청될 때마다 관련 리소스를 다시 로드해야 하며 요청이 완료되면 리소스를 해제해야 합니다.
CLI(Command Line Run/Command Line Interface)
소개 :
php-cli 모드는 명령줄 모드에 속하며, 이제 막 PHP를 배우기 시작하고 wamp와 wnmp를 시작한 많은 개발자들에게 가장 생소한 운영 모드입니다.
이 모드는 다른 프로그램의 사용이 필요하지 않고 직접 들어갈 수 있습니다. PHP 코드를 실행하는 php xx.php
명령줄 모드 일반 웹 모드와 확실히 다른 점은 다음과 같습니다.
시간 초과 없음
버퍼 버퍼링은 기본적으로 꺼져 있습니다.
STDIN 및 STDOUT 표준 입력/출력/오류 사용
echo var_dump, phpinfo 및 기타 출력은 콘솔에 직접 출력됩니다.
사용 가능한 클래스/함수 다양한
php.ini 구성이 다릅니다
PS: 자세한 내용은 공식 문서를 참조하세요: www.php.net/manual/zh/features.com...
LoadModule(Apache 전용)
소개:
모듈 모드는 mod_php5 모듈 형태로 통합되었습니다. 이때 mod_php5 모듈의 기능은 Apache가 전달한 PHP 파일 요청을 받아 처리하는 것입니다. , 처리된 결과를 Apache에 반환합니다.
Apache 구성 파일 httpd.conf에서 일반적으로 추가되는 LoadModule php7_module "D:/…/php71/php7apache2_4.dll"은 다음
호출 프로세스의 역할을 합니다.
사용자 요청—> ; 요청을 처리하기 위해 mod_php5 모듈을 호출 —> 요청 결과를 Apache에 반환 —> Apache는 결과를 사용자에게 반환
그림:
ISAPI(인터넷 서버 응용 프로그램 인터페이스)
소개 :
PHP5.3 이후에는 PHP에 더 이상 ISAPI 모드가 없으며 설치 후 php5isapi.dll 파일도 더 이상 없습니다. IIS6에서 더 높은 버전의 PHP를 사용하려면 FastCGI 확장을 설치한 다음 IIS6에서 FastCGI를 지원하도록 설정해야 합니다. 그러니 여기서는 자세한 내용을 소개하지 않겠습니다
일러스트:
Written at end:
오늘날 인터넷이 폭발적으로 발전하면서 대부분의 웹사이트는 웹사이트의 높은 동시성 성능을 고려해야 합니다. Nginx는 가볍고 뛰어난 동시성 성능으로 인해 개발자들의 선호도가 높아지고 있습니다. 한때 전체 네트워크에서 인기가 있었던 LAMP 조합은 더 이상 PHP 개발자에게 첫 번째 선택이 아닙니다. 갑자기 등장한 LNMP 조합은 PHPer의 필수 과정이 되었으며 이로 인해 Apache 기반 LoadModule 모델이 점점 더 언급되지 않게 되었습니다.
또한 명령줄 스크립트를 작성하는 데 사용되는 CLI 모드와 거의 멸종된 ISAPI 모드는 분명히 웹 사이트 구축에 적합하지 않습니다.
CGI의 향상된 버전인 Fast-CGI 모드는 CGI의 단순성과 보안성을 계승하고 PHP-FPM을 사용하여 하위 프로세스를 관리하므로 웹 서버가 I/O 처리에 더 집중할 수 있습니다. PHP-FPM은 프로세스를 관리하고 유지합니다. 요청 처리를 기다리기 위해 미리 특정 개수의 하위 프로세스를 Fork할 수 있는 풀입니다. 요청이 올 때 하위 프로세스를 Fork할 필요가 없고 요청이 끝날 때 하위 프로세스를 삭제할 필요도 없습니다.
위 내용은 PHP 작동 모드에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!