>  기사  >  백엔드 개발  >  PHP 실행 원리 및 프로세스에 대한 자세한 설명

PHP 실행 원리 및 프로세스에 대한 자세한 설명

不言
不言원래의
2018-04-20 10:49:281539검색

이 글의 내용은 PHP의 실행 원리와 프로세스에 대한 내용입니다. 참고할 만한 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있습니다.

소개


먼저, 다음 프로세스를 살펴보세요.
 • PHP 관련 프로세스를 수동으로 시작한 적이 없으며 Apache가 시작될 때 실행됩니다.
 • PHP는 mod_php5.so 모듈(특히 서버 애플리케이션 프로그래밍 인터페이스인 SAPI)을 통해 Apache에 연결됩니다. );
 • PHP에는 커널, Zend 엔진, 확장 레이어의 총 3가지 모듈이 있습니다.
 • PHP 코어는 요청, 파일 스트림, 오류 처리 및 기타 관련 작업을 처리하는 데 사용됩니다. 소스 파일을 기계 언어로 변환한 다음 가상 기계에서 실행합니다.
 • 확장 계층은 PHP가 특정 작업을 수행하는 데 사용하는 일련의 함수, 라이브러리 및 스트림입니다. 예를 들어 MySQL 데이터베이스에 연결하려면 mysql 확장이 필요합니다.
 • ZE가 프로그램을 실행할 때 여러 확장에 연결해야 할 수도 있습니다. 이때 ZE는 제어권을 확장에 넘겨주고 처리 후 반환합니다.
 • 마지막으로 ZE는 프로그램 실행 결과를 PHP 커널로 반환하고, 그 결과를 SAPI 레이어로 전송하고 최종적으로 브라우저로 출력합니다.
             잠깐, 그렇게 간단하지 않습니다. 위의 프로세스는 단순화된 버전일 뿐입니다. 좀 더 자세히 알아보고 그 뒤에서 어떤 일이 벌어지고 있는지 살펴보겠습니다.
 • Apache가 시작되면 PHP 인터프리터도 시작됩니다.
 • PHP 시작 프로세스에는 두 단계가 있습니다.
 • 첫 번째 단계는 전체 SAPI 수명 주기에 걸쳐 적용되는 일부 환경 변수를 초기화하는 것입니다. 두 번째 첫 번째 단계는 현재 요청에 대해서만 일부 변수 설정을 생성하는 것입니다.

PHP 시작의 첫 번째 단계

첫 번째 단계와 두 번째 단계가 무엇인지 모르시나요? 걱정하지 마십시오. 이에 대해서는 다음에 자세히 논의하겠습니다. 첫 번째이자 가장 중요한 단계를 먼저 살펴보겠습니다. 기억해야 할 점은 요청이 도착하기 전에 작업의 첫 번째 단계가 발생한다는 것입니다.

 • Apache를 시작한 후 PHP 인터프리터도 시작됩니다.

 • PHP는 각 확장의 MINIT 메서드를 호출하여 이러한 확장을 사용 가능한 상태로 전환합니다. php.ini 파일에서 어떤 확장 프로그램이 열려 있는지 살펴보세요.

  • MINIT는 "모듈 초기화"를 의미합니다. 각 모듈은 다른 요청을 처리하기 위해 일련의 함수, 클래스 라이브러리 등을 정의합니다.
 일반적인 MINIT 방식은 다음과 같습니다.

PHP_MINIT_FUNCTION(extension_name){  
/* Initialize functions, classes etc */  }


1
  • 2
  • 3
  • PHP가 두 번째 단계를 시작합니다
 • 페이지 요청이 발생하면 SAPI 계층이 PHP 제어권을 넘겨줍니다. 층. 따라서 PHP는 이 요청에 응답하는 데 필요한 환경 변수를 설정합니다. 동시에 실행 중에 생성된 변수 이름과 값을 저장하기 위한 변수 테이블도 생성합니다.

 • PHP는 각 모듈의 RINIT 메소드, 즉 "초기화 요청"을 호출합니다. 전형적인 예는 세션 모듈의 RINIT입니다. php.ini에서 세션 모듈이 활성화되면 $_SESSION 변수가 초기화되고 모듈의 RINIT가 호출될 때 관련 내용이 읽혀집니다. 메소드는 프로그램 실행 사이에 자동으로 시작되는 준비 프로세스라고 볼 수 있습니다.

 일반적인 RINIT 방법은 다음과 같습니다.

