0%

PHP开发环境

古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知,致知在格物。物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。–《礼记·大学》

Windows11多PHP+多MySQL版本本地开发环境方案对比

一、首选:Laragon(最推荐,多版本管理最强)

优势(完美匹配你的需求)

  1. 多PHP一键切换:同时存放 PHP5.6/7.1/7.4/8.0/8.1/8.2/8.3,全局切换或单个项目绑定指定PHP版本
  2. 多MySQL/MariaDB共存:可并行安装 MySQL5.7、MySQL8.0、MariaDB10.3/10.6,不同端口独立运行,互不冲突
  3. 内置 Nginx+Apache 双服务器,一键切换,自动配置虚拟主机(域名 xxx.test
  4. 绿色免安装,不污染系统环境,全部文件统一在 Laragon 目录,重装系统备份文件夹即可恢复
  5. 自动生成SSL证书、快速创建数据库、命令行集成,兼容FastAdmin、ThinkPHP全版本
  6. 占用资源低,Windows11兼容性极佳,无PhpStudy常见端口占用、权限报错

多版本使用方式

  • 全局PHP:菜单栏一键切换全局版本
  • 项目独立PHP:修改项目 .env / 单独Nginx配置指定PHP-CGI端口,实现一个项目固定PHP7.4,另一个PHP8.1
  • MySQL多实例:每个数据库实例分配不同端口(3306、3307、3308),同时启动
缺点

可视化面板简单,功能不如PhpStudy丰富,纯轻量工具。

二、备选:PhpStudy Pro(图形化易用,新手友好)

优势

  1. 图形界面完善,可视化管理所有服务、数据库、扩展
  2. 一键下载任意PHP、MySQL、Redis、Nginx/Apache,可视化切换版本
  3. 虚拟主机可视化配置、数据库管理、数据库备份、站点管理一体化
  4. 国内下载源速度快,中文界面,适合不想敲命令的开发者

痛点(多版本场景短板)

  1. 同一时间只能启动一个MySQL实例,无法同时跑MySQL5.7和8.0,切换需要停止重建
  2. 高并发项目容易出现FastCGI 10060/10061超时报错(你之前遇到的Nginx超时问题高发)
  3. 部分版本依赖VC运行库,Windows11偶尔权限、防火墙拦截问题
  4. 安装版,注册表写入多,卸载不干净容易残留端口占用

适合:项目PHP版本不同、但MySQL版本统一的场景;如果需要同时跑多个MySQL不推荐为主力。

三、专业方案:Docker(完全隔离,生产环境对齐)

适用场景

项目依赖差异极大、需要和线上Linux环境一致、同时运行N多PHP/MySQL版本、避免Windows环境差异BUG

优点

  1. 容器完全隔离:每个项目一套独立PHP+MySQL,端口互不干扰,环境和线上一致
  2. 自定义镜像:PHP5.6~8.4、MySQL5.6/5.7/8.0自由组合,.docker-compose.yml 一键启动项目
  3. 无Windows兼容性坑,不存在VC库、文件大小写、路径分隔符问题
  4. 团队统一环境,复制配置即可共享开发环境

缺点

  1. 入门有学习成本,需要懂基础Docker命令
  2. Windows11需要开启WSL2,磁盘读写速度比本地集成环境慢一点
  3. 小项目启动稍繁琐,纯本地快速开发不如Laragon便捷

四、小众方案:XAMPP / WAMP(不推荐多版本需求)

  1. XAMPP:仅支持单PHP单MySQL,切换版本需要覆盖文件,多项目兼容极差
  2. WAMP:仅Windows,PHP多版本切换尚可,但MySQL只能单实例,更新停滞,不再推荐

Laragon添加预装外的php/mysql版本

一、核心下载规则(必看,否则报错)

1. 下载地址

2. 包选择硬性标准

  1. 系统Windows11 x64 → 选 x64
  2. Laragon Nginx/FPM 必须下载 Non Thread Safe (NTS)
  3. VC运行库匹配:
    • PHP5.6 ~ PHP7.1:VC14
    • PHP7.2 ~ PHP7.4:VC15
    • PHP8.0+:VS16
  4. 下载后缀 .zip 绿色压缩包,不要msi安装版

示例可用包名:

  • php-7.4.33-Win32-vc15-x64-nts.zip
  • php-8.0.30-Win32-vs16-x64-nts.zip
  • php-5.6.40-Win32-vc14-x64-nts.zip

二、安装步骤

  1. 关闭Laragon全部服务(停止所有)

  2. 进入目录 你的laragon路径\bin\php\

  3. 直接解压下载的PHP压缩包到此目录,完整文件夹不要改名
    目录结构示例:

    1
    2
    3
    4
    5
    6
    laragon/
    bin/
    php/
    php-7.4.33-Win32-vc15-x64-nts
    php-8.0.30-Win32-vs16-x64-nts
    php-8.1.xx-Win32-vs16-x64-nts (自带原版)
  4. 重启Laragon托盘程序(完全退出重开)

  5. 右键托盘菜单 → PHP → Version,下拉列表自动出现新增的7.x/8.0版本,点击切换即可

三、依赖VC运行库(90%启动失败根源)

Windows11默认缺少旧版VC,不装会直接提示php-cgi.exe无法启动:

  • VC14(5.6~7.1):Visual C++ Redistributable 2015
  • VC15(7.2~7.4):Visual C++ Redistributable 2017
  • VS16(8.0+):Visual C++ Redistributable 2019/2022

直接微软官网下载x64版本安装传送门,重启电脑生效。

四、项目独立绑定指定PHP版本(多项目不同PHP需求)

全局切换只能统一环境,你多项目混用版本推荐站点单独指定:

  1. 菜单 → Sites → 打开当前站点Nginx配置
  2. 修改fastcgi_pass端口,不同PHP对应独立端口:
1
2
3
4
5
6
# PHP7.4 固定端口9074
fastcgi_pass 127.0.0.1:9074;
# PHP8.0 固定端口9080
# fastcgi_pass 127.0.0.1:9080;
# PHP8.1 默认9081
# fastcgi_pass 127.0.0.1:9081;
  1. Laragon菜单 PHP > Quick settings > PHP-FPM ports 可自定义各版本FPM端口,保存后重载Nginx,每个项目永久固定PHP版本,不用来回全局切换

五、配套多MySQL旧版安装(同理)

你需要MySQL5.7共存8.0操作逻辑完全一致:

  1. 下载免安装绿色MySQL zip(5.7 x64)
  2. 解压到 laragon/bin/mysql/
  3. 菜单MySQL > Version切换,启动时会自动分配独立端口(3306/3307/3308),多数据库可同时运行互不冲突。

六、备选方案(嫌手动下载麻烦)

  1. 降级Laragon Full 2025 v8.1.0
    旧版内置Quick Add一键下载PHP5.6~8.3,不用手动找包,兼容性完全一致,官网可下载历史包。
  2. Docker WSL2
    每个项目容器独立PHP+MySQL,完全隔离,适合线上对齐,但有学习成本。

七、常见报错解决

  1. 菜单看不到新增PHP
  • 完全退出Laragon托盘,重新打开
  • 文件夹不要中文/空格,保持原版解压命名。
  1. 切换PHP后502 Bad Gateway:
  • 缺少对应VC运行库
  • 下载成TS(Thread Safe)版本,必须NTS。
  1. FastCGI 10060超时
  • 站点单独绑定对应PHP的FPM端口,不要混用全局端口。

Laragon 同时运行 MySQL5.7 + MySQL8.0 完整教程

核心原理

Laragon 默认只能单实例启动MySQL(同一时间只能开一个版本),想两个版本同时后台并行运行,必须:

  1. 两个MySQL目录完全独立(bin、data、my.ini分开)
  2. 分配不同端口(5.7=3306,8.0=3307)
  3. 分别注册独立Windows服务(MySQL57 / MySQL80)
  4. Laragon主面板只用其中一个,另一个通过系统服务启动

一、提前准备两个MySQL包

1. 放入Laragon标准目录

路径:laragon\bin\mysql,解压两个完整zip包:

  • mysql-5.7.44-winx64(5.7)
  • mysql-8.0.39-winx64(8.0)

2. 分别创建独立数据目录(关键,不能共用data)

1
2
laragon\data\mysql57  # 5.7数据
laragon\data\mysql80 # 8.0数据

二、分别配置 my.ini(端口隔离)

① MySQL5.7 配置:laragon\bin\mysql\mysql-5.7.44-winx64\my.ini

1
2
3
4
5
6
7
[mysqld]
port = 3306
basedir = "C:/laragon/bin/mysql/mysql-5.7.44-winx64"
datadir = "C:/laragon/data/mysql57"
character-set-server = utf8mb4
default-storage-engine = InnoDB
sql_mode = NO_ENGINE_SUBSTITUTION

② MySQL8.0 配置:laragon\bin\mysql\mysql-8.0.39-winx64\my.ini

1
2
3
4
5
6
7
8
9
[mysqld]
port = 3307 # 区别于5.7,避免冲突
basedir = "C:/laragon/bin/mysql/mysql-8.0.39-winx64"
datadir = "C:/laragon/data/mysql80"
character-set-server = utf8mb4
default-storage-engine = InnoDB
default_authentication_plugin = mysql_native_password
# 8.0专属X协议端口,也要错开
mysqlx_port = 33061

三、管理员CMD初始化+注册独立服务

1. 初始化 MySQL5.7

1
2
3
4
cd C:\laragon\bin\mysql\mysql-5.7.44-winx64\bin
mysqld --initialize-insecure --console
# 注册服务名 MySQL57
mysqld --install MySQL57 --defaults-file="C:\laragon\bin\mysql\mysql-5.7.44-winx64\my.ini"

2. 初始化 MySQL8.0

1
2
3
4
cd C:\laragon\bin\mysql\mysql-8.0.39-winx64\bin
mysqld --initialize-insecure --console
# 注册服务名 MySQL80(不能和57重名)
mysqld --install MySQL80 --defaults-file="C:\laragon\bin\mysql\mysql-8.0.39-winx64\my.ini"

四、同时启动两个数据库

方式1:CMD命令启停(推荐并行)

1
2
3
4
5
6
7
# 启动
net start MySQL57
net start MySQL80

# 停止
net stop MySQL57
net stop MySQL80

方式2:Laragon面板管理其中一个

Laragon菜单 → MySQL → Version 切换想用的版本(默认3306的5.7),点Start MySQL
MySQL8.0(3307)只能通过系统服务启动,Laragon面板无法同时控制两个。

五、客户端连接区分端口

  • MySQL5.7:127.0.0.1:3306
  • MySQL8.0:127.0.0.1:3307

Navicat/PHP项目连接8.0必须手动填写端口3307;
PHP代码示例:

1
2
3
4
// 5.7
$pdo57 = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test', 'root', '');
// 8.0
$pdo80 = new PDO('mysql:host=127.0.0.1;port=3307;dbname=test', 'root', '');

六、备选方案:Profile 切换(不能同时运行,仅快速切换)

如果不需要同时跑,只是切换版本开发,用Laragon自带Profile:

  1. Menu → Profile → Create New Profile
  2. 新建两个配置:env57(绑定MySQL5.7)、env80(绑定MySQL8.0)
  3. 切换Profile会自动重启对应MySQL,同一时间只能启动一个版本

常见报错解决

  1. 端口占用:确认两个my.ini port不同,关闭其他本地MySQL服务
  2. 服务注册失败:CMD必须右键「以管理员身份运行」
  3. data目录报错:必须手动新建mysql57/mysql80空文件夹,不要共用
  4. 8.0连接报错caching_sha2_password:my.ini添加default_authentication_plugin = mysql_native_password,重置root密码

Laragon 伪静态完整配置(分 Apache / Nginx 两种环境)

一、Apache(Laragon默认)配置伪静态

方式1:项目根目录新建 .htaccess(最简单,推荐ThinkPHP/Laravel/Wordpress)

  1. 进入你的项目目录(例:D:\laragon\www\demo,框架项目放public文件夹)
  2. 新建文件命名 .htaccess(Windows新建txt,保存后重命名,文件名带点)
  3. 复制对应框架规则:

1)ThinkPHP 5/6(Apache)

