>  기사  >  백엔드 개발  >  PHP 실행 프로세스 및 관련 개념

PHP 실행 프로세스 및 관련 개념

不言
不言원래의
2018-07-06 13:48:291648검색

이 글은 주로 PHP의 실행 과정과 관련 개념을 소개하고 있습니다. 이제 필요한 친구들과 함께 참고할 수 있습니다.

Program Architecture#🎜🎜 #

먼저 PHP 프로그램을 실행하기 위해 어떤 지원이 필요한지 살펴보겠습니다. 모든 것의 출발점은 프로그래머부터 PHP 작성을 시작하는 것이 합리적이므로 애플리케이션 수준 PHP 스크립트 파일(Composer/include의 다양한 타사 PHP 코드 포함)이 필요하다는 것입니다. 스크립트 파일은 실행되기 전에 구문 분석 및 컴파일되어야 하므로 PHP 가상 머신(보통 Zend 엔진)도 필요합니다. 또한, PHP 스크립트는 여러 확장의 함수와 클래스를 사용하므로 확장(공식, PECL 및 사용자 작성 확장 포함)이 거의 필요합니다. 또한 PHP 프로그램은 외부와 상호 작용해야 합니다(예: 명령줄에서 매개변수 가져오기, 웹 서버에서 요청 정보 가져오기). 이 계층은 SAPI를 담당하므로 SAPI도 필요합니다.

위 내용을 요약하면 PHP 프로그램의 아키텍처는 위에서 아래로 4개의 레이어, 즉 애플리케이션 레이어, SAPI 레이어, 확장 레이어 및 Zend 엔진으로 구성됩니다. 아키텍처 관계는 아래 그림에 나와 있습니다. 🎜🎜## 🎜🎜 #SAPI 레이어는 어떤 사람들에게는 비교적 생소할 수도 있습니다. SAPI는 실제 운영 환경에서 상위 계층 애플리케이션을 분리하기 위한 통합 인터페이스 세트를 제공합니다. 사용자가 작성한 PHP 파일은 명령줄이나 Apache httpd 또는 FPM을 사용하여 실행할 수 있습니다. 그 뒤에 있는 지원 작업은 SAPI에서 제공되며 개발자는 이를 인식하지 못합니다. SAPI를 통해 PHP 스크립트 계층은 특정 실행 환경에 대해 너무 많이 고려할 필요가 없으며 PHP 자체를 통해 SAPI가 고유한 특성을 기반으로 고유한 구현을 제공할 수 있습니다.

실행 프로세스

PHP 실행 프로세스 및 관련 개념 다양한 SAPI 구현의 차이점을 제쳐두고 PHP 프로그램의 실행 프로세스는 다음과 같이 간단히 요약할 수 있습니다.

# 🎜🎜## 🎜🎜#프로그램 시작, Zend 엔진 및 핵심 구성 요소 초기화

확장 초기화(MINIT)

#🎜🎜 ##🎜🎜 #요청 수신, 활성화 확장(RINIT)

  1. PHP 스크립트 구문 분석 및 실행

  2. #🎜 🎜#요청 종료, 확장 프로그램 비활성화(RSHUTDOWN);

  3. 확장 제거(MSHUTDOWN);

  4. 프로그램 닫기# 🎜🎜#

  5. 345를 제외하고 나머지 단계는 전체 SAPI 수명 주기에서 한 번만 실행됩니다. CGI/CLI 모드에서는 345가 한 번만 실행됩니다.
  6. PHP 프로그램의 수명 주기를 이해하는 것은 PHP 발전을 위한 필수 프로세스이며 개발자가 문제를 빠르게 찾는 데 도움이 될 수도 있습니다. 예를 들어 스크립트 리포팅 기능이 없으면 CLI/CGI 모드에서 확장이 없거나 로딩 오류가 있을 가능성이 매우 높으며,

    이 어떻게 종료되더라도 실행입니다. 스크립트가 반드시 프로세스 종료를 의미하지는 않습니다. 스크립트가 메모리에 상주하여 컴파일된 후에는 RINIT 및 RSHUTDOWN이 반복적으로 실행되지 않습니다. 이는 다른 운영 모드 등에 비해 CLI 프레임워크의 성능 향상 포인트입니다.
  7. SAPI 라이프사이클의 각 단계에 대한 자세한 내용은 "PHP 코어 심층 이해" 책을 참조하세요.

    CGI, FastCGI, PHP-FPM 등
  8. CGI/FastCGI/php-cgi 및 PHP-FPM은 PHP 개발자를 쉽게 혼란스럽게 할 수 있는 몇 가지 개념입니다. 이러한 개념 간의 관계는 다음과 같습니다.

    CGI/FastCGI:网关协议,与语言无关,所以与PHP关系也不大。两者的区别是FastCGI可以独立于web服务器,运行FastCGI协议的程序变成web服务器的内容提供方(上游)。另外与web服务器解耦后,用FastCGI协议交互的进程具有性能好、安全稳定、支持分布式等优点;
    
    php-cgi:实现FastCGI协议的PHP解析器,不能平滑重启和热加载;
    
    FPM:PHP官方的FastCGI进程管理器,可执行程序为php-fpm;支持平滑重启、热加载,运行稳定;其管理对象不是php-cgi进程,两者没什么关系。
    몇 가지 개념만 비교적 구별하기 쉽습니다. 실제로 개발자를 혼란스럽게 하는 것은 다음 네 가지 개념 그룹의 조합입니다.
  9. # 🎜🎜## 🎜🎜#
웹 서버. 일반적인 Apache httpd 및 Nginx

pconnect也是徒劳的,脚本一执行完资源就释放掉;exit/dieSAPI. 일반적인 프로토콜은 apache2handler, cli, fpm-fcgi

프로토콜입니다. 기사에 언급된 CGI 및 FastCGI

프로그램. 즉 php-cgi와 php-fpm입니다.

  1. 웹 서버는 대부분의 사람들에게 더 친숙하므로 다른 개념과의 관계에 대해 이야기해 보겠습니다. Apache httpd를 사용하면 90% 이상의 경우가 실행됩니다. 모듈 방식의 PHP 스크립트이므로 SAPI의 apache2handler와 관련이 있으며 Nginx를 사용할 때 요청의 90%가 FastCGI 프로토콜을 통해 FPM으로 전달되는 다른 개념(CGI나 FastCGI 프로토콜 모두)과 관련이 없습니다. , SAPI의 fpm과 관련이 있습니다. fcgi의 세 가지 개념, 프로토콜의 FastCGI, 프로그램의 php-fpm은 서로 연관되어 있으며 다른 개념과는 아무런 관련이 없습니다.

  2. Summary
  3. 이 글에서는 PHP 프로그램의 아키텍처와 실행 프로세스를 간략하게 검토하고 혼동되기 쉬운 몇 가지 개념을 소개합니다.

  4. 읽어주셔서 감사합니다. 수정도 환영합니다!
  5. 위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

  6. 관련 추천:
  7. PHP 컨테이너 Pimple 실행 프로세스 분석

Laravel 서비스 컨테이너 사용의 장점

위 내용은 PHP 실행 프로세스 및 관련 개념의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.