cgi與php的主要區(qū)別有哪些

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

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比淇縣網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式淇縣網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋淇縣地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

區(qū)別:CGI是協(xié)議和標(biāo)準(zhǔn),是一種規(guī)范,不是語(yǔ)言;遵循這個(gè)標(biāo)準(zhǔn)就可以用各種語(yǔ)言(包括PHP)編寫程序處理網(wǎng)頁(yè)請(qǐng)求和返回?cái)?shù)據(jù)到客戶端瀏覽器。而PHP是一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)語(yǔ)言,PHP可以以CGI方式工作,也可以ISAPI、NSAPI等模塊方式工作。

cgi與php的主要區(qū)別有哪些

CGI是通用網(wǎng)關(guān)協(xié)議,是開發(fā)動(dòng)態(tài)網(wǎng)頁(yè)的一個(gè)標(biāo)準(zhǔn),遵循這個(gè)標(biāo)準(zhǔn)就可以用BAT、CMD、sh、PERL、C、C++、PERL以及PHP等語(yǔ)言編寫程序處理網(wǎng)頁(yè)請(qǐng)求和返回?cái)?shù)據(jù)到客戶端瀏覽器。CGI是協(xié)議和標(biāo)準(zhǔn),是一種規(guī)范,不是語(yǔ)言。

cgi是一種接口,不管用什么語(yǔ)言都可以按照這個(gè)接口進(jìn)行實(shí)現(xiàn)。一般服務(wù)器判斷需要調(diào)用cgi程序前,會(huì)把請(qǐng)求的GET參數(shù)放在環(huán)境變量QUERY_STRING里,POST請(qǐng)求內(nèi)容則通過(guò)標(biāo)準(zhǔn)輸入流輸送到cgi程序內(nèi)。cgi程序只需要將HTTP協(xié)議(包括HTTP頭和HTTP Body)打印到標(biāo)準(zhǔn)輸出流stdout,服務(wù)器就會(huì)把它們直接傳輸給瀏覽器。

//c++實(shí)現(xiàn)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,然后扔到服務(wù)器到cgi目錄里。然后訪問(wèn)類似于http://localhost/cgi/test.cgi?a=b&c=d的URL,服務(wù)器就會(huì)把a(bǔ)=b&c=d放到QUERY_STRING環(huán)境變量中傳給test.cgi。最后能看到頁(yè)面上顯示出query string is a=b&c=d。也可以創(chuàng)建一個(gè)表單,把數(shù)據(jù)POST到http://localhost/cgi/test.cgi,然后可以看到頁(yè)面上顯示出所有的POST data。

PHP是一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)語(yǔ)言,主要用于處理瀏覽器提交的數(shù)據(jù)以及返回結(jié)果給瀏覽器。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++寫的程序一毛一樣,我們把它加上“可執(zhí)行屬性”chmod +x testphp.cgi然后扔到cgi目錄,然后訪問(wèn)http://localhost/cgi/testphp.cgi?a=b&c=d,以及用表單post數(shù)據(jù)給它,看到的效果應(yīng)該是一樣的。

所以你也看到了,服務(wù)器調(diào)用CGI程序,它才不管你用啥實(shí)現(xiàn)的,反正接口都定好了,只要按接口來(lái)編程就行。

但一般服務(wù)器調(diào)用PHP和調(diào)用CGI程序的邏輯不一樣。CGI程序需要自己解析QUERY_STRING和POST_DATA,PHP應(yīng)該是通過(guò)另一套擴(kuò)展跟服務(wù)器交互的,所以一般用PHP直接寫網(wǎng)頁(yè)的時(shí)候,寫網(wǎng)頁(yè)的方式跟平時(shí)還真不太一樣,比如說(shuō),服務(wù)器的php擴(kuò)展已經(jīng)幫我們把query string和post data解析成了數(shù)組,我們直接取值就好了:

<?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之后訪問(wèn)http://localhost/test.php?a=b&c=d,或者表單提交內(nèi)容到頁(yè)面??梢钥吹捷敵龅臄?shù)據(jù)都是結(jié)構(gòu)化的,已經(jīng)變成數(shù)組了。而且,HTTP頭也不需要我們自己輸出了(特殊情況除外)。

看完了這篇文章,相信你對(duì)cgi與php的主要區(qū)別有哪些有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

分享名稱:cgi與php的主要區(qū)別有哪些
鏈接地址:http://muchs.cn/article20/gdegjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站ChatGPT、網(wǎng)站營(yíng)銷、網(wǎng)站設(shè)計(jì)App開發(fā)網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管