Apache本身不原生支持多PHP版本共存,须通过隔离SAPI实现:Windows下可让PHP7走CGI/FastCGI、PHP8走mod_php;Linux下推荐全用PHP-FPM,各版本监听独立socket或端口,并在VirtualHost中用ProxyPassMatch分别代理。

Apache 本身不原生支持多个 PHP 版本共存,但可以通过模块加载 + 虚拟主机(或目录)绑定的方式,实现 PHP7 和 PHP8 同时运行——关键不是“让 Apache 加载两个 php_module”,而是让不同站点或路径走不同的 PHP SAPI 处理器。
核心思路:用不同端口或不同处理器隔离版本
Windows 或 Linux 下主流可行方案是:
- PHP7 用
mod_php(即php7apache2_4.dll)嵌入式方式处理特定虚拟主机 - PHP8 用
proxy_fcgi模块反向代理到本地 PHP-FPM 实例(推荐,更稳定、易切换) - 或者反过来:PHP8 用
mod_php(需对应php8apache2_4.dll),PHP7 用 FPM
Windows 下实操要点
前提:已分别解压 PHP7(如 D:\php7)和 PHP8(如 D:\php8),都配好 php.ini 并开启必要扩展(mbstring、mysqli、pdo_mysql 等)。
- Apache 只加载一个
php_module(比如只加 PHP8 的 DLL),否则会冲突报错 - 在
httpd.conf或虚拟主机配置中,对 PHP7 站点禁用默认处理器,改用 CGI/FastCGI 方式调用:
ScriptAlias /php7-cgi "D:/php7/php-cgi.exe"<br> AddHandler application/x-httpd-php7 .php<br> Action application/x-httpd-php7 "/php7-cgi"
- 对 PHP8 站点保持
AddType application/x-httpd-php .php,并确保LoadModule php_module "D:/php8/php8apache2_4.dll"已启用 - 务必在每个
<VirtualHost>内用SetHandler或Action显式指定 PHP 版本,避免全局混用
Linux(CentOS/RHEL)推荐方案:全走 PHP-FPM
更安全、更符合现代运维习惯,也天然支持多版本共存:
立即学习“PHP免费学习笔记(深入)”;
- 安装两个 PHP-FPM 实例:比如
php74-fpm和php81-fpm(通过 Remi 仓库) - 各自监听不同 socket(如
/var/run/php-fpm74.sock和/var/run/php-fpm81.sock)或端口(如127.0.0.1:9074/:9081) - 在 Apache 虚拟主机中分别配置:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9074/var/www/site7/ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9081/var/www/site8/ - 注意:每个站点 DocumentRoot 路径要与 ProxyPass 中的后缀路径严格一致,否则脚本路径解析会出错
验证是否生效
不要只看 phpinfo() 页面顶部的 PHP 版本,重点检查:
- Server API 字段:PHP7 站点应显示
CGI / FastCGI或Apache 2.0 Handler(取决于你选的模式) - PHP8 站点若走 FPM,Server API 应为
FPM/FastCGI;若走 mod_php,则为Apache 2.4 Handler - 执行
<?php echo PHP_VERSION; ?>确认实际运行版本 - 检查 Apache 错误日志(
error_log),确认无undefined symbol或cannot load module类错误



















