Windows下配置多版本PHP开发环境

Windows下配置多个不同php版本共存是件麻烦事,之前一直使用WSL2, 由于WSL2读取windows文件速度极慢,所以需要将文件上传到WSL2内部,虽然PhpStorm支持自动上传,但是文件同步不是很好。于是切换到WSL1,读取速度是解决了,但是老是遇到一些奇怪的问题,例如Nginx+php很卡,php-fpm不能监听端口。所以想着还是把环境配置在Windows上,使用过Phpstudy,发现功能冗余还有广告,对我这种强迫症患者来讲忍受不了。于是研究了一下,借助git-bash,来配置几个别名,方便多版本php切换。
环境要求
-
Windows
-
Git
-
PHP
windows下载地址:https://www.microsoft.com/zh-cn/software-download/windows10
windows版本php下载地址:https://windows.php.net/downloads/releases/archives/
windows版本git下载地址:https://git-scm.com/book/zh/v2/起步-安装-Git
安装PHP
首先将PHP解压到任意目录,例如D:\Program\WNMP\php\7.0.33,把php.ini.development 复制为 php.ini
安装Git
安装Git,并将Git安装位置的bin目录添加到环境变量中(如果没有的话)
配置
命令行
win + r,输入cmd回车,进入cmd输入sh进入git-bash,执行
shell
cd
vim .bashrc
将下面的内容粘贴进去,我这里顺便添加了composer
alias php70="/d/Program/WNMP/php/7.0.33/php.exe"
alias composer70="/d/Program/WNMP/php/7.0.33/php.exe /d/Program/composer.phar"
ctrl + d 退出后 sh 再次进入git-bash 或者source .bashrc,输入php70 -v和composer70 --version 查看是否正确配置
给phpstorm设置默认shell
file -> settings -> 搜索terminal,将Application Settings中的Shell Path 修改为 Git-bash,例如 C:\Program Files\Git\bin\sh.exe
重新打开terminal,查看是否正确配置,如果执行命令中文乱码,可以使用iconv转码,例如
shell
php artisan | iconv
配置php-cgi
我将
php-cgi作为服务安装,所以这里需要使用一款软件nssm,关于nssm以及其他服务相关操作,可以参考站内一篇介绍windows服务管理的文章
首先以管理员身份打开cmd,输入nssm install Php700,在弹出的框内根据提示输入内容,以下是我的配置
Path: D:\Program\WNMP\php\7.0.33\php-cgi.exe
Startup Directory: D:\Program\WNMP\php\7.0.33
Arguments: -b 9700 -c D:\Program\WNMP\php\7.0.33\php.ini
如果多个项目使用,则建议配置多个Php-CGI进程,否则有可能导致接口互相调用阻塞。nssm install Php701 ,如果不够可以继续添加
Path: D:\Program\WNMP\php\7.0.33\php-cgi.exe
Startup Directory: D:\Program\WNMP\php\7.0.33
Arguments: -b 9701 -c D:\Program\WNMP\php\7.0.33\php.ini
然后可以使用sc或者nssm启动,
nssm start Php700
sc start Php700
配置Nginx
下载页面:https://nginx.org/en/download.html
我把它解压到
D:\Program\WNMP\nginx-1.22.1目录,下面都用这个目录
nssm install Nginx
配置如下
Path: D:\Program\WNMP\nginx-1.22.1\nginx.exe
Startup Directory: D:\Program\WNMP\nginx-1.22.1
Arguments:
启动Nginx
nssm start Nginx
sc start Nginx
Nginx + php
如果你的Php70监听了多个端口,可以在nginx配置目录新增upstreams.conf
upstream Php70 {
server 127.0.0.1:9700;
server 127.0.0.1:9701;
}
然后将该文件include到nginx.conf的http段中。在Nginx目录新建php70.conf,键入文本
conf
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass 127.0.0.1:9070;
# fastcgi_pass Php70; 使用upstreams.conf
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
在你需要启用php70的server里面include php70.conf即可
安装Mysql
下载地址:https://dev.mysql.com/downloads/mysql/
我把它解压到这
D:\Program\WNMP\mysql-5.7.41下面都用这个路径
在mysql根目录新建my.ini文件键入
ini
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录 ---这里输入你安装的文件路径----
basedir=D:\Program\WNMP\mysql-5.7.41
# 设置mysql数据库的数据的存放目录
datadir=D:\Program\WNMP\mysql-5.7.41\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
进入bin目录,执行
shell
mysqld --initialize --console # 安装mysql 安装完成后Mysql会有一个随机密码
mysqld --install Mysql # 安装mysql服务并启动, 这里服务名是Mysql,你也可以使用nssm安装
记得修改root密码,假如上面的得到的密码是 123456
shell
mysql -uroot -p123456 # 登录root用户
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; -- 密码改成了root
你还可以添加bin目录到环境变量中,方便使用
一键启动WNMP
新建start.bat文件,内容如下(需要根据安装的软件进行调整)
shell
sc start Php700
sc start Php701
sc start Redis
sc start Nginx
sc start Mysql
timeout /T 3 /NOBREAK
新建stop.bat文件,内容如下
shell
sc stop Php700
sc stop Php701
sc stop Redis
sc stop Nginx
sc stop Mysql
timeout /T 3 /NOBREAK
需要右击管理员权限运行