>백엔드 개발 >PHP 문제 >CGI와 PHP의 차이점은 무엇입니까?

CGI와 PHP의 차이점은 무엇입니까?

青灯夜游
青灯夜游원래의
2020-08-19 15:45:432875검색

차이점: CGI는 언어가 아닌 프로토콜 및 표준이며 사양입니다. 이 표준을 따르면 다양한 언어(PHP 포함)로 프로그램을 작성하여 웹 페이지 요청을 처리하고 데이터를 클라이언트 브라우저에 반환할 수 있습니다. PHP는 동적 웹 개발 언어입니다. PHP는 CGI 모드나 ISAPI 및 NSAPI와 같은 모듈에서 작동할 수 있습니다.

CGI와 PHP의 차이점은 무엇입니까?

CGI는 범용 게이트웨이 프로토콜이자 동적 웹 페이지 개발을 위한 표준입니다 이 표준을 따르면 BAT, CMD, sh, PERL, C, C++, PERL 및 PHP를 사용하여 프로그램을 작성할 수 있습니다. 웹페이지 요청을 처리하고 클라이언트 브라우저에 데이터를 반환합니다. CGI는 언어가 아닌 프로토콜이자 표준이며 사양입니다.

cgi는 인터페이스입니다. 어떤 언어를 사용하든 이 인터페이스에 따라 구현할 수 있습니다. 일반적으로 서버는 cgi 프로그램을 호출해야 한다고 결정하기 전에 요청된 GET 매개변수를 환경 변수 QUERY_STRING에 배치하고 POST 요청 내용은 표준 입력 스트림을 통해 cgi 프로그램으로 전송됩니다. cgi 프로그램은 HTTP 프로토콜(HTTP 헤더 및 HTTP 본문 포함)을 표준 출력 스트림 stdout으로 인쇄하기만 하면 되며 서버는 이를 브라우저에 직접 전송합니다.

//c++实现cgi接口,打印query string和post data
#include <iostream>
 
using namespace std;
 
int main() {
    cout << "Content-type:text/html\n\n";
    const char *queryString = getenv("QUERY_STRING");
    if (queryString != NULL) {
        cout << "<h1>query string is :" << queryString << "</h1>" << endl;
    } else {
        cout << "<p>No query string</p>" << endl;
    }
     
    string postData, tmpData;
    while(cin >> tmpData) {
        postData += tmpData;
    }
    if (postData != "") {
        cout << "<div> " << postData << " </div>" << endl;
    } else {
        cout << "<p>No post data</p>" << endl;
    }
     
    return 0;
}

컴파일하고 이름을 test.cgi로 지정한 다음 서버의 cgi 디렉터리에 넣습니다. 그런 다음 http://localhost/cgi/test.cgi?a=b&c=d와 유사한 URL에 액세스하면 서버는 a=b&c=d를 QUERY_STRING 환경 변수에 넣고 이를 test.cgi에 전달합니다. 마지막으로 쿼리 문자열이 a=b&c=d인 것을 페이지에 표시하는 것을 볼 수 있습니다. 또한 http://localhost/cgi/test.cgi에 대한 양식과 POST 데이터를 생성할 수 있으며, 그러면 페이지에 표시된 모든 POST 데이터를 볼 수 있습니다.

PHP는 주로 브라우저에서 제출된 데이터를 처리하고 결과를 브라우저에 반환하는 데 사용되는 동적 웹 개발 언어입니다. PHP는 CGI 모드나 ISAPI, NSAPI와 같은 모듈에서 작동할 수 있습니다.

PHP로 CGI 프로그램 작성:

#!/usr/env php
<?php
echo "Content-type:text/html\n\n";
 
$queryString = $_ENV("QUERY_STRING");
if ($queryString != NULL) {
    echo "<h1>query string is : $queryString</h1>";
} else {
    echo "<p>No query string</p>";
}
 
$postData = file_get_contents("php://stdin");
if ($postData != "") {
    echo "<div> $postData </div>";
} else {
    echo "<p>No post data</p>";
}
?>

좋아, 그 기능은 위의 C++로 작성된 프로그램과 정확히 동일합니다. chmod +x testphp.cgi에 "실행 가능 속성"을 추가한 다음 cgi 디렉토리로 이동한 다음 http://localhost/cgi/testphp.cgi?a=b&c=d를 방문하고 여기에 양식 게시 데이터를 사용하면 효과는 동일해야 합니다.

그래서 서버가 CGI 프로그램을 호출할 때 이를 구현하는 데 무엇을 사용하든 상관하지 않는다는 것도 보셨을 겁니다. 어쨌든 인터페이스는 이미 설정되어 있으므로 인터페이스에 따라 프로그래밍하면 됩니다.

그러나 일반적으로 PHP를 호출하는 서버의 논리와 CGI 프로그램을 호출하는 논리는 다릅니다. CGI 프로그램은 QUERY_STRING 및 POST_DATA를 자체적으로 구문 분석해야 합니다. PHP는 다른 확장 세트를 통해 서버와 상호 작용해야 합니다. 따라서 웹 페이지를 직접 작성하기 위해 PHP를 사용하는 경우 웹 페이지를 작성하는 방식은 평소와 다릅니다. 서버의 PHP 확장 기능을 사용하면 쿼리 문자열을 구문 분석하고 데이터를 배열에 게시할 수 있습니다.

<?php
 
if (isset($_GET)) {
    print_r($_GET);
} else {
    echo "<p>No query string</p>";
}
 
if (isset($_POST)) {
    print_r($_POST);
} else {
    echo "<p>No post data</p>";
}
?>

test.php로 저장한 다음 http://localhost/test.php를 방문하세요. a=b&c=d, 또는 양식이 페이지에 콘텐츠를 제출합니다. 출력 데이터가 구조화되어 배열이 된 것을 볼 수 있습니다. 게다가 더 이상 HTTP 헤더를 직접 출력할 필요가 없습니다(특별한 상황을 제외하고).

더 많은 관련 지식을 보려면 PHP 중국어 웹사이트를 방문하세요!

위 내용은 CGI와 PHP의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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