1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>

2)Laravel(public目录下)

1
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
# 去掉index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

3)通用PHP/WordPress

1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

方式2:Apache全局虚拟主机开启AllowOverride(解决.htaccess不生效404)

很多时候放了.htaccess还是404,是因为目录没开启重写权限:

  1. 打开路径:D:\laragon\etc\apache2\sites-enabled\00-default.conf
  2. 找到 <Directory "D:/laragon/www">,修改为:
1
2
3
4
5
<Directory "D:/laragon/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride All # 关键,必须All才能读取.htaccess
Require all granted
</Directory>
  1. 重启Laragon全部服务

检查Apache重写模块是否开启

打开 D:\laragon\bin\apache\apache2.4.x\conf\httpd.conf,确保该行没有#注释:

1
LoadModule rewrite_module modules/mod_rewrite.so

二、Nginx 环境伪静态(Nginx不支持.htaccess,必须改站点conf)

步骤1:打开站点配置文件

路径:D:\laragon\etc\nginx\sites-enabled\00-default.conf

如果你自定义了本地域名(如tp6.test),编辑对应域名conf文件

步骤2:在 server{} 内部添加伪静态规则

找到 location / {},替换/添加对应代码:

1)ThinkPHP 专用Nginx规则(兼容tp5/tp6)

