>  기사  >  백엔드 개발  >  PHP에는 여러 가지 시작 모드가 있습니다.

PHP에는 여러 가지 시작 모드가 있습니다.

王林
王林원래의
2019-09-16 11:58:593492검색

PHP에는 여러 가지 시작 모드가 있습니다.

PHP의 여러 일반적인 시작 모드:

1, CGI 모드
#🎜 🎜 #

CGI는 일반 게이트웨이 인터페이스(Common Gateway Interface)입니다. 일반인의 관점에서 CGI는 웹 서버의 웹 페이지와 실행 프로그램을 연결하는 다리와 같습니다. HTML로 받은 명령어를 서버의 실행 프로그램에 전달하고, 서버의 실행 프로그램의 결과를 HTML 페이지에 반환합니다. CGI는 크로스 플랫폼이며 거의 모든 운영 체제에서 구현될 수 있습니다. CGI는 이미 오래된 모델이며 최근에는 거의 사용되지 않았습니다.

Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和Web服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。CGI已经是比较老的模式了,这几年都很少用了。

每有一个用户请求,都会先要创建CGI的子进程,然后处理请求,处理完后结束这个子进程,这就是Fork-And-Execute模式。 当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。所以用CGI方式的服务器有多少连接请求就会有多少CGI子进程,子进程反复加载是CGI性能低下的主要原因。

如果不想把 PHP 嵌入到服务器端软件(如 Apache)作为一个模块安装的话,可以选择以 CGI 的模式安装。或者把 PHP 用于不同的 CGI 封装以便为代码创建安全的 chroot 和 setuid 环境。这样每个客户机请求一个PHP文件,Web服务器就调用php.exe(win下是php.exe,linux是php)去解释这个文件,然后再把解释的结果以网页的形式返回给客户机。 这种安装方式通常会把 PHP 的可执行文件安装到 web 服务器的 cgi-bin 目录。CERT 建议书 CA-96.11 建议不要把任何的解释器放到 cgi-bin 目录。 

这种方式的好处是把Web Server和具体的程序处理独立开来,结构清晰,可控性强,同时缺点就是如果在高访问需求的情况下,CGI的进程Fork就会成为很大的服务器负担,想 象一下数百个并发请求导致服务器Fork出数百个进程就明白了。这也是为什么CGI一直背负性能低下,高资源消耗的恶名的原因。

2、FastCGI模式

FastCGI是CGI的升级版本,FastCGI像是一个常驻 (long-live)型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 Fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。

FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

3、CLI模式

PHP-CLI是PHP Command Line Interface사용자 요청이 있을 때마다 먼저 CGI 하위 프로세스가 생성된 후 요청이 처리되고 하위 프로세스가 처리 후 종료됩니다. - 실행 모드. 사용자 요청 수가 매우 많으면 메모리, CPU 시간 등 시스템 리소스를 많이 차지하게 되어 성능이 저하됩니다. 따라서 CGI를 사용하는 서버는 연결 요청만큼 많은 CGI 하위 프로세스를 가지게 됩니다. 하위 프로세스의 반복적인 로드는 CGI 성능이 저하되는 주요 원인입니다.

PHP를 서버 측 소프트웨어(예: Apache)에 포함하고 모듈로 설치하고 싶지 않은 경우 CGI 모드로 설치하도록 선택할 수 있습니다. 또는 다양한 CGI 래퍼와 함께 PHP를 사용하여 코드에 대한 보안 chroot 및 setuid 환경을 만듭니다. 이렇게 각 클라이언트가 PHP 파일을 요청하면 웹 서버는 php.exe(win에서는 php.exe, Linux에서는 php)를 호출하여 파일을 해석한 후, 해석 결과를 다음과 같은 형태로 클라이언트에게 반환합니다. 웹페이지. 이 설치 방법은 일반적으로 웹 서버의 cgi-bin 디렉터리에 PHP 실행 파일을 설치합니다. CERT 권장 사항 CA-96.11에서는 cgi-bin 디렉터리에 인터프리터를 배치하지 않을 것을 권장합니다. 이 방법의 장점은 웹 서버를 특정 프로그램 처리와 분리하고 구조가 명확하며 제어성이 강하다는 점입니다. 동시에 액세스 수요가 높을 경우 단점이 있습니다. CGI 프로세스 포크 수백 개의 동시 요청으로 인해 서버가 수백 개의 프로세스를 포크한다고 상상해 보십시오. 이것이 바로 CGI가 항상 낮은 성능과 높은 리소스 소비로 악명이 높았던 이유입니다.

