如何在XAMPP中实现Mezzio框架的多端口并行部署?
- 内容介绍
- 文章标签
- 相关推荐
本文共计848个文字,预计阅读时间需要4分钟。
Mezzio 是一个基于 PSR-15 的轻量级 PHP 框架,本身不包含 Web 服务器功能,需要依赖 Apache 或 Nginx。XAMPP 默认使用 80 和 443 端口,但 Windows 下常被 Skype、IIS、VMware Hostd(PID 5728)和系统进程(PID 4)占用。
直接改 httpd.conf 不够——XAMPP 控制面板会读取自身缓存,必须同步更新两处:
-
xampp\apache\conf\httpd.conf:修改Listen 80→Listen 8081,以及ServerName localhost:80→ServerName localhost:8081 -
xampp\apache\conf\extra\httpd-ssl.conf:修改所有Listen 443→Listen 8443,并更新VirtualHost _default_:443为_default_:8443
改完别急着点 Start——先点右键 xampp-control.exe → “以管理员身份运行”,否则 Windows 防护机制可能拒绝绑定非特权端口(尤其是 80/443 以外的高编号端口有时也会被拦截)。
Mezzio项目无法通过localhost:8081访问
不是端口通了就万事大吉。Mezzio 要求入口统一走 public/index.php,而 XAMPP 默认 DocumentRoot 指向 xampp\htdocs,直接把 Mezzio 项目丢进去会 404 或暴露敏感文件。
正确做法是配虚拟主机,让 mezzio.local 指向项目根目录下的 public 子目录:
- 在
xampp\apache\conf\extra\httpd-vhosts.conf末尾追加:
<VirtualHost *:8081> ServerName mezzio.local DocumentRoot "C:/path/to/mezzio/public" <Directory "C:/path/to/mezzio/public"> AllowOverride All Require all granted </Directory> </VirtualHost>
然后在系统 C:\Windows\System32\drivers\etc\hosts 里加一行:127.0.0.1 mezzio.local。重启 Apache 后访问 http://mezzio.local:8081 才能正常路由。
PHP模块缺失导致Mezzio启动报错
Mezzio 依赖 mbstring、xml、curl、json,XAMPP 自带的 PHP 可能默认禁用部分扩展。启动时若报 Class 'Mezzio\Application' not found 或 mb_detect_encoding(): mbstring extension is not available,说明模块没开。
打开 xampp\php\php.ini,确认以下行前面的分号已去掉:
extension=mbstringextension=xmlextension=curlextension=openssl
改完必须重启 Apache——仅重启控制面板不够,要彻底 Stop 再 Start,否则 PHP 模块不会重载。
多端口共存时 Composer autoload 失效
如果同时跑多个 Mezzio 实例(比如 mezzio.local:8081 和 mezzio-dev.local:8082),且都用 composer install --no-dev 部署,容易出现 Class not found。根本原因是 XAMPP 的 PHP CLI 和 Apache 加载的 php.ini 文件路径不同:
- Apache 用的是
xampp\php\php.ini - CLI 常调用
xampp\php\php.ini,但某些版本会 fallback 到系统级配置,导致vendor/autoload.php路径解析错乱
验证方式:在项目根目录运行 php -m | findstr mbstring,看 CLI 是否真加载了模块;再在 public/index.php 开头加 var_dump(php_ini_loaded_file()); 查 Apache 实际加载的 ini 路径。两者不一致就必须统一指向同一份 php.ini,否则 autoload 逻辑会因环境差异断裂。
本文共计848个文字,预计阅读时间需要4分钟。
Mezzio 是一个基于 PSR-15 的轻量级 PHP 框架,本身不包含 Web 服务器功能,需要依赖 Apache 或 Nginx。XAMPP 默认使用 80 和 443 端口,但 Windows 下常被 Skype、IIS、VMware Hostd(PID 5728)和系统进程(PID 4)占用。
直接改 httpd.conf 不够——XAMPP 控制面板会读取自身缓存,必须同步更新两处:
-
xampp\apache\conf\httpd.conf:修改Listen 80→Listen 8081,以及ServerName localhost:80→ServerName localhost:8081 -
xampp\apache\conf\extra\httpd-ssl.conf:修改所有Listen 443→Listen 8443,并更新VirtualHost _default_:443为_default_:8443
改完别急着点 Start——先点右键 xampp-control.exe → “以管理员身份运行”,否则 Windows 防护机制可能拒绝绑定非特权端口(尤其是 80/443 以外的高编号端口有时也会被拦截)。
Mezzio项目无法通过localhost:8081访问
不是端口通了就万事大吉。Mezzio 要求入口统一走 public/index.php,而 XAMPP 默认 DocumentRoot 指向 xampp\htdocs,直接把 Mezzio 项目丢进去会 404 或暴露敏感文件。
正确做法是配虚拟主机,让 mezzio.local 指向项目根目录下的 public 子目录:
- 在
xampp\apache\conf\extra\httpd-vhosts.conf末尾追加:
<VirtualHost *:8081> ServerName mezzio.local DocumentRoot "C:/path/to/mezzio/public" <Directory "C:/path/to/mezzio/public"> AllowOverride All Require all granted </Directory> </VirtualHost>
然后在系统 C:\Windows\System32\drivers\etc\hosts 里加一行:127.0.0.1 mezzio.local。重启 Apache 后访问 http://mezzio.local:8081 才能正常路由。
PHP模块缺失导致Mezzio启动报错
Mezzio 依赖 mbstring、xml、curl、json,XAMPP 自带的 PHP 可能默认禁用部分扩展。启动时若报 Class 'Mezzio\Application' not found 或 mb_detect_encoding(): mbstring extension is not available,说明模块没开。
打开 xampp\php\php.ini,确认以下行前面的分号已去掉:
extension=mbstringextension=xmlextension=curlextension=openssl
改完必须重启 Apache——仅重启控制面板不够,要彻底 Stop 再 Start,否则 PHP 模块不会重载。
多端口共存时 Composer autoload 失效
如果同时跑多个 Mezzio 实例(比如 mezzio.local:8081 和 mezzio-dev.local:8082),且都用 composer install --no-dev 部署,容易出现 Class not found。根本原因是 XAMPP 的 PHP CLI 和 Apache 加载的 php.ini 文件路径不同:
- Apache 用的是
xampp\php\php.ini - CLI 常调用
xampp\php\php.ini,但某些版本会 fallback 到系统级配置,导致vendor/autoload.php路径解析错乱
验证方式:在项目根目录运行 php -m | findstr mbstring,看 CLI 是否真加载了模块;再在 public/index.php 开头加 var_dump(php_ini_loaded_file()); 查 Apache 实际加载的 ini 路径。两者不一致就必须统一指向同一份 php.ini,否则 autoload 逻辑会因环境差异断裂。