1
2
3
4
5
6
7
8
9
10
11
12
13
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
# PHP解析块(Laragon默认已有,不用重复加)
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

2)Laravel Nginx规则(入口在public)

1
2
3
4
5
location / {
root $root/public;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}

3)通用WordPress/普通PHP

1
2
3
location / {
try_files $uri $uri/ /index.php?$args;
}

步骤3:保存后重启Laragon

托盘右键 → Stop All → Start All


三、统一重启&验证是否生效

  1. 完全停止再启动(只Reload无效)
  2. 新建测试链接,不带index.php访问,正常打开=伪静态成功
  3. 排查报错:
  • 404:规则不匹配 / Nginx conf写错 / Apache AllowOverride 不是All
  • 500:.htaccess语法错误 / Nginx rewrite格式错误
  • 依旧要带index.php访问:服务没重启、规则放错目录(框架项目要放public)

四、常见踩坑

  1. ThinkPHP项目入口在public:.htaccess 必须丢到public文件夹,不是项目根目录
  2. Windows创建.htaccess:新建文本文档,另存为,文件名填 .htaccess,编码选UTF-8
  3. Nginx改完配置必须重启服务,没有.htaccess缓存机制
  4. 多PHP切换不影响伪静态,伪静态由Apache/Nginx控制,和PHP版本无关

