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

2021/4/19·6 views
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 -vcomposer70 --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;
}

然后将该文件includenginx.confhttp段中。在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;
}

在你需要启用php70server里面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

需要右击管理员权限运行