2. FastCGI 모드

FastCGI는 CGI의 업그레이드 버전입니다. 활성화되어 있는 한 매번 Fork하는 데 시간이 걸리지 않습니다(이것은 CGI에서 가장 비판받는 Fork 및 실행 모드입니다).

FastCGI는 HTTP 서버와 동적 스크립팅 언어 간의 통신을 위한 확장 가능한 고속 인터페이스입니다. 가장 널리 사용되는 HTTP 서버는 Apache, Nginx 및 lighttpd를 포함한 FastCGI를 지원하는 동시에 PHP를 포함한 많은 스크립팅 언어에서도 지원됩니다.

FastCGI 인터페이스 모드는 C/S 구조를 채택하여 HTTP 서버와 스크립트 파싱 서버를 분리하고 스크립트 파싱 서버에서 하나 이상의 스크립트 파싱 데몬을 시작할 수 있습니다. HTTP 서버가 동적 프로그램을 만날 때마다 실행을 위해 FastCGI 프로세스로 직접 전달된 다음 결과가 브라우저로 반환됩니다. 이 방법을 사용하면 HTTP 서버가 정적 요청을 독점적으로 처리하거나 동적 스크립트 서버의 결과를 클라이언트에 반환할 수 있으므로 전체 응용 프로그램 시스템의 성능이 크게 향상됩니다.
3. CLI 모드

#🎜🎜#PHP-CLI는 PHP Command Line Interface의 약자입니다. 이름에서 알 수 있듯이 웹 서버에서 실행되는 PHP 환경(PHP-CGI, ISAPI 등)과 달리 명령줄에서 PHP를 실행하기 위한 인터페이스입니다. 즉, PHP는 프런트엔드 웹 페이지를 작성할 수 있을 뿐만 아니라 백엔드 프로그램을 작성하는 데에도 사용할 수 있습니다. PHP CLI 쉘 스크립팅은 모든 PHP 장점에 적용되어 스크립트나 서버 측 시스템을 생성하거나 GUI 애플리케이션을 사용하는 경우에도 Windows와 Linux 모두에서 지원됩니다. #🎜🎜##🎜🎜##🎜🎜#【장점】#🎜🎜##🎜🎜##🎜🎜#1) 여러 프로세스를 사용하면 하위 프로세스가 끝난 후 커널이 리소스 재활용을 담당합니다. #🎜 🎜##🎜 🎜#2) 여러 프로세스를 사용하면 하위 프로세스가 비정상적으로 종료되어도 전체 프로세스 스레드가 종료되지 않으며 상위 프로세스는 프로세스를 다시 빌드할 수 있습니다. #🎜🎜##🎜🎜# 3) 상주 메인 프로세스는 보다 명확하게 작업 분배 및 논리만을 담당합니다. #🎜🎜##🎜🎜# 우리는 PHP가 설치된 확장 프로그램을 확인하기 위해 Linux에서 "php -m"을 자주 사용합니다. 이는 PHP 명령줄 실행 모드이며, 관심 있는 학생들은 "php -h"를 입력하여 이 실행 모드를 학습할 수 있습니다. 깊이. #🎜🎜##🎜🎜##🎜🎜#4. 모듈 모드#🎜🎜##🎜🎜##🎜🎜##🎜🎜#모듈 모드는 mod_php5 모듈 형태로 통합되었습니다. mod_php5 모듈은 Apache pass PHP 파일 요청을 수신하고, 이러한 요청을 처리한 다음, 처리된 결과를 Apache에 반환하는 것입니다. Apache가 시작되기 전에 구성 파일에서 PHP 모듈(mod_php5)을 구성하면 PHP 모듈은 apache2의 ap_hook_post_config 후크를 등록하고 Apache가 PHP 파일에 대한 요청을 수락하기 시작할 때 이 모듈을 시작합니다. #🎜🎜#