PHP_RINIT_FUNCTION(extension_name) {  
/* Initialize session variables, pre-populate variables, redefine global variables etc */  }



1

  • 2

  • 3

PHP关闭第一步

如同PHP启动一样,PHP的关闭也分两步: 
  • 一旦页面执行完毕(无论是执行到了文件末尾还是用exit或die函数中止),PHP就会启动清理程序。它会按顺序调用各个模块的RSHUTDOWN方法。 
  • RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。 
  一个典型的RSHUTDOWN方法如下:

PHP_RSHUTDOWN_FUNCTION(extension_name) {  
/* Do memory management, unset all variables used in the last PHP call etc */  
}
  • 1

  • 2

  • 3

PHP关闭第二步

最后,所有的请求都已处理完毕,SAPI也准备关闭了,PHP开始执行第二步: 
  • PHP调用每个扩展的MSHUTDOWN方法,这是各个模块最后一次释放内存的机会。 
  一个典型的RSHUTDOWN方法如下:

PHP_MSHUTDOWN_FUNCTION(extension_name) {  
/* Free handlers and persistent memory etc */  }
  • 1

  • 2

  • 3

这样,整个PHP生命周期就结束了。要注意的是,只有在服务器没有请求的情况下才会执行“启动第一步”和“关闭第二步”。 
  下面的是用一些图示来说明的!

PHP底层工作原理

PHP 실행 원리 및 프로세스에 대한 자세한 설명

  从图上可以看出,php从下到上是一个4层体系 
  ①Zend引擎 
  Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend实现。 
  ②Extensions 
  围绕着zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析就是extension的典型应用)。 
  ③Sapi 
  Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过sapi成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。后面将在sapi章节中介绍 
  ④上层应用 
  这就是我们平时编写的php程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

아키텍처 아이디어:

엔진(Zend) + 컴포넌트(ext) 모델은 내부 결합을 줄입니다.
중간 계층(sapi)은 웹 서버와 PHP를 분리합니다.
  ************** **** ********************************************** **
 php가 자동차라면
 자동차의 프레임은 php 그 자체
 Zend는 자동차의 엔진
 Ext 아래의 각종 컴포넌트는 자동차의 바퀴
 Sapi는 도로라고 볼 수 있고, 그리고 자동차는 다양한 유형의 도로에서 달릴 수 있습니다. 도로 위
그리고 PHP 프로그램의 실행은 자동차가 도로를 달리는 것입니다.
 따라서 우리는 다음이 필요합니다: 뛰어난 성능의 엔진 + 적합한 바퀴 + 올바른 활주로

아파치와 php의 관계

아파치의 php 파싱은 여러 모듈 중 php 모듈을 통해 완성됩니다.

PHP 실행 원리 및 프로세스에 대한 자세한 설명

 PHP를 Apache 시스템에 최종적으로 통합하려면 Apache에 필요한 몇 가지 설정을 지정해야 합니다. 여기서는 php의 mod_php5 SAPI 동작 모드를 예로 들어 설명하겠습니다. SAPI의 개념에 대해서는 나중에 자세히 설명하겠습니다.
 우리가 설치하는 버전이 Apache2 및 Php5라고 가정하면 Apache의 기본 구성 파일 http.conf를 편집하고 여기에 다음 줄을 추가해야 합니다.
 Unix/Linux 환경:
 LoadModule php5_module 모듈/mod_php5.so
 AddType 애플리케이션 /x-httpd-php .php
 참고: module/mod_php5.so는 X 시스템 환경에서 mod_php5.so 파일의 설치 위치입니다.
 Windows 환경의 경우:
 LoadModule php5_module d:/php/php5apache2.dll
 AddType application/x-httpd-php .php
 참고: d:/php/php5apache2.dll은 Windows 환경의 php5apache2.dll 파일 설치 위치 .
 이 두 가지 구성은 앞으로 php를 접미사로 사용하여 수신되는 모든 URL 사용자 요청이 php5_module 모듈(mod_php5.so/php5apache2.dll)을 호출하여 처리되어야 함을 Apache 서버에 알립니다.

Apache의 수명주기

PHP 실행 원리 및 프로세스에 대한 자세한 설명

Apach의 요청 처리 과정

