php模块需通过libphp.so或php8apache2_4.dll加载,检查存在性后配置LoadModule、SetHandler并验证phpinfo()中“Server API”字段。

确认 PHP 模块是否已安装并可用
Apache 本身不自带 PHP,必须通过 libphp.so(unix/linux)或 php8apache2_4.dll(windows)这类模块加载。先检查模块是否存在:
- Linux:运行
ls /usr/lib/apache2/modules/ | grep php或find /usr -name "libphp*.so" 2>/dev/NULL - Windows:查看 Apache 的
modules/目录下是否有类似php8apache2_4.dll的文件(版本号需匹配你安装的 PHP) - 若找不到,说明 PHP 未以 Apache SAPI 方式安装——用
php -v看到cli不代表支持 Apache,得重装带--with-apxs2(Linux)或选中 “Apache 2.4 Handler”(Windows 安装向导)
在 httpd.conf 中加载 PHP 模块并设置处理器
仅靠 LoadModule 不够,还必须绑定文件扩展名与处理器。典型配置如下(路径和版本请按实际调整):
LoadModule php_module modules/libphp.so AddHandler php-script .php AddType application/x-httpd-php .php SetHandler application/x-httpd-php
注意几个关键点:
-
LoadModule路径必须绝对正确,比如 macOS Homebrew 安装的 PHP 可能是/opt/homebrew/opt/php/lib/httpd/modules/libphp.so -
AddType和二者选其一即可,但后者更可靠(尤其在有多个扩展如.phtml时) - Apache 2.4+ 推荐用
SetHandler而非旧式AddHandler,避免被.htaccess覆盖 - 如果 PHP 是 FPM 模式(推荐生产环境),这里不该加载
libphp.so,而应配ProxyPassMatch到127.0.0.1:9000,这是完全不同的路径
验证 PHP 是否真正生效而非仅“不报错”
重启 Apache 后访问 info.php 文件,内容仅为 ,但重点看输出页顶部的 “Server API” 字段:
立即学习“PHP免费学习笔记(深入)”;
- 显示
Apache 2.0 Handler或Apache 2.4 Handler→ 模块模式成功 - 显示
FPM/FastCGI→ 实际走的是 PHP-FPM,libphp.so根本没起作用 - 页面空白但无错误?检查 Apache 错误日志:
tail -f /var/log/apache2/Error.log(Linux)或logs/error.log(Windows),常见报错如Cannot load modules/libphp.so: undefined symbol: crypto_pkey_get_public表明 PHP 与 Openssl 版本冲突
Windows 下 apachectl restart 失败的典型原因
Windows 用户常卡在这步,不是配置写错,而是权限或依赖问题:
- Apache 服务账户(默认 Local System)无法读取 PHP 安装目录——把 PHP 目录加到系统
PATH,或改用绝对路径加载 DLL -
php8apache2_4.dll依赖的php8.dll找不到:把 PHP 根目录(含php8.dll)加入 Windows 系统环境变量PATH,然后重启命令行再试httpd -t - Apache 版本与 PHP DLL 不兼容:Apache 2.4.x 必须配
php8apache2_4.dll,配php8apache2_2.dll会静默失败
Apache 加载 PHP 模块这件事,表面是几行配置,实际成败取决于三个隐性条件:PHP 编译时是否启用了 Apache SAPI、模块路径是否被 Apache 进程真实访问到、以及所有依赖 DLL/so 是否在运行时可解析。少一个,httpd -t 都可能通过,但请求进来就 500 或直接忽略 .php 后缀。