PHP多人模組開發的原理解析

來源:互聯網
上載者:User
本篇文章給大家詳細解釋了PHP多人開發的原理以及需要注意的地方,一起參考學習下吧。

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

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

PHP運行原理

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

server { listen    80; server_name test.com;  root /data/gateway/html; index  index.php; location ~ \.php$ {  fastcgi_pass  127.0.0.1:9001; #unix:/Users/run/php-fcgi.sock;  fastcgi_index index.php;  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  include    fastcgi_params; }}

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 原理我們可以看到,PHP其實只是一個解釋型的指令碼語言,每次請求都要從index.php解析一次,那我們是不是可以在伺服器根據不同開發人員的名字,命名很多個檔案夾,在各自檔案夾裡,clone 好代碼倉庫,切換到自己的分支。再讓 Nginx 處理每個人目錄下的index就可以了。比如直接存取http://wulv.test.com/,在 Nginx 擷取到 wulv,把 root 設定到 wulv 這個目錄,這樣就訪問到 wulv 這個目錄下的代碼了。可以讓 Nginx 這樣設定:

set $who www;if ($http_who != "") {  set $who $http_who;}root /data/gateway/$who/html;

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

host: http://wulv.test.com

path: http://www.test.com/wulv

query: http://www.test.com?http_who=wulv

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

http request header

cookie

我們可以使用Modify Headers這個瀏覽器外掛程式,修改http request 頭資訊,設定一個參數 http_who 為 wulv,然後在 Nginx 擷取。

拓展

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

使用XHProf尋找PHP效能瓶頸的執行個體講解

Laravel架構中自訂模板指令相關總結

PHP遞迴實現快速排序的方法樣本講解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.