PHP 실행 원리 및 프로세스에 대한 자세한 설명

아파치 요청 처리 주기에 대한 자세한 설명

아파치 요청 처리 주기의 11단계에서는 어떤 작업이 수행되나요?
 1. 사후 읽기-요청 단계
 일반적인 요청 처리 과정에서 모듈이 후크를 삽입할 수 있는 첫 번째 단계입니다. 이 단계는 요청을 매우 일찍 처리하려는 모듈에 활용될 수 있습니다.
 2. URI 변환 단계
 이 단계에서 Apache의 주요 작업은 요청된 URL을 로컬 파일 시스템에 매핑하는 것입니다. 모듈은 이 단계에서 후크를 삽입하여 자체 매핑 논리를 실행할 수 있습니다. mod_alias는 이 단계를 사용하여 작동합니다.
 3. 헤더 파싱 단계
 이 단계에서 Apache의 주요 작업: 요청의 헤더를 확인합니다. 모듈은 요청 처리 흐름의 어느 시점에서든 요청 헤더를 확인하는 작업을 수행할 수 있으므로 이 후크는 거의 사용되지 않습니다. mod_setenvif는 이 단계를 사용하여 작업합니다.
 4. 접근 제어 단계
 이 단계에서 Apache의 주요 작업: 구성 파일에 따라 요청한 리소스에 대한 접근이 허용되는지 확인합니다. Apache의 표준 논리는 허용 및 거부 지시문을 구현합니다. mod_authz_host는 이 단계를 사용하여 작동합니다.
 5. 인증 단계
 이 단계에서 Apache의 주요 작업은 구성 파일에 설정된 정책에 따라 사용자를 인증하고 사용자 이름 영역을 설정하는 것입니다. 모듈은 이 단계에서 후크를 삽입하여 인증 방법을 구현할 수 있습니다.
 6. 인증 단계
 이 단계에서 Apache의 주요 작업: 인증된 사용자가 구성 파일에 따라 요청된 작업을 수행할 수 있는지 확인합니다. 모듈은 이 단계에서 후크를 삽입하여 사용자 권한 관리 방법을 구현할 수 있습니다.
 7. MIME 유형 확인 단계
 이 단계에서 Apache의 주요 작업은 요청된 리소스의 MIME 유형 관련 규칙을 기반으로 사용할 콘텐츠 처리 기능을 결정하는 것입니다. 표준 모듈 mod_negotiation 및 mod_mime은 이 후크를 구현합니다.
 8. FixUp 단계
 이것은 콘텐츠 생성 전에 모듈이 필요한 모든 처리를 실행할 수 있도록 하는 일반적인 단계입니다. Post_Read_Request와 유사하게 모든 정보를 캡처할 수 있는 후크이며 가장 일반적으로 사용되는 후크이기도 합니다.
 9. 응답 단계
 이 단계에서 Apache의 주요 임무는 클라이언트에게 반환되는 콘텐츠를 생성하고 클라이언트에게 적절한 응답을 보내는 것입니다. 이 단계는 전체 프로세스의 핵심 부분입니다.
 10. 로깅 단계
 이 단계에서 Apache의 주요 작업은 응답이 클라이언트에 전송된 후 트랜잭션을 기록하는 것입니다. 모듈은 Apache의 표준 로깅을 수정하거나 대체할 수 있습니다.
 11. 정리 단계
 이 단계에서 Apache의 주요 작업: 파일 및 디렉터리 처리 또는 소켓 닫기 등 이 요청 트랜잭션이 완료되고 남은 환경을 정리합니다. Apache의 요청 처리.

LAMP 아키텍처

PHP 실행 원리 및 프로세스에 대한 자세한 설명

아래에서 위로 4개의 레이어:
 ①liunx는 운영 체제의 맨 아래 레이어에 속합니다.
 ②apache 서버는 보조 서버에 속하며 Linux 및 PHP와 통신합니다.
  3php: 서버 측 프로그래밍 언어이며 php_module 모듈을 통해 Apache와 연결됩니다.
  4mysql 및 기타 웹 서비스: 응용 프로그램 서비스에 속하며 PHP의 확장 플러그인 모듈을 통해 mysql과 연결됩니다.

관련 권장 사항:

자세한 그래픽 코드 PHP의 실행원리와 프로세스에 대한 설명

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

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