溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cgi與php的主要區別有哪些

發布時間:2020-08-20 11:39:42 來源:億速云 閱讀:277 作者:小新 欄目:編程語言

小編給大家分享一下cgi與php的主要區別有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

區別: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 << "<h2>query string is :" << queryString << "</h2>" << 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 "<h2>query string is : $queryString</h2>";
} 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,或者表單提交內容到頁面??梢钥吹捷敵龅臄祿际墙Y構化的,已經變成數組了。而且,HTTP頭也不需要我們自己輸出了(特殊情況除外)。

看完了這篇文章,相信你對cgi與php的主要區別有哪些有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女