시작 시 이러한 로딩 방법 외에도 Apache 모듈은 런타임 시 동적으로 로드될 수 있습니다. 즉, 소스 코드를 다시 컴파일할 필요 없이 또는 서버를 전혀 중지하지 않고도 서버를 확장할 수 있습니다. 우리가 해야 할 일은 HUP 또는 AP_SIG_GRACEFUL 신호를 서버에 보내 서버에 모듈을 다시 로드하라고 알리는 것뿐입니다. 하지만 동적 로딩 전에 모듈을 동적 링크 라이브러리로 컴파일해야 합니다. 이때 동적 로딩은 동적링크 라이브러리를 로딩하는 것입니다. Apache에서 동적 링크 라이브러리의 처리는 mod_so 모듈을 통해 완료되므로 mod_so 모듈은 동적으로 로드될 수 없으며 Apache의 핵심으로 정적으로 컴파일될 수만 있습니다. 이는 Apache와 함께 시작된다는 의미입니다.

Apache는 모듈을 어떻게 로드하나요? 앞서 언급한 mod_php5 모듈을 예로 들어보겠습니다. 먼저 Apache의 구성 파일인 httpd.conf에 다음 줄을 추가해야 합니다.

LoadModule php5_module modules/mod_php5.so

여기서는 LoadModule 명령을 사용합니다. 명령의 첫 번째 매개변수는 모듈의 이름입니다. 이름은 모듈의 소스 코드에서 찾을 수 있습니다. 구현. 두 번째 옵션은 모듈이 있는 경로입니다. 서버가 실행되는 동안 모듈을 로드해야 하는 경우 HUP 또는 AP_SIG_GRACEFUL 신호를 서버에 보낼 수 있습니다. 신호가 수신되면 Apache는 서버를 다시 시작하지 않고 모듈을 다시 로드합니다.

이 동작 모드는 우리가 Windows 환경에서 Apache 서버를 사용할 때 자주 사용하는 모드입니다. 모듈러(DLL)에서는 웹 서버와 함께 PHP가 시작되어 실행됩니다. (PHP의 운영 효율성을 높이기 위해 CGI 기반의 Apache를 확장한 것입니다.)

5. ISAPI 모드

ISAPIInternet Server Application Program Interface)는 Microsoft에서 제공하는 인터넷 서비스용 API 인터페이스 집합입니다. ISAPI DLL은 사용자 요청에 의해 활성화된 후 사용자의 다른 요청을 기다리고 메모리에 상주할 수 있습니다. 여러 사용자 요청 처리 기능을 하나의 DLL에 설정할 수 있습니다. 또한 ISAPI DLL 응용 프로그램과 WWW 서버가 동일한 프로세스에 있으므로 효율성이 CGI보다 훨씬 높습니다. (Microsoft의 독점성으로 인해 Windows 환경에서만 실행될 수 있습니다.)

PHP는 Apache 모듈입니다. 시스템이 시작된 후 Apache 서버는 요청이 발생하면 메모리에 상주할 여러 프로세스 복사본을 미리 생성합니다. 복사본은 즉시 사용됩니다. 하위 프로세스가 처리에 사용되므로 하위 프로세스 생성으로 인한 지연이 없습니다. 이러한 서버 복사본은 HTTP 요청을 처리한 후 즉시 종료되지 않고 다음 요청을 기다리는 동안 컴퓨터에 남아 있습니다. 클라이언트 브라우저 요청에 대한 응답이 더 빠르고 성능도 더 높습니다.

추천 튜토리얼: PHP 비디오 튜토리얼

위 내용은 PHP에는 여러 가지 시작 모드가 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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