PHP 개발자로서 혼자서 프로젝트나 기능을 완료할 수 없는 경우가 있습니다. 예를 들어 웨어하우스에 개발자가 1명 또는 20명 이상인 경우 코드 버전 제어 도구를 사용하여 각 사람이 서로 다른 모듈과 기능을 개발할 수 있습니다. code>git은 다른 브랜치를 열며, 프로세스는 먼저 로컬에서 완전한 환경을 설정하고 이를 개발하여 테스트 환경에 배포한 다음 자체 테스트 또는 테스터 테스트 후 시험판 환경에 배포하는 것입니다. 사전출시 기본적으로 온라인 환경과 동일하며, 이후 제품 검수를 거쳐 온라인으로 출고됩니다. 병렬로 개발되기 때문에 여러 기능이 동시에 승인되거나 테스트되는 상황이 있을 수밖에 없습니다. 이때 사전 출시 환경에서는 누구의 코드가 배포됩니까? A의 브랜치로 전환하면 B는 이를 수락할 수 없습니다. 따라서 우리는 모든 사람의 개발 프로세스가 서로 영향을 미치지 않는 다중 사용자 개발 환경이 있기를 바랍니다. 이 기사에서는 PHP 멀티플레이어 개발 환경의 원칙에 대한 분석을 공유하겠습니다. 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
PHP
의 작동 원리를 분석하고 PHP
의 언어 특성을 살펴보겠습니다. 브라우저에서 요청을 시작하면 웹 서버(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 소켓
을 수신합니다. Nginx는 fastcgi_pass를 통해 <code>PHP-FPM에 요청을 전달합니다. code> FPM
구성을 통해 PHP 파서는 매번 index.php
에서 구문 분석을 시작하고 이를 처리하며 일련의 논리적 처리를 수행하고 데이터베이스를 쿼리합니다. 캐시 등을 처리하고 HTML
을 반환하거나 다른 결과가 Nginx
로 전송된 후 Nginx
에 의해 브라우저로 반환됩니다. 프로세스는 다음과 같습니다: 🎜🎜CGI
: Nginx
와 PHP_FPM 교환에 관한 동의서입니다. 🎜
FastCGI
: CGI
와 동일하며 통신 프로토콜이지만 CGI
최적화보다 더 효율적입니다. . 🎜PHP-CGI
: Nginx
용으로 PHP
에서 제공하는 CGI
프로토콜입니다. > 인터페이스 프로그램. 🎜PHP-FPM
: Nginx
용으로 PHP
에서 제공하는 FastCGI
프로토콜입니다. > 인터페이스 프로그램은 비교적 지능적인 작업 관리 기능도 제공합니다. 🎜PHP
의 원칙에서 우리는 PHP가 실제로 모든 요청을 해석하는 스크립트 언어라는 것을 알 수 있습니다. index.php
에서 한 번 구문 분석하면 다양한 개발자의 이름에 따라 서버에 있는 여러 폴더의 이름을 지정할 수 있고 각 폴더에서 복제
OK 코드 저장소를 다음으로 전환할 수 있습니다. 자신의 지점. 그런 다음 Nginx
가 모든 사람의 디렉터리에 있는 색인을 처리하도록 하세요. 예를 들어 http://wulv.test.com/
를 직접 방문하여 Nginx
에서 wulv
를 가져온 다음 root를 입력합니다. code> <code>wulv
디렉터리에 있는 코드에 액세스할 수 있도록 wulv
디렉터리로 설정합니다. 다음과 같이 Nginx
를 설정할 수 있습니다. 🎜set $who www; if ($http_who != "") { set $who $http_who; } root /data/gateway/$who/html;
URL
이 사용자 디렉터리를 전달하도록 하고 이를 Nginx
에서 가로챌 수 있습니다. 소수의 로컬 이식성: 🎜호스트
: http://wulv.test.com
🎜경로
: http://www.test.com/wulv
🎜쿼리
: http://www.test.com?http_who=wulvwww.test.com
으로 이동됩니다. >OAuth에서 도메인 이름을 확인해야 합니다. 온라인 도메인 이름이 일치하지 않으면 전혀 로그인할 수 없습니다. 따라서 이를 달성하려면 다음과 같은 다른 방법이 필요합니다. 🎜http 요청 헤더
🎜cookie🎜
http 요청
헤더 정보를 수정하고 http_who 매개변수를 설정할 수 있습니다. code>를 <code>wulv
로 변환한 다음 Nginx
에서 가져옵니다. 🎜http 헤더
를 설정하고 해당 서버에 프록시를 설정하세요. 이런 방식으로 브라우저 플러그인을 설치할 필요도 없어 운영 및 제품 디자인에 더욱 친숙해졌습니다. 🎜🎜🎜🎜PHP
세계 최고의 언어로 웹의 약 80%를 차지합니다. 중소기업에서는 기본적으로 lnmp
아키텍처를 사용합니다. 웨어하우스에 개발자가 1~20명이 넘으면 각자 다른 모듈과 기능을 개발할 수도 있고, git
같은 코드 버전 관리 도구를 사용해 서로 다른 브랜치를 개설하는 과정도 있을 것입니다. 먼저 로컬 환경을 개발하고 테스트 환경에서 배포합니다. 자체 테스트 또는 테스터 테스트를 거쳐 사전 릴리스 환경에 기본적으로 배포됩니다. 제품이 승인되면 승인이 완료되어 온라인으로 출시됩니다. PHP
作为世界上最“好”的语言,在web里占据着大概80%的份额,中小公司基本都说 lnmp
架构。当一个仓库开发人员大于1,20人的时候,每个人可能开发不同的模块和功能,用代码版本控制工具比如 git
开不同的分支,流程大概是先在本地搭一套完整的环境,开发好部署在测试环境,自测或者测试人员测试好之后部署在预发布环境,预发布基本和线上环境一样,然后给产品验收,验收完成后再发布上线。
由于是并行开发,肯定存在好几个功能同时验收或者测试的情况,这个时候预发环境到底部署谁的代码呢?切换到A的分支,B就不能验收了。所以希望存在一个多人开发环境,每个人的开发流程互不影响。
首先我们来分析下 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
PHP
의 작동 원리를 분석하고 PHP
의 언어 특성을 살펴보겠습니다. 브라우저에서 요청을 시작하면 웹 서버(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 소켓
을 수신합니다. Nginx는 fastcgi_pass를 통해 <code>PHP-FPM에 요청을 전달합니다. code> FPM
구성을 통해 PHP 파서는 매번 index.php
에서 구문 분석을 시작하고 이를 처리하며 일련의 논리적 처리를 수행하고 데이터베이스를 쿼리합니다. 캐시 등을 처리하고 HTML
을 반환하거나 다른 결과가 Nginx
로 전송된 후 Nginx
에 의해 브라우저로 반환됩니다. 프로세스는 다음과 같습니다: 🎜CGI
: Nginx
와 PHP_FPM 교환에 관한 동의서입니다. 🎜
FastCGI
: CGI
와 동일하며 통신 프로토콜이지만 CGI
최적화보다 더 효율적입니다. . 🎜PHP-CGI
: Nginx
용으로 PHP
에서 제공하는 CGI
프로토콜입니다. > 인터페이스 프로그램. 🎜PHP-FPM
: Nginx
용으로 PHP
에서 제공하는 FastCGI
프로토콜입니다. > 인터페이스 프로그램은 비교적 지능적인 작업 관리 기능도 제공합니다. 🎜PHP
의 원칙에서 우리는 PHP가 실제로 모든 요청을 해석하는 스크립트 언어라는 것을 알 수 있습니다. index.php
에서 한 번 구문 분석하면 다른 개발자의 이름에 따라 서버에 있는 여러 폴더의 이름을 지정할 수 있으며 각 폴더에서 복제
OK 코드 저장소를 다음으로 전환할 수 있습니다. 자신의 지점. 그런 다음 Nginx
가 모든 사람의 디렉터리에 있는 색인을 처리하도록 하세요. 예를 들어 http://wulv.test.com/
를 직접 방문하여 Nginx
에서 wulv
를 가져온 다음 root를 입력합니다. code> <code>wulv
디렉터리에 있는 코드에 액세스할 수 있도록 wulv
디렉터리로 설정합니다. 다음과 같이 Nginx
를 설정할 수 있습니다: 🎜set $who www; if ($http_who != "") { set $who $http_who; } root /data/gateway/$who/html;
URL
이 사용자 디렉터리를 전달하도록 하고 이를 Nginx
에서 가로챌 수 있습니다. 소수의 로컬 이식성: 🎜호스트
: http://wulv.test.com
🎜경로
: http://www.test.com/wulv
🎜쿼리
: http://www.test.com?http_who=wulvwww.test.com
으로 이동됩니다. >OAuth에서 도메인 이름을 확인해야 합니다. 온라인 도메인 이름이 일치하지 않으면 전혀 로그인할 수 없습니다. 따라서 이를 달성하려면 다음과 같은 다른 방법이 필요합니다. 🎜http 요청 헤더
🎜cookie🎜
http 요청
헤더 정보를 수정하고 http_who 매개변수를 설정할 수 있습니다. code>를 <code>wulv
로 변환한 다음 Nginx
에서 가져옵니다. 🎜http 헤더
를 설정하고 해당 서버에 프록시를 설정하세요. 이런 방식으로 브라우저 플러그인을 설치할 필요도 없어 운영 및 제품 설계에 더욱 친숙해졌습니다. 🎜🎜관련 추천 : 🎜🎜🎜php 중국 웹사이트, phpstudy 통합 개발 환경 인수, 국내 최다 사용자 공개🎜🎜