Laragon使用问题汇总

一、列表

  1. MySQL配置文件被还原,如同时安装了8.4.3和8.4.10,则8.4.10的配置文件如datadir=”D:/Laragon/data/mysql-8.4.10”会被还原为:datadir=”D:/Laragon/data/mysql-8.4”
  • Laragon有自动生成/覆盖my.ini机制:每次切换MySQL版本、重启MySQL、点「重新生成服务」时,Laragon会根据当前选中的MySQL主版本号自动重写datadir:如安装的文件夹是mysql-8.4.10,主版本号为8.4

  • 解决方案:

    • 方案1:主版本号只保留一个,如8.4.3和8.4.10,只保留8.4.10(根据实际情况而定)

    • 方案2:锁住版本目录内my.ini(阻止自动覆盖,无需新建 etc)

    • 方案3:创建用户自定义模板usr/tpl(官方标准方案,不会被重置)

      • 停止全部服务

      • 手动创建目录:D:\Laragon\usr\tpl\mysql\

      • 复制bin/mysql/mysql-8.4.10/my.ini到上面目录,改名为my.ini.tpl

      • 用管理员打开 D:\Laragon\usr\tpl\mysql\my.ini.tpl,修改 datadir:

        1
        2
        3
        4
        5
        6
        [mysqld]
        basedir = "{mysql.dir}"
        datadir = "D:/Laragon/data/mysql-8.4.10"
        port = 3306
        character-set-server = utf8mb4
        collation-server = utf8mb4_0900_ai_ci
      • 保存文件,托盘右键 MySQL → 重新生成服务

      • 启动 MySQL,无论重启、切换版本,datadir 永久固定不会被截断还原

  1. php安装redis扩展

    • 确定php版本:通过laragon查看
    • 校验php版本:php -i | findstr “Thread Safety”
    • 下载扩展:https://pecl.php.net/package/redis,解压
    • 复制php_redis.dll至对应版本php的ext目录
    • 开启扩展
      • 方式1:通过laragon—我用的v8.6.1勾选后不生效
      • 方式2:手动修改php.ini
    • 重启全部服务
    • 验证
      • 方式1:php -m | findstr redis
      • 方式2:通过phpinfo()
  2. 伪静态