php的工作模式cgi(PHP是什麼工作)

本文目錄一覽:

PHP運行模式是ISAPI和CGI的區別?

ISAPI執行方式是以DLL動態庫的形式使用,它能實現CGI提供的全部功能,並在此基礎上進行了擴展,可以在被用戶請求後執行,在處理完一個用戶請求後不會馬上消失,這樣來提高程序的執行效率;

CGI執行方式,把網頁和WEB服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平台性能極佳,幾乎可以在任何操作系統上實現。 CGI方式在遇到連接請求(用戶請求)先要創建cgi的子進程,激活一個CGI進程,然後處理請求,處理完後結束這個子進程。這就是fork-and-execute模式。所以用cgi 方式的服務器有多少連接請求就會有多少cgi子進程,子進程反覆加載是cgi性能低下的主要原因。都會當用戶請求數量非常多時,會大量擠占系統的資源如內存,CPU時間等,造成效能低下。

什麼是PHP的CGI模式

CGI即通用網關接口(Common Gateway Interface),它是一段程序,通俗的講CGI就象是一座橋,把網頁和Web服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平台性能極佳,幾乎可以在任何操作系統上實現。

服務器的php運行是php-cgi模式

檢查 PHPINFO 里 確定是ISAPI了嗎?

可以設置每個網站運行的帳號 不用默認的IIS_帳號 這樣即安全 又可以在任務管理器中跟蹤….

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  “h1query string is :”  queryString  “/h1”  endl;

    } else {

        cout  “pNo query string/p”  endl;

    }

    

    string postData, tmpData;

    while(cin  tmpData) {

        postData += tmpData;

    }

    if (postData != “”) {

        cout  “div ”  postData  ” /div”  endl;

    } else {

        cout  “pNo post data/p”  endl;

    }

    

    return 0;

}

把它編譯好,命名為test.cgi,然後扔到服務器到cgi目錄里。然後訪問類似於;c=d的URL,服務器就會把a=bc=d放到QUERY_STRING環境變量中傳給test.cgi。最後能看到頁面上顯示出query string is a=bc=d。也可以創建一個表單,把數據POST到,然後可以看到頁面上顯示出所有的POST data。

php是一種腳本語言,它可以用來做很多事。。。比如說用來寫CGI程序:

#!/usr/env php

?php

echo “Content-type:text/html\n\n”;

$queryString = $_ENV(“QUERY_STRING”);

if ($queryString != NULL) {

    echo “h1query string is : $queryString/h1”;

} else {

    echo “pNo query string/p”;

}

$postData = file_get_contents(“php://stdin”);

if ($postData != “”) {

    echo “div $postData /div”;

} else {

    echo “pNo post data/p”;

}

?

好吧它的功能跟上面C++寫的程序一毛一樣,我們把它加上「可執行屬性」chmod +x testphp.cgi然後扔到cgi目錄,然後訪問;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 “pNo query string/p”;

}

if (isset($_POST)) {

    print_r($_POST);

} else {

    echo “pNo post data/p”;

}

?

存成test.php之後訪問;c=d,或者表單提交內容到頁面。可以看到輸出的數據都是結構化的,已經變成數組了。而且,HTTP頭也不需要我們自己輸出了(特殊情況除外)。

php 與 php-cgi問題

建議你暫時放開CGI,實在放不下就看看下面的啰嗦:CGI是一種協議,是WEB服務器調用可執行程序的協議。PHP一般有兩種工作模式,一是作為模塊,一是作為CGI。因此CGI和PHP就發生了關係。

什麼是CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI

CGI全稱是「公共網關接口」(Common

Gateway

Interface),HTTP服務器與你的或其它機器上的程序進行「交談」的一種工具,其程序須運行在網絡服務器上。

FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行着,只要激活後,不會每次都要花費時間去fork一次(這是CGI最為人詬病的fork-and-execute

模式)。它還支持分佈式的運算,

FastCGI

程序可以在網站服務器以外的主機上執行並且接受來自其它網站服務器來的請求。

PHP-CGI是PHP自帶的FastCGI管理器。

PHP-FPM是一個PHP

FastCGI管理器,是只用於PHP的

Spawn-FCGI是一個通用的FastCGI管理服務器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI進行FastCGI模式下的管理工作,不過有不少缺點。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/307077.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 18:06
下一篇 2025-01-02 18:06

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Git config命令用法介紹:用正確的郵箱保障開發工作

    本文將詳細介紹如何使用git config命令配置Git的全局和本地用戶信息,特別是如何正確使用用戶郵箱,保障Git操作的正常進行。 一、git config命令介紹 Git中的每…

    編程 2025-04-29
  • 自學Python能否找到工作

    自學Python的人越來越多,大家都知道Python是一門很受歡迎的語言,但是很多人還是會擔心自學Python後能否找到工作。那麼,從以下幾個方面來分析一下自學Python能否找到…

    編程 2025-04-28
  • 學Python可以應聘哪些工作?

    Python是近年來最熱門的編程語言之一,它具有簡潔易學、高效靈活等特點,廣泛應用於數據分析、人工智能、爬蟲、Web開發等領域。下面將從不同方面介紹,學Python後可以應聘哪些工…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • 類加載的過程中,準備的工作

    類加載是Java中非常重要和複雜的一個過程。在類加載的過程中,準備階段是其中一個非常重要的步驟。準備階段是在類加載的連接階段中的一個子階段,它的主要任務是為類的靜態變量分配內存,並…

    編程 2025-04-28
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • Python工作需要掌握什麼技術

    Python是一種高級編程語言,它因其簡單易學、高效可靠、可擴展性強而成為最流行的編程語言之一。在Python開發中,需要掌握許多技術才能讓開發工作更加高效、準確。本文將從多個方面…

    編程 2025-04-28
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27

發表回復

登錄後才能評論