php如何接受請求,PHP 是怎麼接收到請求的?

2021-10-25 21:09:25 字數 1699 閱讀 9643

php 是怎麼接收到請求的?

本篇文章主要描述一下幾點

● nginx 怎麼**請求 給 phpfpm?

● cgi 和 fastcgi 到底是個什麼玩意?

● phpfpm 是什麼?有什麼作用?

簡單場景描述

在瀏覽器上訪問乙個 php+nginx+mysql 構建的**,並且購買一件商品。

分析 (這裡訪問的有兩種資源)

● 動態資源 (購買商品的**,商品的簡介等)

瀏覽器發起請求 --> web_server(nginx)分發處理 --> php 執行**返回結果 (這是大概的流程)

nginx 是怎麼分發請求?

當使用者發起請求的時候 (瀏覽器預設請求 80 埠),nginx 監聽到 80 埠,通過 nginx 配置正則匹配是否屬於靜態資源,如果是靜態資源則返回檔案,請求結束。如果是動態資源,通過 正則匹配到請求 php 指令碼,那麼他會通過 nginx 的模組 ngx_http_fastcgi_module 把請求分發給 phpfpm 處理,然後處理完畢返回結果。

● cgi

cgi 是 web 伺服器執行外部程式的規範。意思就是通過 cgi 可以與你的程式通訊,通過 cgi 標準格式。你的程式可以和瀏覽器互動。

(簡單理解 cgi 就是乙個協議,規定了一些東西該怎麼傳,你的程式這邊怎麼接受處理等規範。)

● php-cgi

php-cgi 就是 cgi 協議 php 的乙個實現版。php-cgi 會為每個請求 fork 乙個程序處理,處理完成後退出。(這個模式叫做 fork-and-execute)。這樣的模式不符合現在動不動大規模的流量,所以已退出歷史舞台。

● fastcgi

fastcgi 是 cgi 的公升級版,他會預先啟動乙個 master 程序讀取配置檔案,然後 fork 多個 work 程序等待連線。監聽到請求,分配個 work 程序做具體的處理。這樣大大提高了程式的效能。(fastcgi 會管理程序,處理完成後不會輕易銷毀。而 cgi 會為每乙個請求 建立程序,銷毀程序。)

● phpfpm

作為世界上最好的語言,當然要跟上潮流。當發現 php-cgi 效能不佳時,又恰好出現了 fastcgi 協議。所以 php 實現了乙個 php 版本的 fastcgi,名字叫做 phpfpm(fastcgi process manager)。 phpfpm 啟動時會開啟 乙個 master 程序和若干個 work 程序。master 程序監聽請求,並**給 work 程序處理,每乙個 work 程序都有乙個 php 直譯器,你的**在每乙個 work 程序中都有乙份,work 程序是真正執行**的地方。

sophpfpm 監聽 9000 埠,nginx 匹配到 php 檔案,把請求**給 phpfpm。phpfpm master 監聽到請求後,分配給 work 處理(每乙個 work 程序中都有乙個 php 直譯器),phpfpm 在啟動的時候就已經 work 程序已經載入了配置,載入了你寫**。所以說 work 程序收到請求後立馬執行,然後返回結果。

ngx_http_fastcgi_module 模組

在瀏覽器請求 web_server 是 http 協議 或者 https 協議,但是 phpfpm 不懂怎麼辦了?這裡 nginx 提供了乙個 ngx_http_fastcgi_module ,ngx_http_fastcgi_module 把 http 或者 https 請求 對映成 fastcgi 請求。這樣 php 程式就能和使用者互動了。

純個人理解,如果有誤請指出。

php中模擬post,get請求和接受請求詳細講解

在php中我們經常用到curl拓展來進行模擬post get請求,下面就來具體說說怎麼模擬 初始化curl curl setopt curl,curlopt url,url curl setopt curl,curlopt header,0 過濾http頭 curl setopt curl,curl...

php fpm 是如何處理php 請求的

php fpm php fastcgi process manager php fastcgi 程序管理器,管理php 程序池的軟體,用於接受web伺服器的請求。用來管理程序。比如 當worker不夠用時,master可以根據配置預先啟動幾個worker等著 當然空閒worker太多時,也會停掉一些...

PHP如何判斷ajax請求

通過傳遞 get引數的方法簡單實現了網頁請求的判斷。但是如果需要這樣的功能,這個方法可能就有弊端,功能需求如下 1.通過ajax請求的網頁與普通請求的網頁內容是不相同的 2.通過ajax請求的網頁是為了方便使用者操作,兩種方法請求開啟的網頁必須的內容是相同的,只是ajax請求到的網頁內容比較簡化和使...