Apache本身不解析PHP,必须加载libphp.so或php_module模块并配置处理器,检查模块存在性、启用prefork MPM、添加LoadModule和AddHandler指令,最后通过phpinfo()验证Server API字段是否为Apache Handler。

确认 PHP 模块是否已安装并可用
先检查系统是否已提供 Apache 兼容的 PHP 模块文件:
- 运行 find /usr -name "libphp*.so" 2>/dev/null 查找模块路径(常见位置:
/usr/lib/apache2/modules/libphp.so(Debian/Ubuntu)、/usr/lib64/httpd/modules/libphp8.so(RHEL/CentOS)) - 执行 php -v 确认 PHP 已安装;再运行 apache2ctl -M | grep php(Debian)或 httpd -M | grep php(RHEL)看是否已有
php_module (shared) - 若无输出,不代表没装模块,只是未加载——先确认模块文件存在,再继续下一步
启用 PHP 模块并配置处理器
模块存在后,需显式加载并告诉 Apache 哪些文件交给 PHP 处理:
- Debian/Ubuntu:直接运行 sudo a2enmod php8.2(版本号按实际调整),它会自动创建符号链接并启用依赖项
-
RHEL/CentOS 8+:安装 sudo dnf install php-apache,该包自带正确
LoadModule行,写入/etc/httpd/conf.modules.d/15-php.conf - 手动编辑主配置(如
/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf)时,添加两行(路径严格匹配上一步查到的实际模块路径):LoadModule php_module /usr/lib/apache2/modules/libphp.soAddHandler application/x-httpd-php .php
检查 MPM 兼容性与启动状态
PHP 模块(libphp.so)仅兼容 prefork MPM,若当前使用 event 或 worker,Apache 将无法启动,并报错 "Invalid argument: couldn't create or get scoreboard":
- 查当前 MPM:apache2ctl -V | grep MPM 或 httpd -V | grep MPM
-
Debian/Ubuntu:禁用 event,启用 prefork:
sudo a2dismod mpm_event && sudo a2enmod mpm_prefork -
RHEL/CentOS:编辑
/etc/httpd/conf.modules.d/00-mpm.conf,注释mpm_event行,取消注释mpm_prefork行 - 重启前务必执行 sudo apache2ctl configtest(Debian)或 sudo httpd -t(RHEL)验证配置语法
验证 PHP 是否真正生效
配置完成不等于可用,需端到端验证:
立即学习“PHP免费学习笔记(深入)”;
- 重启服务:sudo systemctl restart apache2(Debian)或 sudo systemctl restart httpd(RHEL)
- 创建测试文件:
/var/www/html/test.php,内容为<?php phpinfo(); ?> - 浏览器访问
http://localhost/test.php,看到 PHP 信息页即成功;若显示源码,说明处理器未生效;若 500 错误,多为模块路径错误或 MPM 不匹配 - 额外确认:curl -I http://localhost/test.php 应返回
Content-Type: text/html; charset=UTF-8,而非text/plain



















