먼저 다음 프로세스를 살펴보겠습니다.
• PHP 관련 프로세스를 수동으로 시작한 적이 없으며 Apache가 시작될 때 실행됩니다.
• PHP는 mod_php5.so 모듈을 통해 Apache에 연결됩니다. ( 구체적으로 SAPI(서버 애플리케이션 프로그래밍 인터페이스);
• PHP에는 총 3개의 모듈이 있습니다: 커널, Zend 엔진 및 확장 레이어;
• PHP 코어는 요청, 파일 스트림, 오류 처리 및 기타 관련 작업을 처리하는 데 사용됩니다.
• Zend 엔진(ZE)은 소스 파일을 기계어로 변환한 다음 가상 머신에서 실행하는 데 사용됩니다.
• 확장 계층은 PHP가 일부 특정 작업을 수행하는 데 사용하는 함수, 클래스 라이브러리 및 스트림의 집합입니다. 예를 들어 MySQL 데이터베이스에 연결하려면 mysql 확장이 필요합니다.
• ZE가 프로그램을 실행할 때 여러 확장에 연결해야 할 수도 있습니다. 이때 ZE는 제어권을 확장에 넘겨주고 처리 후 반환합니다.
• 마지막으로 ZE는 프로그램 실행 결과를 PHP 커널로 반환하고, 그 결과를 SAPI 레이어로 전송하고 최종적으로 브라우저로 출력합니다.
잠깐, 그렇게 간단하지 않습니다. 위의 프로세스는 단순화된 버전일 뿐입니다. 좀 더 자세히 알아보고 그 뒤에서 어떤 일이 벌어지고 있는지 살펴보겠습니다.
• Apache가 시작되면 PHP 인터프리터도 시작됩니다.
• PHP 시작 프로세스에는 두 단계가 있습니다.
• 첫 번째 단계는 전체 SAPI 수명 주기에 걸쳐 적용되는 일부 환경 변수를 초기화하는 것입니다. 두 번째 첫 번째 단계는 현재 요청에 대해서만 일부 변수 설정을 생성하는 것입니다.
PHP 시작의 첫 번째 단계
• PHP는 각 확장의 MINIT 메서드를 호출하여 이러한 확장을 사용 가능한 상태로 전환합니다. php.ini 파일에서 어떤 확장 프로그램이 열려 있는지 살펴보세요.
• MINIT는 "모듈 초기화"를 의미합니다. 각 모듈은 다른 요청을 처리하기 위해 일련의 함수, 클래스 라이브러리 등을 정의합니다.
일반적인 MINIT 방식은 다음과 같습니다.
PHP_MINIT_FUNCTION(extension_name){ /* Initialize functions, classes etc */ }
일반적인 RINIT 방법은 다음과 같습니다.
PHP_RINIT_FUNCTION(extension_name) { /* Initialize session variables, pre-populate variables, redefine global variables etc */ }
일반적인 RSHUTDOWN 방법은 다음과 같습니다.
PHP_RSHUTDOWN_FUNCTION(extension_name) { /* Do memory management, unset all variables used in the last PHP call etc */ }
PHP_MSHUTDOWN_FUNCTION(extension_name) { /* Free handlers and persistent memory etc */ }
PHP의 기본 작동 원리
그림에서 볼 수 있듯이 PHP는 아래에서 위로 4계층 시스템입니다
①Zend 엔진
Zend는 순수 C로 구현되었으며 PHP의 핵심 부분입니다. PHP 코드(어휘, 구문 분석 및 기타 컴파일)를 번역합니다. 프로세스)는 실행 가능한 opcode를 처리하고 해당 처리 방법을 구현하고, 기본 데이터 구조(예: 해시테이블, oo), 메모리 할당 및 관리를 구현하고, 외부 호출에 해당하는 API 방법을 제공하는 데 사용됩니다. 모든 것과 모든 주변 장치의 핵심입니다. 기능은 모두 zend를 중심으로 구현됩니다.
②확장
확장은 zend 엔진을 중심으로 다양한 기본 서비스를 컴포넌트 기반 방식으로 제공합니다. 우리가 일반적으로 제공하는 다양한 내장 기능(예: 배열 시리즈), 표준 라이브러리 등은 모두 확장을 통해 구현될 수 있습니다. 기능 확장, 성능 최적화 및 기타 목적을 달성하기 위해 필요한 확장을 소유합니다(예를 들어 현재 Tieba에서 사용하는 PHP 중간 계층 및 서식 있는 텍스트 구문 분석은 일반적인 확장 응용 프로그램입니다).
③Sapi
Sapi의 전체 이름은 서버 측 응용 프로그래밍 인터페이스인 서버 응용 프로그래밍 인터페이스입니다. sapi는 일련의 후크 기능을 통해 PHP가 주변 데이터와 상호 작용할 수 있게 해줍니다. 이것은 매우 우아하고 성공적인 PHP 디자인입니다. sapi를 통해 PHP 자체가 상위 계층 응용 프로그램과 분리되고 격리될 수 있습니다. PHP는 더 이상 다른 응용 프로그램과 호환되는 방법을 고려할 수 없으며 응용 프로그램 자체도 자체 특성에 따라 다른 처리 방법을 구현할 수 있습니다. 나중에 sapi 장에서 소개하겠습니다
4상위 계층 응용 프로그램
우리가 일반적으로 작성하는 PHP 프로그램입니다. 웹 서버를 통해 웹 응용 프로그램을 구현하고 이를 스크립트 모드에서 실행하는 등 다양한 sapi 방법을 통해 다양한 응용 프로그램 모드를 얻을 수 있습니다. 명령줄 등
엔진(Zend) + 컴포넌트(ext) 모델은 내부 결합을 줄입니다.
중간 계층(sapi)은 웹 서버와 PHP를 분리합니다.
************ ************************************************** ***
php가 자동차라면
자동차의 프레임은 php 그 자체
Zend는 자동차의 엔진
Ext 아래의 다양한 구성요소는 자동차의 바퀴
Sapi는 도로, 자동차는 다양한 유형의 도로에서 달릴 수 있습니다
그리고 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 서버에 알립니다.
아파치 요청 처리 주기의 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의 요청 처리.
아래에서 위로 4개의 레이어:
①liunx는 운영 체제의 하위 레이어에 속합니다.
②apache 서버는 보조 서버에 속하며 Linux 및 PHP와 통신합니다.
3php: 서버측 프로그래밍 언어이며 php_module 모듈을 통해 Apache와 연결됩니다.
4mysql 및 기타 웹 서비스: 애플리케이션 서비스에 속하고 PHP의 확장 플러그인 모듈
위 내용은 PHP의 실행 원리와 프로세스를 그래픽 코드로 자세히 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!