PHP多人模組開發原理解析

2022-09-26 21:39:19 字數 1778 閱讀 3466

作為世界上最「好」的語言,在web裡佔據著大概80%的份額,中小公司基本都說 lnmp 架構。當乙個倉庫開發人員大於1,20人的時候,每個人可能開發不同的模組和功能,用**版本控制工具比如 git 開不同的分支,流程大概是先在本地搭一套完整的環境,開發好部署在測試環境,自測或者測試人員測試好之後部署在預發布環境,預發布基本和線上環境一樣,然後給產品驗收,驗收完成後再發布上線。

由於是並行開發,肯定存在好幾個功能同時驗收或者測試的情況,這個時候預發環境到底部署誰的**呢?切換到a的分支,b就不能驗收了。所以希望存在乙個多人開發環境,每個人的開發流程互不影響。

php執行原理

首先我們來分析下 php 的執行原理,看看 php 的語言特點。當我們從瀏覽器發起乙個請求,我們的web伺服器(nginx、apache等)監聽了80或者443埠,我們來看乙個最簡單的 nginx 的 vhost 配置:

server

}nginx 監聽80埠,當匹配到使用者訪問的網域名稱是test.com後使用對應的 vhost 配置。在伺服器裡php-fpm起乙個服務,監聽乙個埠(比如9001)或者乙個unix socket,nginx通過fastcgi_pass配置,將請求傳遞給 php-fpm 來解析php**,php解析器每次從程式設計客棧index.php開始解析,一路處理下去、做一系列的邏輯處理、查詢資料庫或者快取等操作,返回乙個 html 或者其他結果給 nginx,nginx 再返回給瀏覽器。流程如下圖:

cgi:是 nginx 與 php_fpm 之間資料交換的一種協議。

fastcgi:同 cgi,是一種通訊協議,但比 cgi 在效率上做了一些優化。

php-cgi:是 php 對 nginx 提供的 cgi 協議的介面程式。

php-fpm:是 php 對 nginx 提供的 fastcgi 協議的介面程式,額外還提供了相對智慧型一些任務管理。

多人開發環境

從 php 原理bogxl我們可以看到,php其實只是乙個解釋型的指令碼語言,每次請求都要從index.php解析一次,那我們是不是可以在伺服器根據不同開發者的名字,命名很多個資料夾,在各自資料夾裡,clone 好**倉庫,切換到自己的分支。再讓 nginx 處理每個人目錄下的index就可以了。比如直接訪問在 nginx 獲取到 wulv,把 root 設定到 wulv 這個目錄,這樣就訪問到 wulv 這個目錄下的**了。可以讓 nginx 這樣設定:

root 程式設計客棧/data/gateway/$who/html;

我們可以讓 url 裡攜帶使用者的目錄,在 nginx 擷取下來,可以在一下幾個地方攜帶:

host:

path:

query:

這樣大體上可以實現需求了,但還是有點問題,比如頁面裡有些鏈結是寫死的,沒有使用相對路徑,你一點選就又跑 www.test.com 去了,或者有些第三方應用比如 oauth 等需要校驗網域名稱,你和線上網域名稱不一致根本無法登www.cppcns.com陸。所以需要其他方式來實現,比如:

我們可以使用modify headers這個瀏覽器外掛程式,修改http request 頭資訊,設定乙個引數 http_who 為 wulv,然後在 nginx 獲取。

拓展如果有條件的話,其實還可以做乙個閘道器伺服器,做乙個配置頁面,在配置頁面裡配置一下需要訪問的目錄,下次訪問,閘道器就直接幫你設定http header,**到對應伺服器。這樣連瀏覽器外掛程式都不需要裝了,對運營和產品設計更加友好。

本文標題: php多人模組開發原理解析

本文位址:

PHP 分頁原理解析

分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。對於web程式設計的老手來說,編寫這種 實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原理和實現方...

Python logging模組原理解析及應用

一 logging日誌模組等級 常見log級別從高到低 critical error warning info debug,預設等級為warning,warning級別的log才輸出。程式設計客棧 日誌等級 level 描述critical 當發生嚴重錯誤,導致應用程式不能繼續執行時記錄的資訊 er...

MVC開發模式原理解析

jsp什麼都可以做,但是這樣子會很亂,沒有分工。開始慢慢地自己做封裝,以後學習了框架之後這種思想就更加嚴重。jsp 負責介面顯示 servlet 就相當於是控制層,協調jsp和dao的關係 dao data access object 即資料庫訪問物件 做資料庫的操作 又叫做模型層,這裡面有很多查詢...