Windows 下同时运行多个 PHP 版本与 Nginx 配置指南

引言

在 Web 开发中,开发者可能需要在同一台 Windows 服务器上运行多个 PHP 版本(例如 PHP 7.4 和 PHP 8.2),以支持不同项目的兼容性需求。结合 Nginx 和 PHP-FPM,可以高效处理 PHP 应用的高并发请求。本文将详细介绍如何在 Windows 系统上安装和配置多个 PHP 版本,并通过 Nginx 调用这些版本,无需依赖环境变量。

安装多个 PHP 版本

下载和解压 PHP

  1. 访问 PHP 官方网站,下载所需版本的 PHP(建议选择非线程安全版本,Non-Thread Safe, NTS,以确保包含 PHP-FPM)。
    • 例如:下载 PHP 7.4 和 PHP 8.2 的 ZIP 包。
  2. 将每个版本解压到独立目录,例如:
    • PHP 7.4:C:\php\php-7.4
    • PHP 8.2:C:\php\php-8.2
  3. 确认每个目录包含 php.exephp-fpm.exe(若缺失 PHP-FPM,需重新下载 NTS 版本)。

配置 PHP.ini

  1. 在每个 PHP 版本目录下,找到 php.ini-developmentphp.ini-production 文件。
  2. 复制并重命名为 php.ini,并配置关键参数,例如:
    • PHP 7.4:extension_dir = "C:\php\php-7.4\ext"
    • PHP 8.2:extension_dir = "C:\php\php-8.2\ext"
    • 设置时区:date.timezone = Asia/Shanghai
  3. 根据项目需求启用扩展(如 extension=gd)。

配置 PHP-FPM

每个 PHP 版本需要独立的 PHP-FPM 配置文件,以避免端口冲突。

  1. 检查配置文件

    • 打开 C:\php\php-7.4\etc\php-fpm.confC:\php\php-8.2\etc\php-fpm.conf
    • 如果文件不存在,创建 php-fpm.conf,添加以下内容:
      [global]
      pid = run/php-fpm.pid
      error_log = log/php-fpm.log
      [www]
      listen = 127.0.0.1:9000  ; PHP 7.4 使用 9000 端口
      user = nobody
      group = nobody
      pm = dynamic
      pm.max_children = 5
      pm.start_servers = 2
      pm.min_spare_servers = 1
      pm.max_spare_servers = 3
      
      对于 PHP 8.2,将 listen 改为:
      listen = 127.0.0.1:9001  ; PHP 8.2 使用 9001 端口
      
  2. 验证配置

    • 运行以下命令检查配置文件:
      C:\php\php-7.4\php-fpm.exe -t
      C:\php\php-8.2\php-fpm.exe -t
      
    • 如果返回 [OK],配置正确;否则,根据错误信息调整。
  3. 启动 PHP-FPM

    • 使用完整路径启动:
      C:\php\php-7.4\php-fpm.exe
      C:\php\php-8.2\php-fpm.exe
      
    • 验证端口是否监听:
      netstat -an | find "9000"
      netstat -an | find "9001"
      
      应显示 TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 和类似 9001 的输出。

配置 Nginx 调用多个 PHP 版本

Nginx 通过 FastCGI 协议与 PHP-FPM 通信,无需将 PHP 路径添加到系统环境变量 Path

  1. 安装 Nginx

    • 下载 Nginx for Windows(从 nginx.org),解压到 C:\nginx
    • 确保 Nginx 可运行:
      C:\nginx\nginx.exe
      
  2. 编辑 Nginx 配置文件

    • 打开 C:\nginx\conf\nginx.conf,配置不同站点使用不同 PHP 版本:
      http {
          server {
              listen 80;
              server_name site1.local;
              root C:/www/site1;  # 网站根目录
              index index.php index.html;
              location ~ \.php$ {
                  fastcgi_pass 127.0.0.1:9000;  # PHP 7.4
                  fastcgi_index index.php;
                  include fastcgi_params;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              }
          }
          server {
              listen 80;
              server_name site2.local;
              root C:/www/site2;  # 网站根目录
              index index.php index.html;
              location ~ \.php$ {
                  fastcgi_pass 127.0.0.1:9001;  # PHP 8.2
                  fastcgi_index index.php;
                  include fastcgi_params;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              }
          }
      }
      
  3. 配置 Hosts 文件

    • 编辑 C:\Windows\System32\drivers\etc\hosts,添加:
      127.0.0.1 site1.local
      127.0.0.1 site2.local
      
  4. 测试和重启 Nginx

    • 测试配置:
      C:\nginx\nginx.exe -t
      
    • 重启 Nginx:
      C:\nginx\nginx.exe -s reload
      

测试配置

  1. 创建测试文件
    • C:\www\site1C:\www\site2 下分别创建 test.php
      <?php
      phpinfo();
      ?>
      
  2. 访问测试页面
    • 在浏览器访问:
      • http://site1.local/test.php(应显示 PHP 7.4 信息)
      • http://site2.local/test.php(应显示 PHP 8.2 信息)
  3. 验证版本
    • 检查输出的 PHP 版本信息,确保与预期匹配。

环境变量的非必要性

在上述配置中,Nginx 不依赖系统 Path 环境变量调用 PHP-FPM,因为:

  • PHP-FPM 通过指定路径手动启动(C:\php\php-x.x\php-fpm.exe)。
  • Nginx 通过 fastcgi_pass 直接连接 PHP-FPM 的监听端口(如 127.0.0.1:9000)。
  • 只需要确保 PHP-FPM 进程运行,且 Nginx 配置文件正确指向端口。

若需在命令行中简化操作,可使用 PowerShell 别名或脚本,而无需修改系统环境变量。例如:

Set-Alias php74 C:\php\php-7.4\php.exe
Set-Alias fpm74 C:\php\php-7.4\php-fpm.exe

注意事项

  1. PHP-FPM 可用性
    • 确保每个 PHP 版本包含 php-fpm.exe。若缺失,下载 NTS 版本。
  2. 端口冲突
    • 不同 PHP 版本的 PHP-FPM 需使用不同端口(如 9000、9001)。
  3. 日志排查
    • 检查 PHP-FPM 日志(C:\php\php-x.x\log\php-fpm.log)和 Nginx 日志(C:\nginx\logs\error.log)以定位错误。
  4. 自动化启动
    • 使用批处理脚本或工具(如 NSSM)将 PHP-FPM 配置为 Windows 服务,方便自动启动。
  5. 安全性
    • 避免以 root 或高权限用户运行 PHP-FPM。
    • 使用防火墙限制对 PHP-FPM 端口的外部访问。

总结

在 Windows 上,你可以轻松安装和运行多个 PHP 版本,并通过 Nginx 和 PHP-FPM 支持多站点配置。无需将 PHP 路径添加到环境变量,只需正确配置 PHP-FPM 的监听端口和 Nginx 的 FastCGI 设置即可。通过完整路径启动 PHP-FPM,并为不同站点分配不同 PHP 版本,可以灵活满足项目需求。

No comments

公司简介

 

自1996年以来,公司一直专注于域名注册、虚拟主机、服务器托管、网站建设、电子商务等互联网服务,不断践行"提供企业级解决方案,奉献个性化服务支持"的理念。作为戴尔"授权解决方案提供商",同时提供与公司服务相关联的硬件产品解决方案。
备案号: 豫ICP备05004936号-1

联系方式

地址:河南省郑州市经五路2号

电话:0371-63520088

QQ:76257322

网站:800188.com

电邮:该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。