CGI (Common Gateway Interface) 란 무엇입니까?


745

CGI는 공통 게이트웨이 인터페이스입니다. 이름에서 알 수 있듯이 모든 것에 대한 "공통"게이트웨이 인터페이스입니다. 그것은 이름에서 너무 사소하고 순진합니다. 나는 이것을 이해하고이 단어를 만날 때마다 이것을 느꼈다. 그러나 솔직히, 나는하지 않았다. 여전히 혼란 스러워요.

웹 개발 경험이있는 PHP 프로그래머입니다.

웹 서버 (-> 내장 PHP 인터프리터) ----> 서버 측 (PHP) 스크립트 ---> MySQL 서버에 대한 사용자 (클라이언트) 요청.

이제 PHP 스크립트가 MySQL 서버 및 MATLAB 서버 및 다른 서버에서 결과를 가져올 수 있다고 가정하십시오.

이제 PHP Script가 CGI입니까? 웹 서버와 다른 모든 서버 간의 인터페이스 때문에? 모르겠어요 때때로 그들은 기술인 CGI를 부르고 다른 때는 CGI를 프로그램이나 다른 서버라고 부르기도합니다.

  • CGI 란 정확히 무엇입니까?

  • 큰 문제는 /cgi-bin/*.cgi무엇입니까? 이게 뭐야? cgi-bin서버 에서이 디렉토리 가 무엇인지 모르겠습니다 . 왜 * .cgi 확장자를 가지고 있는지 모르겠습니다.

  • 왜 펄은 항상 방해가됩니까? CGI & Perl (언어). 나는 또한이 두 가지에 무슨 일이 일어나고 있는지 모른다. 거의 항상 "CGI & Perl"조합으로이 두 가지를 계속들을 수 있습니다. 이 책은 Perl을 사용한 또 다른 훌륭한 CGI 프로그래밍 예제 입니다. 왜 "PHP / JSP / ASP로 CGI 프로그래밍"을하지 않습니까? 나는 그런 것들을 본 적이 없다.

  • C의 CGI 프로그래밍 은 나를 혼란스럽게합니다. " in C "?? 진심으로 ?? 무슨 말을해야할지 모르겠습니다. 난 그냥 혼란스러워 " in C "?? 이것은 모든 것을 바꿉니다. 프로그램을 컴파일하고 실행해야합니다. 이것은 웹 프로그래밍에 대한 나의 견해를 완전히 바꾼다. 언제 컴파일합니까? 프로그램은 어떻게 실행됩니까 (머신 코드이므로 독립적 인 프로세스로 실행해야합니다). 웹 서버와 어떻게 통신합니까? IPC? 소켓 프로그래밍을 사용하여 모든 서버 (내 예제 ​​MATLAB 및 MySQL)와 인터페이스합니까? 나는 길을 잃었다!

  • 사람들은 CGI가 더 이상 사용되지 않으며 더 이상 사용되지 않는다고 말합니다. 그렇습니까? 최신 업데이트는 무엇입니까?

일단 웹 서버 (Apache HTTPD)에 대한 HTTP PUT 요청 액세스 권한을 부여해야하는 상황이 발생했습니다. 오래 전입니다. 그래서 내가 기억하는 한 이것은 내가 한 일입니다.

  1. 웹 서버가 모든 HTTP PUT 요청을 일부에게 전달하도록 Apache HTTPD의 구성 파일을 편집했습니다 put.php(이 PHP 스크립트를 작성해야 함)

  2. put.php를 구현하여 요청을 처리합니다 (파일을 언급 된 위치에 저장)

사람들은 내가 CGI 스크립트를 작성했다고 말했습니다. 진지하게, 나는 그들이 무엇에 관해 이야기하고 있는지 전혀 모른다.

  • CGI 스크립트를 실제로 작성 했습니까?

내 혼란이 무엇인지 이해했으면 좋겠습니다. (내가 어디에 혼란 스러울 지 모르기 때문에). 답변을 가능한 한 단순하게 유지하도록 요청합니다. 정말 멋진 기술 용어를 이해할 수 없습니다. 적어도이 경우에는 그렇지 않습니다.

편집하다:

이 놀라운 튜토리얼 "CGI Programming Is Simple!"을 찾았습니다 . - 가장 간단한 방법으로 개념을 설명하는 CGI 튜토리얼 . 이 기사를 읽은 후 실제 코드 샘플에 대한 이해를 돕기 위해 C에서 CGI 프로그래밍 시작하기 를 읽어보십시오 . 또한이 튜토리얼에 대한 링크를 Wikipedia의 기사에 추가했습니다. http://en.wikipedia.org/wiki/Common_Gateway_Interface


9
코볼에서 작성된 CGI를 이미 보았습니다. 장난 치지 마!
Luc M

@Luc M. 관심이 있습니다. 어떤 CGI를 의미합니까 (LINQ에 레이 캐스터가 있다는 의미가 있습니까?)
Joe

15
@claws : 주로 구식 인 사람들은 웹 서버를 통해 CGI로 실행되는 실제 실행 방법에 관계없이 모든 코드를 호출합니다. 실제로 작성한 것은 CGI 프로토콜을 통해 실행되거나 실행되지 않을 수있는 PHP 스크립트입니다. 혼란은 코드를 실행하기위한 프로토콜 및 프로토콜을 통해 실행되는 코드 인 CGI의 모호한 의미에서 비롯된 것 같습니다 (나중에 웹 실행 코드를 의미하도록 일반화 됨)
Vinko Vrsalovic

1
90 년대 중반에 나는 하이퍼 카드에 CGI 스크립트 몇 개를 썼다
Neal Davis

@ 조 나는 알림을받지 못했고 오늘이 게시물을 다시 읽고 귀하의 질문을 보았습니다. CGI는 독립 실행 파일로 OpenVMS에 작성되었습니다 (프레임 워크 또는 타사 응용 프로그램은 포함되지 않음 ...)
Luc M

답변:


427

CGI는 웹 서버에 응용 프로그램과 데이터를 전달하는 방법을 알려주는 인터페이스입니다. 보다 구체적으로, 요청 정보가 환경 변수 (예 : 요청 유형, 원격 IP 주소)로 전달되는 방법, 요청 본문이 표준 입력을 통해 전달되는 방법 및 응답이 표준 출력을 통해 전달되는 방법을 설명합니다. 자세한 내용 은 CGI 사양 을 참조하십시오.

이미지를 사용하려면

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

전부는 아니지만 대부분 웹 서버는 프로그램을 'CGI'로 실행하도록 구성 할 수 있습니다. 즉, 웹 서버는 요청을 받으면 데이터를 특정 프로그램에 전달하여 일부 환경 변수를 설정하고 표준 입력 및 표준 출력을 통해 매개 변수를 마샬링하여 프로그램이 어디에서 무엇을 찾아야하는지 알 수 있습니다.

웹 서버와 프로그램 모두 CGI 작동 방식을 알고 있다면 웹에서 모든 실행 코드를 실행할 수 있다는 것이 주된 이점입니다. 그렇기 때문에 일반적인 CGI 가능 웹 서버로 C 또는 Bash로 웹 프로그램을 작성할 수 있습니다. 그리고 대부분의 프로그래밍 환경은 표준 입력, 표준 출력 및 환경 변수를 쉽게 사용할 수 있습니다.

귀하의 경우에는 스크립트와 웹 서버 간의 통신 수단으로 PHP 전용의 다른 수단을 사용했을 가능성이 높습니다. 질문에서 언급했듯이 mod_php라는 내장 인터프리터입니다.

따라서 귀하의 질문에 대답하십시오 :

CGI 란 정확히 무엇입니까?

위 참조.

/cgi-bin/*.cgi의 가장 큰 장점은 무엇입니까? 이게 뭐야? 서버 에서이 cgi-bin 디렉토리가 무엇인지 모르겠습니다. 왜 * .cgi 확장자를 가지고 있는지 모르겠습니다.

그것은 cgi 프로그램의 전통적인 장소입니다. 많은 웹 서버에는이 디렉토리가 CGI 프로그램으로 모든 바이너리를 실행하도록 미리 구성되어 있습니다. .cgi 확장자는 CGI를 통해 작동 할 것으로 예상되는 실행 파일을 나타냅니다.

왜 펄은 항상 방해가됩니까? CGI & Perl (언어). 나는 또한이 두 가지에 대해 잘 모른다. 거의 항상 "CGI & Perl"을 조합하여이 두 가지를 계속들을 수 있습니다. 이 책은 Perl을 사용한 CGI 프로그래밍의 또 다른 좋은 예입니다. "PHP / JSP / ASP를 사용한 CGI 프로그래밍" 나는 그런 것들을 본 적이 없다.

Perl은 고대이기 때문에 (CGI가 이미 오래되었을 때 모든 것이 존재했던 PHP, JSP 및 ASP보다 오래되었고, CGI가 새로 생겼을 때 Perl이 존재했기 때문에) CGI를 통해 동적 웹 페이지를 제공하는 매우 훌륭한 언어로 유명해졌습니다. 요즘 웹 서버에서 주로 mod_perl 을 실행하는 다른 대안이 있습니다 .

C에서 CGI 프로그래밍은 혼란 스러워요. C에서 ?? 진심으로 ?? 무슨 말을해야할지 모르겠습니다. 나는 단지 혼란스러워한다. "in C"?? 이것은 모든 것을 바꾸고있다. 프로그램은 컴파일되고 실행될 필요가있다. 이것은 웹 프로그래밍에 대한 나의 관점을 완전히 바꾸어 놓는다. 나는 언제 컴파일 하는가? (프로그램은 어떻게 실행 되는가? 웹 서버와 IPC는 어떻게 통신하고 소켓 프로그래밍을 사용하여 모든 서버 (내 예제에서는 MATLAB & MySQL)와 인터페이스합니까?

실행 파일을 한 번 컴파일하면 웹 서버가 프로그램을 실행하고 요청의 데이터를 프로그램에 전달하고 수신 된 응답을 출력합니다. CGI는 각 요청마다 하나의 프로그램 인스턴스가 시작되도록 지정합니다. 이것이 오늘날 CGI가 비효율적이고 쓸모없는 이유입니다.

그들은 CGI가 더 이상 사용되지 않는다고 말합니다. 더 이상 사용하지 않습니다. 그렇습니까? 최신 업데이트는 무엇입니까?

CGI는 성능이 가장 중요하지 않고 간단한 코드 실행 수단이 필요한 경우에도 여전히 사용됩니다. 앞에서 언급 한 이유로 비효율적이며 웹 환경에서 프로그램을 실행하는 더 현대적인 방법이 있습니다. 현재 가장 유명한 것은 FastCGI 입니다.


24
보다 구체적으로 요청 정보가 환경 변수 (예 : 요청 유형, 원격 IP 주소)로 전달되는 방법, 요청 본문이 표준 입력을 통해 전달되는 방법 및 응답이 표준 출력을 통해 전달되는 방법을 설명합니다. 자세한 내용 은 CGI 사양 ( hoohoo.ncsa.illinois.edu/cgi )을 참조하십시오.
daf

3
Server side Program당신의 그림에서 내 PHP 스크립트 라고 가정 합니다. 그래서 CGI 프로그래밍을 한 적이 없었습니까? 나는 웹 서버와 내 PHP 스크립트 사이에 나오는 것을 쓰지 않았기 때문에. 제길!! 이것은 나를 죽인다.
발톱

4
PHP는 여전히 CGI 프로토콜에 크게 의존하고 있으며 $ _SERVER의 내용은 대부분 CGI 사양과 동일합니다. "CGI 프로그래밍"은 항상 프로토콜 자체의 구현이 아니라 요청을 처리하는 프로그램을 의미했습니다. 1993 년 웹 프로그래밍 개척자에게 PHP로 무엇을했는지 설명한다면, 그는 CGI 프로그래밍의 고급 (아마도 위태로운) 형태라고 생각할 것입니다.
Michael Borgwardt

5
@Michael : 그러나 mod_php를 통해 실행할 때 CGI가 전혀 아닙니다 (기반이더라도). 그리고 CGI가 프로토콜과이를 통해 실행되는 스크립트를 모두 언급한다는 것에 동의합니다.
Vinko Vrsalovic

2
@Vinko Vrsalovic : CGI가 Perl, C 또는 Web Server에서 실행할 다른 언어에 대한 인터페이스 인 경우 PHP가 Apache에서 실행하는 데 사용하는 인터페이스보다 어떤 인터페이스가 있습니까 ???????? PHP는 CGI 사양에 따라 제공됩니까?
hardik

63

CGI 란 정확히 무엇입니까?

웹 서버가 예를 들어 파일 대신 프로그램에서 데이터를 가져 오는 수단입니다.

/cgi-bin/*.cgi의 가장 큰 장점은 무엇입니까?

별거 아냐 그것은 단지 협약입니다.

서버 에서이 cgi-bin 디렉토리가 무엇인지 모르겠습니다. 왜 * .cgi 확장자를 가지고 있는지 모르겠습니다.

서버는 파일과 관련하여 무엇을해야하는지 알아야합니다 (즉, 단순히 서비스하는 대신 실행하는 프로그램으로 취급). .html 확장자가 있으면 text / html 컨텐츠 유형을 사용하도록 지시합니다. 확장자가 .cgi 인 경우 프로그램으로 실행하도록 지시합니다.

실행 파일을 별도의 디렉토리에 유지하면 서버가 잘못 구성된 경우 잘못된 파일을 실행하거나 CGI 프로그램을 원시 데이터로 제공하지 못하도록 보호 할 수 있습니다.

왜 펄은 항상 방해가됩니까?

그렇지 않습니다. Perl은 CGI와 동시에 크고 유명했습니다.

나는 수년간 Perl CGI를 사용하지 않았습니다. 나는 mod_perl을 오랫동안 사용하고 있었고 요즘에는 FastCGI와 함께 PSGI / Plack을 선호합니다.

이 책은 Perl을 사용한 CGI 프로그래밍의 또 다른 좋은 예입니다. "PHP / JSP / ASP를 사용한 CGI 프로그래밍"

CGI는 매우 효율적이지 않습니다. 웹 서버에서 프로그램과 대화하는 더 좋은 방법은 PHP와 거의 동시에 나타났습니다. JSP와 ASP 프로그램과 대화하는 다른 방법입니다.

C에서 CGI 프로그래밍은 혼란 스러워요. C에서 ?? 진심으로 ??

프로그래밍 언어입니까?

언제 컴파일합니까?

  1. 코드 작성
  2. 엮다
  3. 액세스 URL
  4. 웹 서버는 프로그램을 실행

프로그램이 실행되는 방법 (머신 코드이므로 독립적 인 프로세스로 실행해야 함)

독립 프로세스로 실행할 필요는 없지만 (C로 Apache 모듈을 작성할 수 있음) CGI의 전체 개념은 외부 프로세스를 시작한다는 것입니다.

웹 서버와 어떻게 통신합니까? IPC?

CGI 사양에 정의 된 STDIN / STDOUT 및 환경 변수

소켓 프로그래밍을 사용하여 모든 서버 (내 예제 ​​MATLAB 및 MySQL)와 인터페이스합니까?

당신이 좋아하고 지원되는 방법을 사용합니다.

그들은 CGI가 감가 상각되었다고 말합니다. 더 이상 사용하지 않습니다. 그렇습니까?

CGI는 비효율적이고 느리고 단순합니다. 사용되는 경우가 거의 없기 때문에 단순하지 않기 때문입니다. 성능이 그다지 중요하지 않은 경우 단순성에 큰 가치가 있습니다.

최신 업데이트는 무엇입니까?

1.1


1. 코드 작성 2. 컴파일 3. 액세스 URL 4. 웹 서버가 프로그램을 실행합니다. || 그러나 웹 서버 는 컴파일 된 실행 프로그램을 어디에 배치 하는지 어떻게 알 수 있습니까? 어떤 실행 프로그램이 실행되는지 어떻게 알 수 있습니까?
Pacerier

@Pacerier — 정적 파일이 요청 된 경우 클라이언트에 보낼 정적 파일을 알고있는 것과 같은 방식입니다.
Quentin

41

CGI는 웹 서버 (HTTP 서버)와 특정 요청을 처리하는 특정 유형의 실행 프로그램 간의 인터페이스 사양입니다.

해당 요청의 특정 특성이 해당 프로그램의 환경에 전달되어야하는 방법과 프로그램이 서버로 응답을 다시 전달하는 방법 및 서버가 응답을 '완료'하여 원래 HTTP 요청에 대한 올바른 응답을 형성하는 방법을 설명합니다.

한동안 CGI는 IETF 인터넷 초안이었으며 만료일이있었습니다. 업데이트없이 만료되었으므로 CGI '표준'이 없습니다. 현재는 정보를 제공하는 RFC이지만 일반적인 문서로 표준 자체는 아닙니다. rfc3875.txt , rfc3875.html

CGI 인터페이스를 구현하는 프로그램은 대상 시스템에서 실행할 수있는 모든 언어로 작성할 수 있습니다. 환경 변수 및 일반적으로 표준 입력 에 액세스 할 수 있어야하고 표준 출력에서 출력을 생성해야 합니다 .

C와 같은 컴파일 된 언어는 일반적으로 CGI 환경에보다 쉽게 ​​액세스하기 위해 라이브러리를 사용하는 perl과 같은 스크립팅 언어로 사용되었습니다.

CGI의 가장 큰 단점 중 하나는 요청마다 상태를 유지하는 것이 주요 성능 문제가 될 수 있으므로 각 요청마다 새로운 프로그램이 생성된다는 것입니다. 상태는 쿠키로 처리되거나 URL로 인코딩 될 수 있지만 크기가 커지면 다른 곳에 저장하고 인코딩 된 URL 정보 또는 쿠키에서 키를 입력해야합니다. 각 CGI 호출은 저장 어딘가에서 저장 상태를 다시로드해야합니다.

이러한 이유로 요청과 세션에 대한 매우 간단한 인터페이스로 인해 웹 서버와 응용 프로그램 간의 통합 환경이 훨씬 더 유명합니다. 아파치를 사용하는 최신 PHP 구현과 같은 환경은 대상 언어를 웹 서버와 훨씬 더 잘 통합하고 http 요청을 효율적으로 제공하는 데 필요한 요청 및 세션 객체에 대한 액세스를 제공합니다. HTTP 요청을 처리하기 위해 '프로그램'을 작성하는 훨씬 쉽고 풍부한 방법을 제공합니다.

CGI 스크립트를 작성했는지 여부는 해석에 달려 있습니다. 확실히 하나의 작업을 수행했지만 스크립트와 서버 간의 인터페이스가 CGI 인터페이스가 아닌 모듈로 php를 실행하는 것이 훨씬 일반적입니다.


1
귀찮음. 나는 다른 대답이 없을 때 이것을 쓰기 시작했지만 길을 잃었습니다. 이제 목록에서 # 8에 관한 것입니다. 지금 삭제하겠다는 의지가 없었으며 나중에 다시 삭제하겠습니다.
CB Bailey

6
이봐 요. 삭제하지 마십시오. 좀 더 명확한 방법으로 말합니다. 도움이되었습니다. 다른 사람들도 그렇게 생각할 수 있습니다. :)
발톱

1
좋아, 나는 조금 남겨 두겠습니다. 그러나 누군가가 더 나은 구절을 더 완전한 대답 중 하나로 통합하면 좋을 것입니다. 그렇다면 우리는 더 확실한 답을 얻었을 것입니다.
CB Bailey

18

CGI는 RFC 3875에 명시되어 있지만, 원래 NCSA 문서 의 "공식적인"목록입니다 . 기본적으로 CGI는 HTTP 요청에 대한 데이터를 웹 서버에서 프로그램으로 전달하여 처리 할 수있는 프로토콜을 정의합니다. 사양이 작성된 시점 (1993)에는 대부분의 웹 서버에 정적 페이지 만 포함되어 있었으며 "웹 앱"은 드물고 새로운 것이기 때문에 "정상"정적 콘텐츠와 구분하는 것이 자연스러워 보였습니다. cgi-bin정적 콘텐츠와 별개로 끝나고로 끝나도록합니다 .cgi.

현재 여기에는 PHP와 같은 전용 "웹 프로그래밍 언어"도 없었고 C는 지배적 인 휴대용 프로그래밍 언어였습니다. 그래서 많은 사람들이 C로 CGI 스크립트를 작성했습니다. 그러나 Perl은 이런 종류의 언어에 더 적합한 것으로 판명되었습니다. CGI는 Perl과 거의 동의어가되었습니다. 그런 다음 Java 서블릿, PHP 및 기타 많은 것들이 있었고 Perl의 시장 점유율을 상당 부분 차지했습니다.


PHP가 왜 "전용 웹 프로그래밍 언어"입니까? PHP는 범용 언어이며 사람들 이 UI 앱에도 사용하고 있습니다.
Pacerier

@Pacerier : 웹 페이지를 생성하기위한 프로그래밍 언어로 설계되었으며, 사용자의 99.9 %가이를 사용합니다. 그것의 이름 에도 있습니다. 다른 것을 주장하는 것은 무의미한 머리카락입니다. UI 앱, 과학 컴퓨팅 또는 임베디드 프로그래밍에 사용하는 경우 괜찮습니다. 아무도 허락하지 않는다고 말하는 사람은 없습니다.
Michael Borgwardt

13

Wikipedia의 CGI 를 살펴보십시오 . CGI는 웹 서버와 외부 프로그램 또는 입력을 처리하고 브라우저로 전송되는 출력을 생성하는 스크립트 간의 프로토콜 입니다.

CGI는 단순히 웹 서버와 프로그램이 더 이상 아무것도없이 통신 할 수있는 방법입니다. 여기서 서버는 네트워크 연결 및 HTTP 프로토콜을 관리하고 프로그램은 입력을 처리하고 브라우저로 전송되는 출력을 생성합니다. CGI 스크립트는 기본적으로 웹 서버에서 실행할 수 있고 CGI 프로토콜을 따르는 모든 프로그램 일 수 있습니다. 따라서 CGI 프로그램은 예를 들어 C에서 구현 될 수 있습니다. 그러나 C가 작업에 적합하지 않기 때문에 극히 드문 경우입니다.

/cgi-bin/*.cgi사람들이 일반적으로 CGI 스크립트를 넣는 경로입니다. 웹 서버는 일반적으로 해당 경로에서 CGI 스크립트를 가져 오도록 기본적으로 구성됩니다.

CGI 스크립트는 PHP에서도 구현 될 수 있지만 모든 PHP 프로그램은 CGI 스크립트가 아닙니다. 웹 서버에 PHP 인터프리터 (예 : Apache의 mod_php)가 내장되어 있으면 웹 서버와 인터프리터 사이의보다 효율적인 직접 프로토콜로 CGI 단계를 건너 뜁니다.

CGI 스크립트를 구현했는지 여부는 웹 서버에서 스크립트를 실행하는 방법에 따라 다릅니다.


12

CGI는 본질적으로 요청을 웹 서버로 구성된 모든 인터프리터 에게 전달합니다. 이것은 Perl, Python, PHP, Ruby, C 일 수 있습니다. Perl은 그 당시 CGI와 관련하여 자주 볼 수 있었던 가장 일반적인 시대였습니다.

CGI는 죽지 않았습니다. 실제로 대부분의 대규모 호스팅 회사는 mod_php와 달리 PHP를 CGI로 실행합니다. mod_php보다 속도는 느리지 만 사용자 레벨 구성 및 기타 사항을 제공하기 때문입니다. 루비와 파이썬도 일반적으로 CGI로 실행됩니다. 여기서 중요한 차이점은 서버 모듈이 실제 서버 소프트웨어의 일부로 실행된다는 것입니다. CGI와 마찬가지로 서버 외부에서 서버는 CGI 모듈을 사용하여 외부 통역사로 데이터를 전달하고받는 방법을 결정합니다.


2
downvoting은 아니지만 대부분의 python 웹 설치는 mod_wsgi 또는 mod_python의 위치를 ​​보았습니다.
ChristopheD

이것은 대부분의 사람들이 CGI 스크립트라는 용어를 사용하는 방식이지만, 그 용어가 의미하는 것은 아닙니다.
reinierpost

통역사라고 말하지만 C는 거의 해석되지 않으며 C 컴파일 된 프로그램과 같은 컴파일 된 프로그램을 CGI에 사용할 수 있습니다.
user34660

11

CGI는 요청을 처리하기 위해 웹 서버가 외부 프로그램을 호출하는 메커니즘으로, 환경 변수 및 표준 입력을 사용하여 요청 데이터를 프로그램에 공급합니다. CGI 프로그램을 다른 언어와 비교하여 작성하는 것이 더 쉽지만 외부 프로그램이 작성된 정확한 언어는 중요하지 않습니다.

CGI 스크립트에는 실행 권한이 필요하기 때문에 기본적으로 httpd는 cgi-bin디렉토리의 CGI 프로그램 만 보안 목적으로 실행되도록 할 수 있습니다.

대부분의 PHP 스크립트는를 통해 웹 서버 프로세스에서 실행됩니다 mod_php. 이것은 CGI가 아닙니다.

요청마다 프로그램 (및 관련 통역사)을 시작해야하므로 CGI가 느립니다. 현대의 대안은 mod_php에 의해 사용되는 임베디드 실행과 FastCGI에 의해 사용되는 장기 실행 프로세스입니다. 특정 언어는 이러한 메커니즘을 구현하는 고유 한 방법이있을 수 있으므로 CGI를 사용하기 전에 주변에 문의하십시오.


@Ignacio Vazquez-Abrams : CGI 인터페이스가 새 프로세스를 생성하면 CGI와 mod_php의 실행 차이가 CGI 리소스에 대한 요청을받을 때마다 CGI 리소스에 대한 요청을받을 때마다 ??????? CGI와 mod_php는 같은 ???? 또는 mod_php가 아닌 CGI Interface에서 실행되는 PHP 스크립트를 작성할 수 있습니까 ???
hardik

@Hardik : mod_php는 자체 프로세스를 담당하는 HTTPd의 일부로 실행됩니다.
Ignacio Vazquez-Abrams

이 '외부 프로그램'은 무엇입니까? PHP-fpm으로 PHP를 실행하면 인터프리터입니까?
slier

@ slier : 웹 서버가 아닌 임의의 프로그램입니다.
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams 그래서 interpreterphp-fpm으로 PHP를 실행 하는 if 메신저 라고 가정하는 것이 안전 합니까?
slier

7

CGI가 아닌 것이 무엇인지 알고 싶을 수도 있고, 대답은 웹 서버의 모듈입니다 (아파치를 실행한다고 가정하면). 그리고 CGI가 필요하고 외부 프로그램, 스레드, PERL, PHP, C 응용 프로그램 서버를 인스턴스화 해야하는 모든 것이 있기 때문에 모듈로 실행할 때 프로그램은 웹 서버 (apache)입니다.

이 모든 것 때문에 많은 성능, 보안, 이식성 문제가 발생합니다. 그러나 CGI가 아닌 것이 무엇인지 먼저 알고, 그것이 무엇인지 이해하는 것이 좋습니다.


7

실제 예 : 웹 사이트에 표시해야하는 복잡한 데이터베이스. 데이터베이스는 1986 년경 어딘가에 설계되었으므로 디스크 공간을 절약하기 위해 많은 데이터가 다른 방식으로 압축되었습니다.

개발이 진행됨에 따라 개발자는 정렬 알고리즘이 비정상적이기 때문에 더 이상 SQL만으로 복잡한 데이터 요청을 해결할 수 없었습니다.

세 가지 합리적인 솔루션이 있습니다.

  1. 빠르고 더러운 : 정렬되지 않은 데이터를 PHP로 보내서 정렬하십시오. 페이지가 호출 될 때마다 반복되기 때문에 분명히 매우 비싼 솔루션
  2. 데이터베이스 엔진에 플러그인을 작성했지만 관리자가 서버에서 외부 코드를 실행할 수 있도록 준비하지 않았거나
  3. 프로그램 (C, Perl 등)에서 데이터를 처리하고 HTML을 출력 할 수 있습니다. 프로그램 자체는 / cgi-bin에 들어가며 PHP가 아닌 웹 서버 (예 : Apache)에 의해 직접 호출됩니다.

CGI는 솔루션 # 3에서 스크립트를 실행하고 그 효과를 브라우저에 출력합니다. 컴파일 된 프로그램의 속도, SQL보다 언어의 유연성이 뛰어나고 SQL 서버에 플러그인을 작성할 필요가 없습니다. (다시 말하면, 이것은 SQL과 C에 특정한 예입니다)


1
나에게 가장 좋은 대답은 알았다.
Daniel Katz

7

CGI 스크립트는 콘솔 / 쉘 프로그램입니다. Windows에서 "명령 프롬프트"창을 사용하면 콘솔 프로그램이 실행됩니다. 웹 서버는 CGI 스크립트를 실행할 때 환경 변수 또는 "표준 입력"을 사용하여 콘솔 / 쉘 프로그램에 입력을 제공합니다. 표준 입력은 콘솔 / 쉘 프로그램에 데이터를 입력하는 것과 같습니다. CGI 스크립트의 경우 웹 서버가 입력을 수행합니다. CGI 스크립트는 데이터를 "표준 출력"에 기록하고 해당 출력은 HTML 페이지로 클라이언트 (웹 브라우저)에 전송됩니다. 표준 출력은 웹 서버가 읽고 출력하는 것을 제외하고는 콘솔 / 쉘 프로그램에서 볼 수있는 출력과 같습니다.

CGI 스크립트는 브라우저에서 실행할 수 있습니다. URI는 일반적으로 CGI 스크립트에 제공되는 쿼리 문자열을 포함합니다. 메소드가 "get"이면 쿼리 문자열은 QUERY_STRING이라는 환경 변수의 CGI 스크립트에 제공됩니다. 메소드가 "포스트"인 경우 표준 입력을 사용하여 쿼리 문자열이 CGI 스크립트에 제공됩니다 (CGI 스크립트는 표준 입력에서 쿼리 문자열을 읽습니다).

CGI 스크립트의 초기 사용은 양식을 처리하는 것이 었습니다. HTML의 시작 부분에서 HTML 양식은 일반적으로 "action"속성과 "submit"버튼으로 지정된 버튼을 가졌습니다. 제출 단추를 누르면 "action"속성에 지정된 URI가 쿼리 문자열로 전송 된 양식의 데이터와 함께 서버로 전송됩니다. "action"이 CGI 스크립트를 지정하면 CGI 스크립트가 실행되고 HTML 페이지가 생성됩니다.

RFC 3875 "CGI (Common Gateway Interface)"는 환경 변수가 "C 라이브러리 루틴 getenv () 또는 변수 환경에 의해 액세스된다"고 말하는 것처럼 C를 사용하여 CGI를 부분적으로 정의합니다.

C / C ++를 사용하여 CGI 스크립트를 개발하고 Microsoft Visual Studio를 사용하여이를 수행하는 경우 콘솔 프로그램을 개발하게됩니다.


"CGI 스크립트"는 광범위한 용어이며 실행 파일도 포함 할 수 있습니다.
71GA

6

CGI는 작성하는 프로그램 (또는 웹 API)이며 웹 서버 사이트에 저장합니다. CGI는 파일입니다.

이 파일은 웹 서버에 앉아 기다립니다. 클라이언트 브라우저가 CGI 파일을 실행하기 위해 웹 서버에 요청을 보내면 웹 서버는 서버 사이트에서 CGI 파일을 실행합니다. 이 CGI 프로그램의 입력은 클라이언트 브라우저에서 온 것입니다. 이 CGI 프로그램의 출력은 브라우저로 전송됩니다.

CGI 프로그램 작성에 사용하는 언어는 무엇입니까? 다른 게시물에는 이미 c, java, php, perl 등이 있습니다.


4

CGI의 기본 개념은 프로그램 / 스크립트 (Perl 또는 C)가 STDIN(요청 데이터) 를 통해 입력을 수신 하고 STDOUT(에코, printf명령문)을 통해 데이터를 출력 한다는 것입니다.

대부분의 PHP 스크립트가 적합하지 않은 이유 는 PHP Apache 모듈 에서 실행되기 때문 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.