首頁  >  文章  >  後端開發  >  cgi與php的差別是什麼?

cgi與php的差別是什麼?

青灯夜游
青灯夜游原創
2020-08-19 15:45:432837瀏覽

區別: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 Body)印到標準輸出流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。最後能看到頁面上顯示出query string is a=b&c=d。也可以建立表單,把資料POST到http://localhost/cgi/test.cgi,然後可以看到頁面上顯示所有的POST data。

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,以及用表單post資料給它,看到的效果應該是一樣的。

所以你也看到了,伺服器呼叫CGI程序,它才不管你用啥實現的,反正接口都定好了,只要按接口來編程就行。

但一般伺服器呼叫PHP和呼叫CGI程式的邏輯不一樣。 CGI程式需要自己解析QUERY_STRING和POST_DATA,PHP應該是透過另一套擴充跟伺服器互動的,所以一般用PHP直接寫網頁的時候,寫網頁的方式跟平常還真不太一樣,比如說,伺服器的php擴充已經幫我們把query string和post data解析成了數組,我們直接取值就好了:

<?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